Skip to content

process: an orientation ask is session entry — answer it from the store queue - #18

Open
jussi-modernpath wants to merge 4 commits into
mainfrom
process/session-entry-answers-the-queue
Open

process: an orientation ask is session entry — answer it from the store queue#18
jussi-modernpath wants to merge 4 commits into
mainfrom
process/session-entry-answers-the-queue

Conversation

@jussi-modernpath

@jussi-modernpath jussi-modernpath commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

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 status and 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-start preflight 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 reading gated 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):

  • description — triggers on the orientation forms, not just start/continue/pick up.
  • Preflight — a host-delivered session-start brief is the store's own answer arriving early, not ambient background; date it against the store revision before relying on it, and report an undatable projection as unknown. Not hypothetical: in the session that prompted this, the cached queue answered happily while the live read refused with an expired token, so a stale projection presented itself as current with no marker.
  • Take the scope — covers the request that is an orientation question rather than a scope, and repeats the version-control negative where the queue is actually presented.
  • Take the scope — rank by what a single human answer releases (an OPEN gate holding built IN_REVIEW work 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.
  • Report — process and tooling work carrying no requirement record is labelled as such and never substitutes for the queue. It was not wrong to surface it; it was wrong to surface it instead.

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 --check clean, 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 from git status — needs a session that has not already read the diagnosis.

🤖 Generated with Claude Code

https://claude.ai/code/session_0115VUeQov83Qf7tipMR5S3V

jussi-modernpath and others added 2 commits September 4, 2026 12:39
…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
@jussi-modernpath jussi-modernpath changed the title process(rdd-start): session entry answers "what next" from the store queue process: an orientation ask is session entry — answer it from the store queue Sep 4, 2026
jussi-modernpath and others added 2 commits September 4, 2026 18:15
`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
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