Skip to content

An advisory nudge names a node you can still advise - #213

Merged
TinDang97 merged 2 commits into
mainfrom
fix/doctor-nudges-what-you-can-act-on
Sep 3, 2026
Merged

An advisory nudge names a node you can still advise#213
TinDang97 merged 2 commits into
mainfrom
fix/doctor-nudges-what-you-can-act-on

Conversation

@TinDang97

Copy link
Copy Markdown
Collaborator

Two commits, both prompted by the unauthored_node finding that shipped in 3.4.0 actually pointing at something.

caf5b103 — doctor reports what you can act on

Measured on this repo's own bundle: 23 of doctor's 25 findings were unadvised_sensitive, and every one named a task already done. The advice each carries — attach a lens — is unreachable on a closed, gated node, so the report read as a wall with the two actionable findings sitting inside it. A report is read as a worklist whether or not it was written as one.

unadvised_sensitive now skips a node whose status is done. Type, sensitivity floor, lens presence and the severity split (security warn, softer floors info) are untouched.

Three calls inside the contract, each carrying a probe:

  • done is the ONLY exclusion. A node in verify can still take a lens before its gate; excluding it would hide a finding while it is still actionable.
  • An absent status is not closed (R:BLINDCLOSE). Hiding a finding on a malformed node is the failure this rule guards against, not an instance of it.
  • The closed findings are dropped, not tallied. A summary line is still a line the reader has to decide to ignore.

On this bundle: 25 findings → 1, and the survivor is the real edge_unresolved defect the noise had been burying.

62e157f3 — v3-final-collateral, authored from the work it shipped

Scaffolded 2026-08-11 by add/3.0.0 and driven to six closed tasks without its CARD or EXIT ever being filled in. Nothing asked: freeze did not refuse a template Milestone until authoring-beat-named shipped that guard, and placeholders_in reads only RULES/ASSUMPTIONS/CHECKS, which a Milestone body does not have. status had been pointing at it as live work for three weeks.

Deletion was considered and rejected on inspection. Six tasks declare milestone: v3-final-collateral and all six are done, so removing the node would have traded one warning for six dangling edges. Authored retrospectively from what those six shipped, closed 6/6, archived — the why: says out loud that it was written after the fact.

Verification

1116 passed, 7 skipped across both test roots. Task doctor-nudges-what-you-can-act-on gated PASS on runs/1.md at freshness: fresh; ENGINE_MD5 re-aimed and all four engine twins synced.

One note for the reviewer: my first fixture called add.doctor(root / ".add"), which returns []doctor takes the project root. That is the "green anchor proving nothing" shape, and it surfaced only because a check asserting preserved behaviour was failing when it should have passed.

…ipped

The milestone was scaffolded 2026-08-11 by add/3.0.0 and driven to six closed
tasks without its CARD or EXIT ever being filled in. Nothing asked: `freeze` did
not refuse a template Milestone until the `authoring-beat-named` task shipped
that guard, and `placeholders_in` reads only RULES/ASSUMPTIONS/CHECKS, which a
Milestone body does not have.

The new `unauthored_node` finding surfaced it, and `status` had been pointing at
it as live work for three weeks.

Deleting it was considered and rejected on inspection: six tasks declare
`milestone: v3-final-collateral` and all six are done, so removing the node would
have traded one warning for six dangling edges. Authored retrospectively from
what those six tasks shipped, closed 6/6, archived. The `why:` says out loud that
it was written after the fact.

author: Tin Dang
Measured on this repo's own bundle: 23 of doctor's 25 findings were
`unadvised_sensitive`, and every one named a task already `done`. The advice each
carries — attach a lens — is unreachable on a closed, gated node, so the report
read as a wall of noise with the two actionable findings sitting inside it. A
report is read as a worklist whether or not it was written as one.

`unadvised_sensitive` now skips a node whose status is `done`. Everything else is
untouched: type, sensitivity floor, lens presence, and the severity split where
security warns and the softer floors nudge.

Three calls inside the contract, each with a probe:
- `done` is the ONLY exclusion. A node in `verify` can still take a lens before
  its gate, so excluding it would hide a finding while it is still actionable.
- An ABSENT status is not closed (R:BLINDCLOSE). Hiding a finding on a malformed
  node is the failure this rule guards against, not an instance of it.
- The closed findings are DROPPED, not tallied. A summary line is still a line
  the reader has to decide to ignore.

On this bundle: 25 findings -> 1, and the survivor is the real `edge_unresolved`
defect that the noise had been burying.

Task: doctor-nudges-what-you-can-act-on, gated PASS on receipt runs/1.md.
ENGINE_MD5 re-aimed 7932ec06 -> the doctor scoping.

author: Tin Dang
@TinDang97
TinDang97 merged commit f69b703 into main Sep 3, 2026
8 checks passed
@TinDang97
TinDang97 deleted the fix/doctor-nudges-what-you-can-act-on branch September 3, 2026 09:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant