Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
257 commits
Select commit Hold shift + click to select a range
d54c1f7
fix(engine): read a re-entry round's prior inputs from its own lineage
erikreinert Sep 2, 2026
8392069
feat(engine): report a step's resolved target ref from step show
erikreinert Sep 2, 2026
1277bd1
fix(model): accept related_to as relates_to alias
erikreinert Sep 2, 2026
7ba0611
test(workflow): tell an intentional label exclusion from a real routi…
erikreinert Sep 2, 2026
ce51494
fix(model): keep related_to typo tolerance a CLI-only courtesy
erikreinert Sep 2, 2026
9d38c3b
feat(engine): give a run a note channel every packet renders
erikreinert Sep 2, 2026
4bfcf33
feat(engine): rank a gap issue from its own header instead of droppin…
erikreinert Sep 2, 2026
fd82446
feat(engine): skip a step's successors when it never fires
erikreinert Sep 2, 2026
49ed4e0
fix(engine): replay a claimed step's recorded inputs on read-back
erikreinert Sep 3, 2026
b301088
fix(engine): give a reconstructed pre-gate tree linter caches that di…
erikreinert Sep 3, 2026
4367491
fix(engine): expand an issue on its own predecessors and name what st…
erikreinert Sep 3, 2026
10e8637
feat(engine): warn when an issue's scope sits inside another workflow…
erikreinert Sep 3, 2026
7637a25
feat(engine): tell a gate which step it is running for via DOCKET_STEP
erikreinert Sep 3, 2026
9d9bf14
feat(engine): say whether a re-offered step's last claim failed or wa…
erikreinert Sep 3, 2026
4c0010c
test(engine): pin IssueStepList to an empty slice for a stepless issue
erikreinert Sep 3, 2026
9a2f5e3
feat(engine): add trust probe and classify roster entries by class
erikreinert Sep 3, 2026
feb3fab
feat(engine): resolve executor and vote routing from pinned policy.toml
erikreinert Sep 3, 2026
1fc01d8
feat(engine): refuse dispatch close over unintegrated write-step commits
erikreinert Sep 3, 2026
169fed3
feat(cli): add doctor to run the six attach-time environment checks
erikreinert Sep 3, 2026
ae1a3c7
feat(cli): add gate status to read one gate's outcome in a single call
erikreinert Sep 3, 2026
f5f642f
feat(engine): let guard spawn --active check the reap half of every run
erikreinert Sep 3, 2026
6a416d2
fix(cli): align doctor's install-drift and stragglers checks with att…
erikreinert Sep 3, 2026
802315b
feat(engine): let guard spawn --active carry --deciding-vote
erikreinert Sep 4, 2026
5819a2a
fix(qa): give govulncheck a go shim so vuln-scan runs on the versione…
erikreinert Sep 4, 2026
ec55885
feat(cli): add policy resolve to read seat routing from pinned policy
erikreinert Sep 4, 2026
d5a45dd
fix(engine): resolve a symlinked install root before doctor walks it
erikreinert Sep 4, 2026
c6e34ba
docs(cmd): add package doc comment to the docket command
erikreinert Sep 4, 2026
81e7816
fix(engine): count packet includes toward step context size
erikreinert Sep 5, 2026
573a640
fix(engine): park the issue, not the run, on a waiting-human step
erikreinert Sep 5, 2026
bfd96f0
feat(engine): give a freshly recorded step dispatch.grace before usag…
erikreinert Sep 6, 2026
33bcb38
fix(engine): resolve routing on every rendered offer row
erikreinert Sep 6, 2026
4b6d6fd
feat(packet): render a payload schema's required properties
erikreinert Sep 6, 2026
fb6fbe3
fix(engine): omit target sha when a worktree hand-back has no commit
erikreinert Sep 6, 2026
a316bb8
fix(cli): make run start --budget 0 record an unlimited cap
erikreinert Sep 6, 2026
821c415
fix(engine): carry a held correction onto mirrored threshold fields
erikreinert Sep 6, 2026
fa9d0fd
fix(engine): key a held correction's mirror rewrite on the cluster top
erikreinert Sep 6, 2026
0a8c13f
fix(engine): hand the token back when a committed claim fails later
erikreinert Sep 6, 2026
ba86d37
fix(engine): drop core-owned keys from aggregate carry-through
erikreinert Sep 6, 2026
e337ec1
fix(engine): tell a fork-point checkout to commit before a diff re-pin
erikreinert Sep 6, 2026
ec405ca
fix(engine): drop the pinned sha as target on a refused shared commit
erikreinert Sep 6, 2026
9595265
fix(engine): honor the integration record an earlier close wrote
erikreinert Sep 6, 2026
97c658a
test(engine): fail instead of panic on a missing operator_set_mirrors
erikreinert Sep 6, 2026
4f6fe5d
fix(cli): resolve the usage cap on --usage-budget presence
erikreinert Sep 6, 2026
f4cda6c
docs(tdd): distinguish an omitted --budget from an explicit --budget 0
erikreinert Sep 6, 2026
4abd55c
docs(tdd): record the hold-resolution keys core writes on approve
erikreinert Sep 6, 2026
5b9fcd1
fix(qa): make self-hygiene see the engine's committed range
erikreinert Sep 6, 2026
59eb03f
fix(engine): refuse retry and fix-round on a terminal run
erikreinert Sep 6, 2026
e03e356
fix(engine): keep the round delta on a blocked fix-round hand-back
erikreinert Sep 6, 2026
0451f61
fix(engine): propagate pin-read failures and pin render fixtures
erikreinert Sep 6, 2026
19e660f
fix(db): take the write lock at Begin to avoid snapshot busy errors
erikreinert Sep 6, 2026
8d32fea
fix(dispatch): reap lapsed leases before close probes discrepancies
erikreinert Sep 7, 2026
0b45fbc
fix(engine): name the reap verbs in repin's lapsed-claim refusal
erikreinert Sep 7, 2026
16b4ed6
fix(engine): name invocable reap verbs in repin's lapsed-claim refusal
erikreinert Sep 7, 2026
ad7c2a6
docs(engine): cite P5 for close's reap in reapExpiredTx comment
erikreinert Sep 7, 2026
dab51f9
fix(engine): branch D1 lease advice on whether the lease has lapsed
erikreinert Sep 7, 2026
d358fcd
test(engine): cover the unconditional reap on close without a manifest
erikreinert Sep 7, 2026
b976a43
docs(db): name both transaction-side callers of ListRunStepsTx
erikreinert Sep 7, 2026
37bd0d7
test(cli): pin run repin help claimed-step reaping forms
erikreinert Sep 7, 2026
0b4f4d0
docs(engine): correct a botched cherry-pick of 74e5b63cd281
erikreinert Sep 7, 2026
63fa90c
docs(engine): name all three reapExpiredTx callers in comments
erikreinert Sep 7, 2026
c1ffd0b
Revert botched STEP-8260 integration attempts
erikreinert Sep 7, 2026
7c5cbd6
docs(engine): name all three reapExpiredTx callers in comments
erikreinert Sep 7, 2026
842855f
docs(engine): cite P5 for close's reap in reapExpiredTx comment
erikreinert Sep 7, 2026
b9e9f03
refactor(engine): share the lease-lapse predicate between reap and repin
erikreinert Sep 7, 2026
1460dd6
docs(step): record paused-run exception for the lease_expired label
erikreinert Sep 7, 2026
4d025de
feat(dispatch): report the open's own reaps and hold on the manifest
erikreinert Sep 8, 2026
870c29f
fix(dispatch): measure the usage grace from the wave's last record
erikreinert Sep 8, 2026
9dc7a54
feat(step): annotate --integrated-sha to verify a resolved commit
erikreinert Sep 8, 2026
6b812ed
fix(guard): stop no longer denied by a paused run's pending steps
erikreinert Sep 8, 2026
1aee902
docs(guard): state the never-dispatched exemption in stop --help
erikreinert Sep 8, 2026
8a8d0ea
fix(qa): make secret-scan see the engine's committed range
erikreinert Sep 11, 2026
50f75ca
test(db): replace the scanRows deadline race with a cancel handshake
erikreinert Sep 11, 2026
bd841ea
test(repin): pin help text to the docket next reaping form
erikreinert Sep 11, 2026
68c8543
docs(dispatch): name all three reapExpiredTx callers in the reap note
erikreinert Sep 11, 2026
31dc852
fix(dispatch): name the verbs that clear a lapsed-lease D1
erikreinert Sep 11, 2026
cf0a51b
test(dispatch): pin the lapsed-lease denial to the stored expiry
erikreinert Sep 11, 2026
7810254
docs(engine): note LeaseExpired stays unset on a waiting-human run
erikreinert Sep 11, 2026
f7e17c2
fix(engine): report a lapsed lease's owner on a non-active run
erikreinert Sep 11, 2026
7d0bd68
docs(step): cite step show's expires line for a paused-run lapse
erikreinert Sep 11, 2026
431dd80
test(step): pin step list's silence on a paused run's lapsed claim
erikreinert Sep 11, 2026
ffd117a
fix(engine): exempt fable-standing rows from the post-walk fable gate
erikreinert Sep 11, 2026
daeb225
fix(qa): run ac-commands tests with -count=1
erikreinert Sep 12, 2026
aab2db3
feat(vote): withhold casts on sealed proposals until the tally closes
erikreinert Sep 13, 2026
0b6aae4
docs(gate): document that sealed-open seats withhold the verdict
erikreinert Sep 13, 2026
230eedd
test(vote): let sealed leak checks run when the sealed key is absent
erikreinert Sep 13, 2026
d0aba31
feat(step): record actor and cwd on every operator ruling
erikreinert Sep 13, 2026
0ad00bc
feat(engine): roll up cluster complementarity per aggregate step
erikreinert Sep 14, 2026
fe5a021
feat(engine): group aggregate clusters by an author-named source field
erikreinert Sep 14, 2026
55887c5
feat(engine)!: require a conductor capability on the operator verbs
erikreinert Sep 14, 2026
3457921
feat(guard): let gate answer for one run with --run RUN-N
erikreinert Sep 14, 2026
d0a9063
feat(vote): validate evidence on findings and report unsupported ones
erikreinert Sep 14, 2026
cffd10c
feat(report): add a read-only cross-run ledger per executor and voter
erikreinert Sep 14, 2026
b5c0153
feat(run)!: hide done and abandoned runs from run status by default
erikreinert Sep 15, 2026
8e05185
feat(engine): key batch gate-override grants on failure content
erikreinert Sep 15, 2026
d2f4586
feat(engine): cut dispatch manifests by lane and report the cut
erikreinert Sep 15, 2026
a75fea2
feat(dispatch): add extend to append mid-wave rows to the manifest
erikreinert Sep 15, 2026
25530ba
fix(engine): key escalation hops on recorded failures
erikreinert Sep 15, 2026
cf250a9
fix(trust): publish the store before recording a removal event
erikreinert Sep 15, 2026
63d63b9
fix(dispatch): store the extend cursor and report its reap hold
erikreinert Sep 15, 2026
26d7608
feat(engine): carry attached issue files into step packets
erikreinert Sep 15, 2026
ad170c1
fix(engine): record a tree-lock timeout as skipped, not fail
erikreinert Sep 15, 2026
a1b229c
fix(engine): base round delta on the last review-judged head
erikreinert Sep 15, 2026
ef0c077
feat(engine): keep the park reason on a resolved step
erikreinert Sep 15, 2026
d1e6c92
docs(schema): ratify the v32 park_reason span (DKT-1898)
erikreinert Sep 15, 2026
62e578b
feat(engine): record the authority a resolution was made under
erikreinert Sep 15, 2026
7e35b15
feat(engine): classify a parked step with a closed park_class enum
erikreinert Sep 15, 2026
747dbb6
test(engine): cover every park class end to end through its routing
erikreinert Sep 15, 2026
6c5486d
feat(workflow): let on_fail name a vote step for failure triage
erikreinert Sep 15, 2026
9ed99e4
feat(engine): route an executor failure to a named vote step
erikreinert Sep 15, 2026
6abb6fd
fix(engine): terminalize and bound a triage panel's lifecycle
erikreinert Sep 15, 2026
0ad0e0c
fix(engine): decide, release, and bound every triage suspension
erikreinert Sep 15, 2026
e0ff797
fix(engine): reconcile triage outcomes and honor the panel backstop
erikreinert Sep 15, 2026
9e1508d
fix(engine): reconcile DKT-1901's triage routing with DKT-1900's park…
erikreinert Sep 16, 2026
87721f0
feat: update vorpal-sdk version
erikreinert Sep 16, 2026
fc72525
feat(engine): route policy variant by issue size label
erikreinert Sep 16, 2026
835f706
feat(issue): add a first-class Size field and sizes_any routing
erikreinert Sep 16, 2026
8d5de99
feat(cli): add pin show to read a run's pinned file bytes
erikreinert Sep 17, 2026
c0ada13
fix(cli): print pin show bytes unframed so they hash to the pin
erikreinert Sep 17, 2026
919f587
feat(engine): route thresholds on the recorded diff
erikreinert Sep 17, 2026
18a4871
fix(engine): exclude disclosed out-of-scope hunks from the diff measu…
erikreinert Sep 17, 2026
320a543
feat(engine): carry bump reason and issue scope on staged rows
erikreinert Sep 17, 2026
e70009c
fix(engine): hold downstream only for vote or human gate targets
erikreinert Sep 17, 2026
ca3a1be
feat(vote): register opt-in roster and weighting vote-rule config keys
erikreinert Sep 17, 2026
cb145df
feat(vote): add opt-in hold_on_dissent park for dissented approvals
erikreinert Sep 17, 2026
898d592
feat(engine): refresh a run issue's body snapshot from the live descr…
erikreinert Sep 17, 2026
a662e59
feat(db): persist fix-loop history facts on a step row
erikreinert Sep 17, 2026
7523034
test(db): assert loop-history write bumps row_version and updated_at_ms
erikreinert Sep 17, 2026
7115cfa
fix(engine): anchor the recorded body read-back on the attempt's claim
erikreinert Sep 17, 2026
31316c2
refactor(engine): read the anchoring refresh row with QueryRow
erikreinert Sep 17, 2026
9d70870
feat(engine): route fix-loop exhaustion per on_exhausted
erikreinert Sep 18, 2026
94a3612
fix(cli): keep doctor from registering a project on first contact
erikreinert Sep 18, 2026
d0e2ddf
fix(cli): make doctor report an unbound cwd instead of staying silent
erikreinert Sep 18, 2026
4d105c0
fix(cli): show manifest truncation and class limits in dispatch open
erikreinert Sep 22, 2026
da5747e
test(cli): assert dispatch open's --json keys for total, truncated, l…
erikreinert Sep 22, 2026
a8e0868
docs(tdd): name len(rows) as the whole-closure overrun signal
erikreinert Sep 22, 2026
45de8f0
docs(tdd): state per-verb trust recording order and its invariant
erikreinert Sep 22, 2026
4f3d543
docs(model): key StepRow's escalation walk on recorded failures
erikreinert Sep 22, 2026
94a7c57
docs(workflow): record issue.files attachments as uncapped in Context…
erikreinert Sep 22, 2026
d8b47de
test(engine): pin the fable gate to recorded failures, not reaped claims
erikreinert Sep 22, 2026
8c514f4
fix(engine): say when an action's tree lock was never acquired
erikreinert Sep 22, 2026
c0eae13
docs(tdd): document the vote rule hold_on_dissent key
erikreinert Sep 22, 2026
b2584ba
docs(tdd): document staged-row bump, bump_issue, and scope fields
erikreinert Sep 22, 2026
49f071f
docs(tdd): state which interposed gate kinds hold the downstream
erikreinert Sep 22, 2026
156bced
docs(tdd): point the PINNED section at docket pin show
erikreinert Sep 22, 2026
4587884
docs(engine): key the escalation-walk comments on recorded failures
erikreinert Sep 22, 2026
db01b8f
fix(engine): refuse a policy [sizes] entry outside the size vocabulary
erikreinert Sep 22, 2026
e4ce94b
fix(workflow): refuse a sizes_any entry outside the size vocabulary
erikreinert Sep 22, 2026
df4359f
fix(cli): show the sizes_any match clause in workflow show
erikreinert Sep 22, 2026
f33e4ba
docs(spec): route fix-loop exhaustion per on_exhausted in the spec
erikreinert Sep 22, 2026
7ffb4dc
docs(tdd): document dispatch close's integration refusal and override
erikreinert Sep 22, 2026
93c0c73
fix(cli): keep registry audit and policy resolve from registering a p…
erikreinert Sep 22, 2026
437abe8
fix(cli): carry size on issue summary rows
erikreinert Sep 22, 2026
49e7bb5
docs(readme): build the binary with make bin and list plan's --size
erikreinert Sep 22, 2026
c34c1cc
fix(cli): point vote cast --metadata help at the docket skill
erikreinert Sep 22, 2026
7448e48
docs(tdd): document step claim --cost-multiplier in the budgets section
erikreinert Sep 22, 2026
5073801
fix(engine): count only the latest aggregate attempt's below-floor cl…
erikreinert Sep 22, 2026
986c331
docs(engine): state the aggregate builtin's six param keys
erikreinert Sep 22, 2026
d2324ab
docs(engine): scope doctor's straggler coverage of pre-gate worktrees
erikreinert Sep 22, 2026
e99cecc
fix(cli): refuse report executors from a directory with no project
erikreinert Sep 22, 2026
5285431
feat(workflow): declare roster, weighting, recuse and reviews on vote…
erikreinert Sep 24, 2026
9c09668
docs(engine): document vote-step roster, weighting, recuse and reviews
erikreinert Sep 24, 2026
8838ab6
feat(engine): enforce vote-step roster, weighting and recusal on cast
erikreinert Sep 24, 2026
7c04d47
feat(config): retire vote-rule roster keys and record vote-rule writes
erikreinert Sep 24, 2026
83c23bc
fix(engine): project loop history onto rendered step rows
erikreinert Sep 24, 2026
79ec9c0
test(engine): cover decision gates behind open executor targets
erikreinert Sep 24, 2026
199c446
test(cli): pin the pin show --json envelope
erikreinert Sep 24, 2026
47f22fa
test(engine): pin scope-beats-headroom on a double bump
erikreinert Sep 24, 2026
ddb742a
test(engine): cover scope and bump_issue normalization in dispatch ve…
erikreinert Sep 24, 2026
10c2c93
docs(engine): correct the nil started_ms invariant in recordedIssueBody
erikreinert Sep 24, 2026
b7d30e5
fix(qa): keep failure lines past the ac-commands output tail
erikreinert Sep 24, 2026
230a60c
test(workflow): register V41 in the validation table
erikreinert Sep 24, 2026
83b1550
test(workflow): cover every on_exhausted refusal branch
erikreinert Sep 24, 2026
aacffd4
test(engine): pin loop history on a cluster-bound refusal
erikreinert Sep 24, 2026
c319e03
docs(tdd): note that re-activation pins a newly present policy.toml
erikreinert Sep 24, 2026
334abdc
build(make): add a qa-test gate target that runs tests
erikreinert Sep 24, 2026
0e04f8b
test(db): extend the schema span to v35 for loop-history columns
erikreinert Sep 24, 2026
99beb76
docs(tdd): qualify RA2 for pins re-activation can add
erikreinert Sep 24, 2026
0cecefd
fix(engine): size diff.* routing facts by the change review reads
erikreinert Sep 24, 2026
f781c15
feat(workflow): lint the reserved diff.* predicate family at register…
erikreinert Sep 24, 2026
72082b8
docs(design): document diff.* thresholds and fix-loop exhaustion routing
erikreinert Sep 24, 2026
f40eb46
test(engine): name the first-empty-diff guard collision the retry tes…
erikreinert Sep 24, 2026
7955d74
fix(engine): record a first empty diff instead of treating it as a re…
erikreinert Sep 24, 2026
94e7795
feat(workflow): refuse every unevaluable diff.* literal at register time
erikreinert Sep 24, 2026
1067986
docs(design): add the reserved diff.* fields to the threshold grammar
erikreinert Sep 24, 2026
79ad8e4
fix(workflow): admit diff.* predicates on tree-holding fanout steps
erikreinert Sep 24, 2026
01b863d
fix(engine): compose park_reason in the engine at the two caller-text…
erikreinert Sep 24, 2026
4ef3d89
fix(engine): keep the worker's note and never store an empty park_reason
erikreinert Sep 24, 2026
a9ef2aa
feat(registry): schema deprecate verb and --project on list and lint
erikreinert Sep 25, 2026
a348156
feat(cli): add --all-projects to workflow lint
erikreinert Sep 25, 2026
bc2db73
fix(engine): record --pin files by the ref every reader resolves
erikreinert Sep 25, 2026
1982db2
fix(cli): skip a project's own rows when import --merge re-imports them
erikreinert Sep 25, 2026
881fe0a
docs(cli): state the merge limit for foreign exports accurately
erikreinert Sep 25, 2026
b631dfc
fix(cli): render an empty v1 run list as [] instead of null
erikreinert Sep 25, 2026
cdb5f9c
fix(engine): export DOCKET_GATE_BASE to probed gates
erikreinert Sep 25, 2026
195958c
fix(engine): record a retried write step's issue.diff at its new target
erikreinert Sep 25, 2026
6b2fb48
fix(engine): sweep pre-gate scratch trees whose claim died
erikreinert Sep 25, 2026
e459b1d
fix(engine): take the tree mutex only for gates on the shared checkout
erikreinert Sep 25, 2026
8ea4b90
fix(engine): bound the claim's pre-gate phase so claim returns under …
erikreinert Sep 25, 2026
cde4a81
test(engine): pin that an empty retry diff keeps the retained target
erikreinert Sep 26, 2026
a31cfdc
docs(engine): drop tracker references from the empty-retry target notes
erikreinert Sep 26, 2026
cf303f2
test(qa): pass --authority operator to operator-gated run and step verbs
erikreinert Sep 30, 2026
4face17
test(qa): cover report refusal for an unregistered project
erikreinert Sep 30, 2026
116f13a
fix(engine): rebind gate-results inputs to the loop body's latest round
erikreinert Sep 30, 2026
559bef7
docs(engine): drop tracker references from the gate-results rebind notes
erikreinert Sep 30, 2026
0661f86
test(engine): pin that a loop body reads the latest round's vote record
erikreinert Sep 30, 2026
9d3cadb
docs(engine): name the ledger-form exception in recordedProducer
erikreinert Oct 1, 2026
f3651cb
fix(cli): echo stored labels and files from issue close, move, reopen
erikreinert Oct 1, 2026
c42fb27
fix(cli): echo stored labels and files from a no-op issue edit
erikreinert Oct 1, 2026
7f304cc
fix(cli): leave the earlier issue untouched on a replayed create
erikreinert Oct 2, 2026
25508fd
feat(engine): pin gate scripts at activation and report unpinned gates
erikreinert Oct 4, 2026
76f1957
fix(issue): clear stale resolution when an issue moves to done
erikreinert Oct 5, 2026
6a9e12f
fix(engine): clear stale abandoned resolution when a run completes
erikreinert Oct 5, 2026
709f5a4
feat(engine): record the activating checkout head on run-activated
erikreinert Oct 7, 2026
8435c5f
feat(events): filter events list by kind and step before the limit
erikreinert Oct 7, 2026
acfce0f
feat(run): show the recorded activation head in run status
erikreinert Oct 7, 2026
0c8e71b
feat(guard): admit read-only usage joins past a reap hold
erikreinert Oct 7, 2026
87e4bcd
fix(run): read the activation head without the event cursor
erikreinert Oct 7, 2026
9e955aa
feat(db): load each vote's own usage and per-unit source
erikreinert Oct 7, 2026
f096fd4
feat(vote): show each seat's usage and per-unit source
erikreinert Oct 7, 2026
e80cb33
feat(dispatch): record every refused close as an event
erikreinert Oct 7, 2026
1afbca3
feat(claim): record every refused claim as an event
erikreinert Oct 7, 2026
9bc7f33
test(engine): drop the removed helper's leftover comment
erikreinert Oct 7, 2026
1dc54b2
docs(tdd): attribute the refused-close and refused-claim events
erikreinert Oct 7, 2026
4283679
test(vote): pin seat usage keys under the v2 envelope
erikreinert Oct 7, 2026
cd564c1
feat(run): record conductor-observed re-seats and deferrals
erikreinert Oct 7, 2026
edce71d
docs(tdd): admit a reconciled close as a narrow reap acknowledger
erikreinert Oct 7, 2026
24631a3
feat(dispatch): acknowledge a wave's own reaps on reconciled close
erikreinert Oct 7, 2026
5c51a1a
feat(engine): park one ready step for the operator
erikreinert Oct 7, 2026
14acc71
feat(step): add step hold over the engine's hold
erikreinert Oct 7, 2026
5f56133
docs(spec): list the held park class and step hold
erikreinert Oct 7, 2026
3734fbe
fix(dispatch): judge only a step's own commits after a base rewrite
erikreinert Oct 7, 2026
de4a16a
fix(vote): refuse a concerns or reject cast with no rationale
erikreinert Oct 7, 2026
3b59bb6
feat(engine): set gap issue files and scope from the gap header
erikreinert Oct 7, 2026
a6d6554
fix(report): attribute a run-linked conductor panel to the run
erikreinert Oct 7, 2026
79ce88c
feat(render): list the declared gates and their trusted commands
erikreinert Oct 7, 2026
376a2a6
fix(engine): diff a shared-checkout writer from its claim head
erikreinert Oct 7, 2026
85904fc
feat(render): state the base a packet's issue.diff was computed from
erikreinert Oct 7, 2026
785a3d4
feat(step): attribute an integrated-sha annotation to its caller
erikreinert Oct 7, 2026
0d67335
feat(run): attribute a scope refresh to its caller
erikreinert Oct 7, 2026
f08ce73
feat(dispatch): attribute a stale-target waiver to its caller
erikreinert Oct 7, 2026
ac77333
style(cli): align the gate result Stub field
erikreinert Oct 9, 2026
9c8e6da
docs(tdd): say a zero event retention imposes no prune window
erikreinert Oct 9, 2026
dcf6b50
docs(tdd): list every validation rule the engine enforces
erikreinert Oct 9, 2026
3174059
chore: gofmt the files that drifted from canonical format
erikreinert Oct 9, 2026
37ea493
docs(db): describe the v30 fingerprint default in words
erikreinert Oct 9, 2026
f174b45
docs: spell out the claim predicate empty-owner case in words
erikreinert Oct 9, 2026
58d1e3e
fix(engine): verify a run's pins against its own checkout
erikreinert Oct 9, 2026
630aeb9
fix(db): record an activity row when an issue's resolution changes
erikreinert Oct 9, 2026
4652c95
fix(engine): resolve pin drift from the run's own checkout
erikreinert Oct 9, 2026
150d4f7
feat(engine): measure a long pre-gate before the claim instead of ins…
erikreinert Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
284 changes: 35 additions & 249 deletions .github/workflows/ci.yaml

