Bug introduced in V10.4 or earlier and persisting through V12.0
[CASE:3852725] was created
[...] I have forwarded an incident report to our developers with the information you provided. [...]
This small helper function will show us TaggingRules
written explicitly to the notebook. (Because Options/CurrentValue
show values merged from $FrontEnd/$FrontEndSession
too)
nbTR[] := TaggingRules /. List @@ Rest @ NotebookGet @ EvaluationNotebook[]
Here is the story:
create a new notebook and evaluate:
CurrentValue[$FrontEndSession, {TaggingRules, "a"}] = 1;
now we can check that notebook's
TaggingRules
are nicely merged even though they are not written explicitly:CurrentValue[EvaluationNotebook[], {TaggingRules, "a"}] nbTR[]
1
TaggingRules
Pay attention now! Let's use example from documentation: TaggingRules / Applications
So we want to have some tagging rules local to the notebook:
CurrentValue[ EvaluationNotebook[], {TaggingRules, "InputFieldState"} ] = "initial string";
And let's check:
CurrentValue[EvaluationNotebook[], {TaggingRules, "InputFieldState"}]
"initial string"
but
nbTR[]
{......., "a" -> 1 (??!!), "InputFieldState" -> "initial string"}
So the bottom line is, if the notebook doesn't contain TaggingRules
explicitly then it will inherit all you have in $FrontEnd
/$FrontEndSession
!
And this is a problem because:
I didn't modify
"a"'s
value on a notebook level but it is now localized here and won't inherit external changes:CurrentValue[$FrontEndSession, {TaggingRules, "a"}] = 22; CurrentValue[$FrontEndSession, {TaggingRules, "a"}] CurrentValue[EvaluationNotebook[], {TaggingRules, "a"}]
22
1 (!!!)
Not to mention that you write to file possibly private data without notice.
I consider this a serious flaw. Any suggested prevention measures?