Skip to content

D282 — A key absent on this machine is ignored by name, and a sync warns in one line

Decision. cartographer paths ignore <key> records the placeholder id (repo:<key> / path:<key>) in a new ignored_paths: list of .cartographer.yaml. An ignored key is still resolved, still left verbatim when it does not, and still recorded in the lock; it is only not reported: the sync warning, status and the connect step skip it, and paths list shows it as ignored. paths unset removes an ignore; paths set on an ignored key lifts it. The sync warning is one summary line (N placeholder(s) not resolved on this machine … cartographer paths list); only the keys not already unresolved in the lock the projection started from get detail, with a reason shared by several keys printed once.

Why. D162/D262 made the warning actionable; on a client bound to several KBs it became the opposite, ~110 lines per sync for keys that can never resolve here (a work repo on a personal laptop), burying the sync outcome and teaching the reader to skip it. The remedy is to let the operator acknowledge a key and to say only what changed.

Alternatives rejected. - A sentinel value in paths: (e.g. an empty string). It reuses the map but every resolver (repoindex, expand, cartographer resolve) reads paths: as a path and would have to learn the sentinel; one missed reader turns "absent" into a bogus path. - paths set <key> --absent. Same storage question, and it makes set mean two things. - A separate ignore list for the warning only, hiding it from paths list. The issue's point is that an ignored key stays visible; hiding it makes a mistaken ignore invisible. - Store the unprefixed key like paths:. One slug can be a repo and a path in different KBs; ignoring one must not silence the other, so the id keeps its kind. - Diff against the previous sync in a new lock field. The lock already records unresolved_placeholders; Apply starts from that lock, so the prior set is free. - Drop the per-key detail entirely. A newly unresolved key is exactly the one that matters and must be named the first time.

Consequences. An ignored key that later resolves is simply resolved; an ignore never blocks a sync or changes status's exit code (D75 WP3). The first sync of a projection with no prior lock names every unresolved key once. A key mapped under paths: cannot also be ignored. The TUI done message still counts ignored keys, since it reads the lock only.