120 of 130 seam refusals give the user a token with no next step #238
Labels
No labels
already-shipped
bug
documentation
duplicate
enhancement
external-review
good first issue
help wanted
in progress
invalid
needs-decision
proposal
question
security
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: crenshawdev/cadence-archived#238
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The gap, counted
Seam refusals hand the user a machine token and nothing else.
Measured on 2026-08-23 across
cadence-core/bin/:reasonhintSo roughly 120 failure paths surface something like
unprovable-queue,partial-flip,symlinked-trace,count-disagreementorunresolved-rangewith no plain-language next step. The workflows correctly say "relay
reason/hint", which means the kebab-case token is the error message auser sees.
What good already looks like
The 10 existing hints are the model to copy:
Each names the action, in the user's terms, without explaining the internals.
Why this is the right target
There are two prose surfaces in this tree and only one should get simpler.
Model-facing prose stays dense.
workflows/, agent contracts andreferences/are weight-budgeted and load-bearing.workflows/plan.mdsits at22,638 B against a budget of 22,638 with zero headroom, and self-verify fails
the build on overrun. Simplifying that prose makes it longer and strips the
precision that makes gates falsifiable.
User-facing text is where accessibility lives, and hints are the cheapest,
most measurable slice of it. They live in
bin/, which is not weight-budgeted,so this costs no context bytes on any surface.
Scope
reasonsite gains ahintthat names what to do next, in plainlanguage, without requiring the reader to know the internals.
reasonwithout ahintis areported problem. That is what stops this regressing, and it is why this is
a phase rather than a one-off sweep.
Explicitly not in scope
reasontoken. They are matched by tests and by callers.Deferred, related
Two softer accessibility gaps found in the same pass, both prose-judgment work
with no test behind them, so they are deliberately left out:
structure work for you?"). The jargon comes from what the model fills in
around them at runtime. Would need a register rail in the seam, not a code
change.
donestep report blocks are dense field lists(
Traceability: {seeded ids | none seeded | orphan_ids | no_active_section}).Target:
v3.6.1.Moved to GitHub: https://github.com/crenshawdev/cadence/issues/90
This project's tracker is now GitHub; this repository remains the public archive. Closed here as migrated, not as resolved.
Retargeting: v3.7.0, not v3.6.1.
v3.6.1 opened at the v3.6.0 close as three measured defects in what v3.6.0 shipped (WHY-02, WHY-03, WHY-04, all in /cad-why). A 120-site text sweep plus a new blocking self-verify check is a different animal, and it carries its own thesis, so it gets a minor of its own rather than riding a patch cycle.
Re-measured against the tree after v3.6.0 merged: 17 hints now, not 10, and all 17 are in planning.mjs and skim.mjs. Every other seam is at zero. release-decision.mjs 17 reasons / 0 hints, text-transport.mjs 16 / 0, route.mjs 14 / 0, bulk-output.mjs 14 / 0. v3.6.0 added seam surface faster than it added hints, so the ratio is worse than when this was filed, not better.
Part 2 of the scope is what makes it a phase: without the self-verify check the sweep is written once and the next seam ships without a hint anyway.
Seeded in .planning/CAPTURE.md so the next milestone close reads it.
Re-measured after v3.6.0 merged: 17 reason sites now carry a hint, up from 10 when this was filed. All 17 are in
planning.mjsandskim.mjs; every other seam is at zero -release-decision.mjs17 reasons / 0 hints,text-transport.mjs16 / 0,route.mjs14 / 0.v3.6.0 added seam surface faster than it added hints, so the ratio is worse than at filing, not better. That is the argument for the second half being a self-verify check rather than a one-time sweep: a sweep fixes the 130 that exist, and a check is what stops the 131st shipping without one.
Scope note carried from triage: no reason-token changes (tests and callers match them), no behavior change, and no model-facing prose rewrite -
workflows/plan.mdsits at its 22,638 B budget with zero headroom. The hints land inbin/, which carries no weight-budget entry, so they cost no context bytes.Absorbed from #247, which was carrying this as a second cluster over the same lines.
Three refusal sites that name the condition and not the remedy, all inside this issue's counted set:
bin/lib/publish-decision.mjs- measured 6reason:sites and 0 hints.decidePublishgatesno-branch/bad-branch/protected-branch/bad-remote/remote-not-configured, anddecideReapbeside it. The file's own comment concedes only one gate per function carries a detail. This is on /cad-land's unattendedauto_closepath, so the reader is a user whose close just stopped with no next step.planning.mjs:575-fail('unparseable-cursor', 'STATE.md does not match the 4-line schema'). Names the schema it violated and neither the repair nor the pointer totemplates/STATE.md. (#247 cited:537; the line has drifted since that inventory was taken, re-located here.)cadence-core/bin/config.mjs- 3 reasons, 0 hints. See the milestone note on #249 below.#247 keeps the risk-surface legend cluster, which is a different defect on model-facing prose files that are weight-budgeted.