Large diffs are not rendered by default.

81 changes: 78 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,12 +1,38 @@
.PHONY: build test lint vet install clean demo
# Developer targets and the gate targets `docket trust list` invokes.
#
# The gate targets exist so a trust entry can name `make <gate>` instead of an
# absolute path into one worktree's checkout. Trust entries are bound to the
# repository, not the worktree, and the engine spawns each gate with cwd set to
# the step's worktree — an absolute path pins every worktree's gate to whichever
# checkout happened to be current when the entry was approved, and goes dead the
# day that worktree is removed. `make <gate>` resolves against the caller's cwd,
# so it is correct from every worktree and survives their coming and going.
#
# Each gate target's NAME MATCHES ITS TRUST ENTRY NAME exactly, so a workflow's
# `gates = ["build", "tests"]` reads the same as the Makefile and the same as
# `docket trust list`. That is why the compile gate owns the name `build` and
# the binary build is `make bin`.

.PHONY: bin test lint vet install clean demo \
build tests qa-test self-hygiene doc-validate citation-check secret-scan \
vuln-scan sdet-abuse tdd-preflight reserved-name-check \
render-verify copy-verify ac-commands

VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo "none")
BUILD_DATE ?= $(shell date -u '+%Y-%m-%dT%H:%M:%SZ')

