Skip to content

A plan says what it still wants — queued vs abandoned, and drop as the 27th verb - #220

Closed
TinDang97 wants to merge 3 commits into
mainfrom
feat/a-plan-says-what-it-wants
Closed

TinDang97 wants to merge 3 commits into
mainfrom
feat/a-plan-says-what-it-wants

Conversation

@TinDang97

Copy link
Copy Markdown
Collaborator

Closes the last gap from the yowo PR #16 review. Supersedes #219 — contains its release commit plus this work, so 3.6.0 ships with all four gaps closed instead of three.

The gap

3.6.0 made a 40-task roadmap legible: every row carries its title, the headline counts the unauthored ones. It still could not answer what a reviewer actually asks — is this a queue or a graveyard? A task the plan is working toward and a task the plan walked away from both read [scaffold].

After

yowo — …  ·  2 queued · 1 abandoned · 1 adrift (add todo)
  · cli-bounded-memory   [queued]     Bounded CLI memory
  · cli-error-taxonomy   [queued]     One error taxonomy
  · legacy-shim          [abandoned]  Legacy config shim
  · stray-idea           [adrift]     Something I jotted down

add todo groups by the same three words, sorting adrift and abandoned above queued — a queue of forty must not hide two strays at the bottom.

Three surfaces

The word is derived, never stored (R:NEWFIELD). The plan that queued a task is its milestone, so the answer already exists in two places that cannot disagree: the task's milestone: and that milestone's status:. A third copy would drift out of step with the thing it describes. archived closes a plan alongside done; a milestone: naming nothing is adrift, identical to naming none, and a read verb never raises on the typo.

milestone-done refuses to close over unauthored members (R:SILENTABANDON). This is where a graveyard came from — it tallied exit criteria and never looked at what it held, so a milestone closed and its queued tasks stopped being anybody's. It now names each one and offers all three exits: author it, drop it, or re-home it. A refusal naming one fix does not present a choice, it applies pressure. Same shape as R:UNDRAINED for lessons, one level up.

add drop <slug> --reason "<why>" — the 27th verb (R:DEADWORD). dropped was a status the engine READ in three places and no verb could WRITE. Withdrawing work meant deleting a file or letting it rot as a scaffold, and neither leaves a reason. A done task is refused — that verdict was gated against a receipt, and reopen revisits it without erasing it.

The ripple, and what makes it finite

A 27th verb reaches every registry that enumerates the set: CLI WIRED lists, three skill trees, two READMEs, the book command reference, four count pins. E6 records that as the verb's real cost, and a new check enumerates the registries so the ripple is a list somebody can read rather than something discovered one CI failure at a time.

Four checks pinned the literal word scaffold. Rule kept, expired premise replaced — each now asserts membership in SCAFFOLD_KINDS and that the word is not direction. loop.md's Gather step promised one word and now promises three, each registered and driven from real stdout; one rewrite dropped the sentence below the claim detector's verb list, and the guard caught it, which is the guard working.

SKILL.md lands at exactly 176/176 lines and 13258/13258 bytes — the new cookbook line and wired-surface entry are funded by compressing the Engine paragraph, the init bullet and three cookbook comments, not by moving a human-set pin.

Verification

1444 passed, 7 skipped, 0 failed on both test roots. Gated on a covers-bound receipt; engine mirrored to all four twins with both pins re-aimed.

Still yours

No tag, no publish. After merge:

git tag v3.6.0 && git push origin v3.6.0

…ng on refusals

Eight version declarations moved in lockstep: pyproject.toml, __init__.py,
package.json, package-lock.json (2 sites), .claude-plugin/plugin.json, the ENGINE
stamp in all four engine twins, and the metadata version in all three skill trees.
The dogfood bundle's index.md engine stamp follows, and ENGINE_MD5 plus the SKILL.md
sha256 prose pin are re-aimed.

CHANGELOG records what the two milestones actually found, including the two items
carried into 3.7 knowingly rather than quietly: eleven verbs still answering a refusal
with `False`, and the SKILL.md prose pin still held in two files.

Suite: 1439 passed, 7 skipped, 0 failed.

The tag and the npm/PyPI publish are human-owned and NOT done here.
…op` is the 27th verb

3.6.0 made a 40-task roadmap legible: every row carries its title, the headline counts
the unauthored ones. It still could not answer what a reviewer actually asks — is this a
queue or a graveyard? A task the plan is working toward and a task the plan walked away
from both read `[scaffold]`.

An unauthored task now reports which plan wants it:

  yowo — …  ·  2 queued · 1 abandoned · 1 adrift (add todo)
    · cli-bounded-memory  [queued]     Bounded CLI memory
    · legacy-shim         [abandoned]  Legacy config shim
    · stray-idea          [adrift]     Something I jotted down

DERIVED, never stored (R:NEWFIELD). The plan that queued a task IS its milestone, so the
answer already exists in two places that cannot disagree — the task's `milestone:` and
that milestone's `status:`. A third copy would drift out of step with the thing it
describes. `archived` counts as closed alongside `done`; a `milestone:` naming nothing
is `adrift`, identical to naming none, and a read verb never raises on the typo.

`milestone-done` is where a graveyard comes from. It tallied exit criteria and never
looked at its member tasks, so a milestone closed and whatever it queued stopped being
anybody's, with nothing said. It now refuses, names every unauthored member, and offers
all three real exits — author it, drop it, or re-home it under a live milestone. A
refusal naming one fix does not present a choice, it applies pressure.

`add drop <slug> --reason "<why>"` is the 27th verb. `dropped` was already a status the
engine READ in three places and no verb could WRITE — vocabulary living only in the
reader (R:DEADWORD). Withdrawing work meant deleting a file or leaving it to rot as a
scaffold, and neither leaves a reason. The reason is required for the same purpose the
whole task serves. A `done` task is refused: that verdict was gated against a receipt,
and `reopen` is the verb that revisits it without erasing it.

The verb ripples into every registry that enumerates the set — CLI WIRED lists, three
skill trees, two READMEs, the book command reference, four count pins. E6 records that
cost, and a check now enumerates the registries so the ripple is finite rather than
discovered one CI failure at a time.

Four checks pinned the literal word `scaffold`. Rule kept, expired premise replaced:
each now asserts membership in `SCAFFOLD_KINDS` and that the word is not `direction`.
`loop.md`'s Gather step promised one word and now promises three — each registered and
proven from driven stdout, including re-detecting the sentence after a rewrite dropped
it below the claim detector's verb list.

SKILL.md lands at exactly 176/176 lines and 13258/13258 bytes: the new cookbook line and
the wired-surface entry are funded by compressing the Engine paragraph, the init bullet
and three cookbook comments — not by moving a human-set pin.

Suite: 1444 passed, 7 skipped, 0 failed.
Records the three surfaces that closed the last gap from the yowo PR #16 review, plus
the three lessons they filed, drained and bound as decisions:

- every status the engine reads has a verb that writes it
- a close inspects what it holds
- a count of pending work splits by the property the reader will act on

Suite: 1444 passed, 7 skipped.
@TinDang97

Copy link
Copy Markdown
Collaborator Author

Superseded by #222 — same linear stack; every commit here is contained in that branch. Closing in favour of it.

@TinDang97 TinDang97 closed this Sep 10, 2026
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