process: an orientation ask is session entry — answer it from the store queue - #18
Open
jussi-modernpath wants to merge 4 commits into
Open
process: an orientation ask is session entry — answer it from the store queue#18jussi-modernpath wants to merge 4 commits into
jussi-modernpath wants to merge 4 commits into
Conversation
…queue
`rdd-start` already owned the right behaviour — preflight lists the pending
human decisions, and taking the scope presents the routed queue — but nothing
made a session actually reach it when the question arrived as a question. An
orientation ask ("what should I do next?") matched none of the description's
triggers, which are all work verbs: start, continue, pick up. The session
answered from version control instead, and recommended repository chores while
a queue of open human gates sat unread in the context window.
Four additions, all to `rdd-start`:
- the description now triggers on the orientation forms — what to work on
next, where the loop stands, what is waiting on a decision, what is blocked;
- preflight states that a host-delivered session-start brief IS the store's
answer arriving early, not ambient background, and must be dated against the
store revision before it is relied on. A projection that cannot be dated is
reported as unknown rather than presented as current — a real failure mode:
a cached queue can answer while the live read refuses on an expired token;
- taking the scope covers the case where the request is an orientation
question rather than a scope, and says plainly that version control, change
lists, and the working tree describe the repository rather than the loop;
- what is presented is ranked by what a single human answer releases, with the
awaiting-decision / ready / awaiting-acceptance distribution stated, because
an acceptance bucket that dwarfs the ready bucket is a finding about where
the loop is stalled rather than a list to hand over uncounted.
Report gains the matching rule: process and tooling work that carries no
requirement record is labelled as such and never substitutes for the queue.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0115VUeQov83Qf7tipMR5S3V
The skill fix alone was circular. `rdd-start/SKILL.md` is read once something routes a session to it; `AGENTS.md` is required reading before any product work, so it is the file that does the routing. Widening only the skill's triggers left the failure intact for exactly the session that never opened the skill — which is the session the change is for. `Required reading` gated on four verbs: planning, changing, reviewing, delivering. Being asked what to do next is none of them, so the entry condition never fired and the queue went unread. Now the gate names the orientation asks alongside the four verbs, and a closing paragraph states where the answer comes from: the store's pending human decisions and routed work, through `rdd-start`. Version control, change lists, and the working tree describe the repository rather than the loop and never answer the question. The concrete read stays project-owned — this package is host-agnostic and must not name one CLI's commands — but naming it is now an obligation on the project's root `AGENTS.md`, and an omission is reportable rather than silently absorbed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0115VUeQov83Qf7tipMR5S3V
`AGENTS.md` §Instruction ownership is explicit that `PROCESS.md` defines the canonical process and that skills apply it rather than redefining it. The two earlier commits put a rule into `AGENTS.md` and `rdd-start` that `PROCESS.md` never states — a rule asserted by files whose own charter says they may not assert one. Correct behaviour, wrong home. Three places state it where it belongs: - `Authority` already closes its source table by warning that code proves existing behavior rather than intended behavior. Repository state deserves the same caveat and never had one: branches, diffs, change lists and version control's own review queues prove what the repository contains, not what the loop holds, and are never a source for selection, status, or priority. The table has no row for them because they are not sources — but that silence is what let a session reach for them first. - The `Enter session` phase row required a frozen scope routed to its earliest unmet phase, which is not the only legitimate exit. Answering an orientation request from the current pending-decision projection is the other, and is now named as such. - `State records` said the projection is regenerated and is never lifecycle authority — what it is not, twice, and never what it is for. It now also says what it is for: the session's answer to what to work on next, read from the store, dated against the store revision, presented ranked by what a single human answer releases. A projection delivered into a session ahead of the request is that same answer arriving early, not background context. `rdd-deliver` needs no matching change: it defers all semantics to `PROCESS.md` and already reconciles projections in its first step. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0115VUeQov83Qf7tipMR5S3V
…y "not", and can be floored against a vacuous scan Two defects in skills/rdd-audit/audit-citations.mjs, both in the one direction a citation audit must never fail — making a broken audit read as a clean pass. The absence exemption excused a *failing* citation whenever `not` or `never` appeared in the 60-char window before it. Those two words carry no absence meaning on their own: "the handler is not used anymore; its logic moved to CODE:new.go:900" is an ordinary sentence, and if new.go is 400 lines the citation is rot — but the trailing "is not" excused it. Every other absence word names a missing thing directly (no, there is no, missing, does not exist, absent, without); not/never are removed, so a deliberate gap still reads "there is no X" and stays excused, while an unrelated negation no longer grants a real broken citation a pass. Verified on a fixture: a citation to a non-existent line trailing "...is not used; see" flips from excused to broken, while "there is no <missing path>" stays excused. Second, the tool exits 0 on 0/0 citations — if the scan matches nothing (an extension the list does not cover, a mis-pointed root) it reports a clean pass: the residual of the ".NET printed 10/10 while skipping 710" failure, where the count itself is the tell. A new opt-in --min <N> lets the CALLER, which knows its corpus, assert a floor; the generic tool stays generic (default 0), so a citation-light repository is unaffected. The floor lives in the gate, not the reader. No test harness exists here; verified by running the pre- and post-change tool over a crafted git fixture (RUN:2026-09-06). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnQSEg1xmgDoQpnecvN4bR
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A session was asked "what should I do next?" in a store-backed workspace with 140 items in its queue — 29 awaiting a decision, 19 ready to build, 92 built and awaiting acceptance — and answered from
git statusand the open-PR list instead. It recommended merging a green PR and repairing some broken check scripts: true, useful, and not one of the 140 things the loop was asking for.The behaviour was already specified.
rdd-startpreflight lists the pending human decisions; taking the scope presents the routed queue. Nothing made a session reach any of it when the question arrived as a question.Two commits, because the first one alone was circular
AGENTS.md— the entry condition (commit 2).Required readinggated on four verbs: planning, changing, reviewing, delivering. Being asked what to do next is none of them, so required reading never triggered and the queue went unread. This file is the one an agent has before it has decided anything; the skill is read only once something routes to it. Widening only the skill would have left the failure intact for exactly the session that never opened the skill — the session the change is for.Now the gate names the orientation asks alongside the four verbs, and a closing paragraph states where the answer comes from: the store's pending human decisions and routed work, through
rdd-start. Version control, change lists and the working tree describe the repository rather than the loop, and never answer the question.skills/rdd-start/SKILL.md— the procedure (commit 1):OPENgate holding builtIN_REVIEWwork outranks unstarted work; a gate holding many outranks one holding few), and state the awaiting-decision / ready / awaiting-acceptance distribution. A 92-vs-19 split says acceptance is the bottleneck — a finding, not a list.Host-agnostic boundary
The package must not name one CLI's commands, so it does not. Instead, naming the concrete read is now an obligation on the consuming project's root
AGENTS.md, and an omission is reportable rather than silently absorbed — which is what let this gap sit unnoticed.Verification
Both commits are installed and running in a real consuming workspace: snapshot synced to
32d1abe, CLI rebuilt,install --checkclean, and the host re-read the skill mid-session with the new triggers live. The end-to-end test — a fresh session answering "what should I do next" from the store rather than fromgit status— needs a session that has not already read the diagnosis.🤖 Generated with Claude Code
https://claude.ai/code/session_0115VUeQov83Qf7tipMR5S3V