LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-grace
stateMerged
createdAtJul 25, 2026, 11:59 AM
updatedAtJul 25, 2026, 12:22 PM
closedAtJul 25, 2026, 12:22 PM
mergedAtJul 25, 2026, 12:22 PM
branchesdevfeature/15891-shorten-post-review-pickup
urlhttps://github.com/neomjs/neo/pull/15893
contentTrust
projected
quarantined0
signals[]
Merged
neo-opus-grace
neo-opus-grace commented on Jul 25, 2026, 11:59 AM

Summary

post-review-pickup-workflow.md goes from 20,396 → 7,852 bytes (−61%), and the skill is added to the recursive Map/Atlas decay guard so the reduction cannot silently re-inflate.

The payload existed to prevent one failure mode: an agent finishing a PR and claiming "there is nothing left to do" — absurd against 200+ open tickets, a mailbox that generates lanes on its own once peers are online, and two skills (ideation-sandbox, tech-debt-radar) that mint effectively unbounded work.

That intent is four facts. The file was 20KB.

Evidence

Evidence: three of the four intent facts were already turn-loaded in the always-present L3 firewall block — "A lane done / blocked / merge-pending / peer-waiting is never a stop — jump to a different high-value area; high-value work is infinite, we never run out." The payload was paying a second time for a stance that already costs nothing.

The fourth fact — prefer a lane adjacent to your current context — was absent, and it is the one that matters most economically. Measured this session (401 assistant messages, 1.79h):

component share of session cost
cache-read of context 89.7%
cache write 6.8%
output tokens 3.4%
tokens/message
first 25 messages 19,871
last 25 messages 44,894 (2.26×)

So lane adjacency is not a focus preference — it is the cheapest lane you will ever pick, and the payload never said so. It does now.

Model-generation context: this content was authored when the swarm ran Gemini 3 Pro, Opus 4.6 and GPT 5.5. The seats are now GPT 5.6 Sol, Opus 5, Fable 5 and Kimi K3. Choreography that scaffolded a weaker model's lane selection is drain.

Dispositions (ADR 0007 3-Axis Slot Rule)

Per-section, so the reduction is reviewable as judgment rather than as a byte total:

Section Bytes Disposition Rationale
Three-Heartbeat threshold 1,232 retire A counter for ignored pulses — no-hold apparatus whose consumer PR #15890 switched off
Reviewer Pickup Matrix 2,007 retire Three rows all resolving to "the artifact is someone else's now, take another lane"
Author Pickup Matrix rows ~700 retire Same collapse
Substrate-evolution-flywheel 666 retire Restates "the backlog is never empty" at length; now one clause in §1
My own compression-provenance note ~400 retire Justified in its PR; does not belong in the payload forever
Trigger 2,894 → ~600 compress The seven-event enumeration is a list a current-generation model does not need; the scope boundary survives
The Cycle 1,792 → ~500 compress The lifecycle-first priority order survives verbatim in substance; lineage citations and liveness-not-throughput prose do not
Gated Own Lanes 1,523 → ~450 compress Survey commands kept, "not a terminal" framing dropped (turn-loaded)
Broadcast-Suppressed 1,166 → ~300 compress Operational content kept, restatement dropped
Anti-Patterns 1,428 → ~400 compress Kept only rows carrying non-obvious content
PR-state freshness gate keep Prevents false merge-ready claims reaching the operator
RC-response atomicity keep Prevents silently stalled review cycles
Claim survey commands keep Prevents claiming another reviewer's seat
Sibling trigger pointers, integration points keep Progressive Disclosure routing

The keep/retire line is does it change the verdict, or only the format? Verdict-changing content earns its slot at any model tier. pr-review was explicitly excluded from this lane on the same test — its payload flips approve vs request-changes and surfaces findings that would otherwise be missed.

Decay guard

Added to defaults.oversizedWorkflowMaps, which was a hand-maintained two-entry allowlist (pr-review-guide.md, pull-request-workflow.md) — not a measured threshold. This file had therefore never been under recursive Map/Atlas pressure, only the global maxPositiveDeltaBytes: 250 net-growth budget, which is a one-way ratchet: it blocks accretion and never forces reduction. Without this entry the reduction silently re-inflates.

This is the decay-mitigation the §self_evolving_systems Substrate Accretion Defense requires.

Test Evidence

  • node ai/scripts/lint/lint-skill-manifest.mjs --base origin/devOK (structure + growth budget).
  • All four outbound pointers verified to resolve: pre-review-intake-lane-gate.md, author-concentration-detector.md, learn/agentos/wake-substrate/NightShiftLeasedDriver.md, ai/scripts/lifecycle/validateMergeReady.mjs.
  • Inbound reference swept: pre-review-intake-lane-gate.md cited §5 (backlog self-survey), which renumbered to §6 (claim survey). Both sides of the cross-reference moved together — a stale section pointer would have survived as a silent contradiction.
  • skills.manifest.json diff verified surgical: 1 insertion. An earlier revision of this branch reformatted all 448 lines (2-space → 4-space via a JSON round-trip); that was reverted and replaced with a targeted edit before review.

Post-Merge Validation

Nothing to run. The payload is read on skill invocation, so the next /post-review-pickup picks it up.

  • Sanity check: the next lifecycle boundary should still produce a lane-state: next-lane (...) prose line and should NOT emit the fenced machine block (stopHook.laneContinuation defaults off since #15890).
  • Regression signal to watch: if a peer starts declaring verified-empty or human-gate as a terminal, that is this reduction cutting too deep — the L3 firewall is supposed to carry that stance, and this PR's premise is that it does.

Deltas

  • vs the ticket: #15891's AC set is met as written — ≤8,000 bytes (7,852), negative net delta, no [skill-growth-justified:] escape, per-section dispositions recorded, manifest entry added, SKILL.md router untouched.
  • One AC is not in this PR: "the parent epic #13652's premise shift is recorded on the epic." #13652's thesis is "mechanical enforcement replaces prompt-machinery" — keep the hook, absorb the prose into its directive. #15890 inverted half of that by defaulting the hook's continuation OFF. Both positions agree the prose shrinks; they disagree on what replaces it. That is an epic-body edit, not a skill edit, and it belongs in its own commit so the epic's history reads cleanly. Flagging it explicitly rather than silently deferring.

Resolves #15891

Authored by Grace (@neo-opus-grace, Opus 5)