LDFLAGS := -X github.com/ALT-F4-LLC/docket/internal/cli.version=$(VERSION) -X github.com/ALT-F4-LLC/docket/internal/cli.commit=$(COMMIT) -X github.com/ALT-F4-LLC/docket/internal/cli.buildDate=$(BUILD_DATE)

build:
QA := scripts/qa

# ---------------------------------------------------------------------------
# Developer targets
# ---------------------------------------------------------------------------

# bin — produce ./bin/docket. Formerly `build`; renamed so the compile gate can
# own that name (see the header).
bin:
CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o ./bin/docket ./cmd/docket

test:
Expand All @@ -24,6 +50,55 @@ install:
clean:
rm -rf ./bin/

demo: build
demo: bin
@command -v vhs >/dev/null 2>&1 || { echo "vhs is required: brew install vhs"; exit 1; }
vhs scripts/demo.tape

# ---------------------------------------------------------------------------
# Gate targets — one per `docket trust list` entry
#
# Each delegates to the script that already carries the gate's logic and its
# failure explanation; this file adds a stable, worktree-independent name and
# nothing else. A gate's behavior is changed in its script, not here.
# ---------------------------------------------------------------------------

build:
@bash $(QA)/build.sh

tests:
@bash $(QA)/tests.sh

qa-test: tests

