feat(gatorwalk-factory): journal and project a work item parked by its dispatch cap (swamp-club #2703) #427

Merged
seth merged 3 commits from cue/2703-gatorwalk-factory-project into main 2026-10-01 19:40:06 +00:00
Owner

Closes swamp-club #2703.

A dispatch refused at a stage's maxDispatchesPerCycle used to commit nothing. The human stop it creates was missing from the journal, the metrics and the tracker, which DESIGN.md listed as a known gap.

What changes

  • Journal. A refused dispatch now records the park, once (parkAtDispatchCap). It writes an awaiting event with an optional dispatchOverride: {count, limit, granted}, keeping any exits already held. A dispatch refused again while parked writes nothing.
  • Carrying the park. Each later commit in the stage entry keeps the park while the cap still refuses and no dispatch override has been granted since. The commit that grants the override drops it. A grant also ends the park when its own commit could not read the run data. Leaving the stage entry or resetting ends it too.
  • Metrics. A park is a dispatch-override wait (Wait.kind; transition is null). It ends overridden after a grant, otherwise advanced, reset or cleared. Time that overlaps an exit wait counts once.
  • Publish. The ticket gets a comment for the park ("dispatch limit reached (2 of 2); a person must grant a dispatch override") and one for a dispatch override grant. Both are keyed on (work item, journal version), so a redelivery never repeats them.
  • Status, summary and studio all show the park.
  • Docs. DESIGN.md, README.md and the driving skill are updated. The skill now says to run publish after a refused dispatch and again after a grant.

Tests

  • Unit tests:
    • the pure op;
    • carrying and dropping the park, including a grant whose commit noted nothing;
    • the journal schema;
    • metrics;
    • summary;
    • ticket view.
  • Method tests: the park, removing the result dir, the metrics record, a repeat refusal, the grant, and a park write that fails.
  • Publish tests over the scripted adapter, the Linear fake and the swamp-club Lab fake.
  • A real-engine CLI test showing that a refused method keeps the park it wrote.

Verified locally:

  • verify-build 98bfd428-4c5c-4383-9d1d-d814b448174e
  • verify-reviews f7978d81-87c8-49f8-bbe9-14aac311e64d
  • 12 passed, 2 skipped; attestation ddae9c2e-8ff3-4cdf-b20f-c0ac5541ce29

🤖 Generated with Claude Code

Closes swamp-club #2703. A dispatch refused at a stage's `maxDispatchesPerCycle` used to commit nothing. The human stop it creates was missing from the journal, the metrics and the tracker, which DESIGN.md listed as a known gap. ## What changes - **Journal.** A refused dispatch now records the park, once (`parkAtDispatchCap`). It writes an `awaiting` event with an optional `dispatchOverride: {count, limit, granted}`, keeping any exits already held. A dispatch refused again while parked writes nothing. - **Carrying the park.** Each later commit in the stage entry keeps the park while the cap still refuses and no dispatch override has been granted since. The commit that grants the override drops it. A grant also ends the park when its own commit could not read the run data. Leaving the stage entry or resetting ends it too. - **Metrics.** A park is a `dispatch-override` wait (`Wait.kind`; `transition` is null). It ends `overridden` after a grant, otherwise `advanced`, `reset` or `cleared`. Time that overlaps an exit wait counts once. - **Publish.** The ticket gets a comment for the park ("dispatch limit reached (2 of 2); a person must grant a dispatch override") and one for a dispatch override grant. Both are keyed on (work item, journal version), so a redelivery never repeats them. - **Status, summary and studio** all show the park. - **Docs.** DESIGN.md, README.md and the driving skill are updated. The skill now says to run `publish` after a refused dispatch and again after a grant. ## Tests - Unit tests: - the pure op; - carrying and dropping the park, including a grant whose commit noted nothing; - the journal schema; - metrics; - summary; - ticket view. - Method tests: the park, removing the result dir, the metrics record, a repeat refusal, the grant, and a park write that fails. - Publish tests over the scripted adapter, the Linear fake and the swamp-club Lab fake. - A real-engine CLI test showing that a refused method keeps the park it wrote. Verified locally: - verify-build `98bfd428-4c5c-4383-9d1d-d814b448174e` - verify-reviews `f7978d81-87c8-49f8-bbe9-14aac311e64d` - 12 passed, 2 skipped; attestation `ddae9c2e-8ff3-4cdf-b20f-c0ac5541ce29` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
A dispatch refused at the stage's maxDispatchesPerCycle committed nothing,
so the human stop it makes was missing from the journal, the metrics and
the tracker. The refused dispatch now commits the park once: an awaiting
event carrying dispatchOverride {count, limit, granted} beside the exits
already held. Every later commit of the stage entry carries the hold while
the cap still refuses, and the commit of a dispatch override drops it; a new
stage entry or era starts without it.

- metrics: a dispatch-override wait (kind, null transition) ending
  overridden after a grant, or advanced/reset/cleared
- publish: comments on the park and on a dispatch override grant, keyed on
  the (work item, journal version) ledger
- status, summary and the studio's simulate view show the park
- DESIGN, README and the driving skill (publish after a refused dispatch)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
fix(gatorwalk-factory): a dispatch override ends the park even when its commit noted nothing (swamp-club #2703)
All checks were successful
CI / Review Integrity (pull_request) Successful in 49s
CI / Validate Attestation (pull_request) Successful in 50s
be427163bd
The hold stood while the last awaiting event carried it and the cap refused,
so a grant whose commit could not read the run data left it standing: the
dispatch the grant allowed refilled the cap, the stale hold carried on, and
a later refusal was turned away as already parked. A park now stands only
for the grants it saw (currentPark compares granted), so the next readable
commit drops it and a later refusal parks again with the cap as it is.

Also a readable label in the cli test and a DESIGN.md line rewrap, both
from review.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into cue/2703-gatorwalk-factory-project
All checks were successful
CI / Review Integrity (pull_request) Successful in 57s
CI / Validate Attestation (pull_request) Successful in 1m7s
141b5f3235
# Conflicts:
#	gatorwalk-factory/extensions/models/_lib/engine/studio_asset_app.ts
#	gatorwalk-factory/extensions/models/_lib/engine/studio_assets.ts
seth merged commit 391c2cfd84 into main 2026-10-01 19:40:06 +00:00
seth deleted branch cue/2703-gatorwalk-factory-project 2026-10-01 19:40:08 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
swamp-club/swamp-extensions!427
No description provided.