self-hygiene:
@bash $(QA)/self-hygiene.sh

doc-validate:
@bash $(QA)/doc-validate.sh

citation-check:
@bash $(QA)/citation-check.sh

secret-scan:
@bash $(QA)/secret-scan.sh

vuln-scan:
@bash $(QA)/vuln-scan.sh

sdet-abuse:
@bash $(QA)/sdet-abuse.sh

tdd-preflight:
@bash $(QA)/tdd-preflight.sh

reserved-name-check:
@bash $(QA)/reserved-name-check.sh

render-verify:
@bash $(QA)/render-verify.sh

copy-verify:
@bash $(QA)/copy-verify.sh

ac-commands:
@bash $(QA)/ac-commands.sh
43 changes: 18 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,34 +40,15 @@ DOCKET_INSTALL_DIR=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/A

### Agent Skill Setup

If you're working with Docket through an AI coding agent, also install the companion skill so the agent has the full CLI workflow and command reference available without re-deriving usage from `--help` output. Copy this repo's [`skills/docket/SKILL.md`](skills/docket/SKILL.md) into your agent's skill directory:

| Harness | Project-scoped | User-scoped |
|---------|-----------------|-------------|
| Claude Code | `.claude/skills/docket/SKILL.md` | `~/.claude/skills/docket/SKILL.md` |
| Codex | `.agents/skills/docket/SKILL.md` | `~/.agents/skills/docket/SKILL.md` |
| Opencode | `.opencode/skills/docket/SKILL.md` | `~/.config/opencode/skills/docket/SKILL.md` |

```bash
# Claude Code (project-scoped)
mkdir -p .claude/skills/docket && cp skills/docket/SKILL.md .claude/skills/docket/SKILL.md

# Codex (project-scoped)
mkdir -p .agents/skills/docket && cp skills/docket/SKILL.md .agents/skills/docket/SKILL.md

# Opencode (project-scoped)
mkdir -p .opencode/skills/docket && cp skills/docket/SKILL.md .opencode/skills/docket/SKILL.md
```

See [Drop-in Skill](#drop-in-skill) for what the skill teaches.
If you're working with Docket through an AI coding agent, also install the companion skill so the agent has the full CLI workflow and command reference available without re-deriving usage from `--help` output. The skill is maintained in [ALT-F4-LLC/dotfiles.vorpal](https://github.com/ALT-F4-LLC/dotfiles.vorpal) at `src/user/claude_code/skills/docket/`; copy that directory into your agent's skill directory (e.g. `.claude/skills/docket/` project-scoped, or `~/.claude/skills/docket/` user-scoped for Claude Code).

### From Source

Requires Go 1.26.0+ (toolchain go1.26.5).

```bash
# Build the binary to ./bin/docket
make build
make bin
./bin/docket --help

# Install to $GOPATH/bin
Expand Down Expand Up @@ -142,7 +123,7 @@ Any agent that can run shell commands works with Docket. Point it at `docket nex

### Drop-in Skill

[`skills/docket/SKILL.md`](skills/docket/SKILL.md) is a thorough reference teaching the full Docket CLI workflow and command/flag reference in one file, so your agent doesn't need to re-derive usage from `--help` output. See [Agent Skill Setup](#agent-skill-setup) in the Installation section above for where to drop it in for Claude Code, Codex, and Opencode.
A companion skill teaching the full Docket CLI workflow and command/flag reference is maintained in [ALT-F4-LLC/dotfiles.vorpal](https://github.com/ALT-F4-LLC/dotfiles.vorpal) at `src/user/claude_code/skills/docket/`, so your agent doesn't need to re-derive usage from `--help` output. See [Agent Skill Setup](#agent-skill-setup) in the Installation section above.

<details>
<summary>Verbose JSON examples</summary>
Expand Down Expand Up @@ -237,6 +218,8 @@ docket plan --json --root DKT-3
docket issue list --json -s todo -s in-progress -p high
```

Listings — `issue list`, `next`, `plan`, and `board` — emit summary rows under `--json`: every issue field except `description`, plus `description_bytes`. Read one issue's full description with `issue show`, or pass `--with-body` to include every description in the listing.

</details>

<details>
Expand Down Expand Up @@ -306,9 +289,16 @@ docket issue list --json -s todo -s in-progress -p high
| Command | Description |
|---------|-------------|
| `docket next` | Show work-ready issues (unblocked, sorted by priority) |
| `docket plan` | Compute a phased execution plan from the dependency graph (filterable by `--status`/`-s`, `--label`/`-l`, `--priority`/`-p`, `--type`/`-T`, `--assignee`/`-a`) |
| `docket plan` | Compute a phased execution plan from the dependency graph (filterable by `--status`/`-s`, `--label`/`-l`, `--priority`/`-p`, `--size`, `--type`/`-T`, `--assignee`/`-a`) |
| `docket board` | Kanban board view in the terminal |

### Report Commands

| Command | Description |
|---------|-------------|
| `docket run report RUN-N` | Roll up one run's budget, steps, gates, actions, artifacts, findings, and metadata |
| `docket report executors` | Group fix-loop routings, override-pass rulings, reaps, and cluster corroboration per executor hint and voter name across runs (`--since RUN-N` or a date, `--all-projects`); read-only, never consulted by `next` |

### Top-Level Commands

| Command | Description |
Expand Down Expand Up @@ -375,7 +365,9 @@ one.
### Consolidating legacy per-repo stores

Move an old repo-local database into the shared store with export/import —
colliding ids are remapped automatically, nothing is dropped:
ids colliding with another project's rows are remapped automatically, nothing
is dropped. Merging a project's own export back with `--merge` skips the rows
it already holds:

```bash
DOCKET_PATH=/path/to/repo/.docket docket export -f repo.json
Expand Down Expand Up @@ -462,7 +454,8 @@ scripts/
```bash
git clone https://github.com/ALT-F4-LLC/docket.git
cd docket
make build # Build to ./bin/docket
make bin # Build to ./bin/docket
make build # Run the compile gate (scripts/qa/build.sh)
make test # Run unit tests
make lint # Run staticcheck + go vet
make clean # Remove build artifacts
Expand Down
1 change: 1 addition & 0 deletions cmd/docket/main.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// Command docket is the CLI entry point for Docket.
package main

import (
Expand Down
13 changes: 3 additions & 10 deletions cmd/vorpal/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,7 @@ import (

func main() {
ctx := config.GetContext()
ctxTarget := ctx.GetTarget()

systems := []string{
"aarch64-darwin",
"aarch64-linux",
"x86_64-darwin",
"x86_64-linux",
}
ctxTarget := ctx.GetTargetStr()

ffmpeg, err := ctx.FetchArtifactAlias("ffmpeg:8.0.1")
if err != nil {
Expand Down Expand Up @@ -81,7 +74,7 @@ func main() {
}

_, err = artifact.
NewDevelopmentEnvironment("docket-shell", systems).
NewDevelopmentEnvironment("docket-shell", config.SYSTEMS).
WithArtifacts([]*string{
ffmpeg,
gobin,
Expand All @@ -104,7 +97,7 @@ func main() {
log.Fatalf("error building project environment: %v", err)
}

_, err = language.NewGo("docket", systems).
_, err = language.NewGo("docket", config.SYSTEMS).
WithBuildDirectory("cmd/docket").
WithIncludes([]string{
"cmd/docket",
Expand Down
2 changes: 1 addition & 1 deletion docs/design/engine-core.md
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ consequences, mechanically:
so no torn state exists.
- **Dispatcher session dies** ⇒ nothing happens. Leases lapse; the run sits `active`
with a ready set. Any new dispatcher session picks up exactly where things stood —
the reference harness injects `docket run status --active` at session start so
the reference harness injects `docket run status` at session start so
resumption is automatic (upstream 03 §7). There is no handoff narrative, no
crash-recovery doctrine.
- **Docket contention** ⇒ SQLite WAL + busy timeout + single-transaction claims
Expand Down
Loading
Loading