chore(work-items): bind tracker seam to github, seed empty recurring schedule - #700
Conversation
…schedule Resolves #560 — .work-item-tracker.json was never committed, so every seam verb (list-frontier, claim, reclaim) exit-3'd on this dogfood repo. Binds provider: github, lease_ttl_hours: 24 (only bundled adapter with claim/reclaim; local-markdown is never a coordination surface). Seeds .github/recurring-schedule.json as an empty {"items":[]} skeleton so due/recheck/work stop degrading; real cadence items deferred to a separate seeding pass. No role_labels remap: CONTRACT.md's list-frontier only excludes needs-human under --autonomous, never gates inclusion on autonomous-eligible, so the agent-ready/status:ready label naming mismatch is cosmetic, not functional. Closes #560 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 17s —— View job PR Review
Verdict: LGTM — both files are minimal, correct, and ready to merge.
|
| Check | Value | Result |
|---|---|---|
schema_version matches 1.* |
"1.0" |
✓ |
provider matches ^[a-zA-Z0-9_-]+$ |
"github" |
✓ |
config.lease_ttl_hours matches ^[0-9]+$ |
24 |
✓ |
config.storage_dir required only for local-markdown |
omitted | ✓ |
lease_ttl_hours: 24 is the value the setup skill explicitly recommends. As the PR notes, reclaim's activity check (non-lease comments, open cross-referenced PRs) means the TTL only bounds a crashed session's stale claim — it won't steal active work. Sound choice.
No config.role_labels remap is correct. The PR's reasoning is verified directly against lib/frontier.sh:
and (if $auto == "true"
then (((.labels // []) | index($human_gated)) | not)
else true
end)--autonomous only excludes items labeled needs-human — it never gates inclusion on agent-ready. The default role mappings work for this repo without any remap.
.github/recurring-schedule.json
The {"items":[]} skeleton is exactly what setup/SKILL.md prescribes as the fallback:
otherwise write the empty
{"items": []}skeleton so the recurring actions stop degrading
And it satisfies the check probe shape requirement (line 119 of setup/SKILL.md):
a present file parses as JSON with the root
{"items": [ ... ]}shape (FAIL otherwise)
With this file present, track due will now report "All recurring items are current" (with zero due items) instead of hard-stopping with "no recurring schedule configured". Correct behavior change.
Security
Both files are pure non-secret config — no tokens, no paths, no execution surfaces. The github adapter requires no secrets in the binding (ambient gh CLI only), as CONTRACT.md explicitly documents. Nothing concerns me here.
Minor Notes (non-blocking)
-
Zero-item edge in
track due:due.mdends with "If nothing is due: 'All recurring items are current. Next due: {item} on {date}'". With zero items in the schedule, there is no{item}or{date}to interpolate. This is a pre-existing spec gap surfaced by the empty skeleton — worth a follow-up issue when the seeding pass happens, but not a blocker here. -
Recurring-schedule seeding deferred: The PR correctly defers seeding real items to a separate pass. Given the volume of candidates this repo would generate (CI workflows, plugin manifests, dependency files), a dedicated seeding session makes sense.
Both files check out against the contract, implementation, and recommended values. No changes needed.
|
Claude finished @kyle-sexton's task in 1m 27s —— View job PR Review — chore(work-items): bind tracker seam to github, seed empty recurring schedule
Verdict: LGTM — both files are minimal, correct, and ready to merge.
|
| Field | Constraint (from binding.sh) |
Value | Result |
|---|---|---|---|
schema_version |
[[ "$version" == 1.* ]] (line 38) |
"1.0" |
✓ |
provider |
^[a-zA-Z0-9_-]+$ (line 44) |
"github" |
✓ |
config.lease_ttl_hours |
required (line 45, no empty) | 24 |
✓ |
config.storage_dir |
required only for local-markdown (line 48) |
omitted | ✓ |
lease_ttl_hours: 24 matches the value the setup skill recommends. Per CONTRACT.md, reclaim's activity check (non-lease comments, open cross-referenced PRs) means the TTL only reclaims crashed-session claims, not active work.
No config.role_labels remap is correct. CONTRACT.md lines 58–61 confirms --autonomous only excludes needs-human-labeled items from the frontier — it never gates inclusion on agent-ready. The default mappings are sufficient for this repo.
.github/recurring-schedule.json
{
"items": []
}The {"items":[]} skeleton exactly satisfies the check probe shape requirement from setup/SKILL.md line 119:
a present file parses as JSON with the root
{"items": [ ... ]}shape (FAIL otherwise)
And it stops the degradation path documented at line 118: track due will now report "All recurring items are current" instead of hard-stopping. Correct behavior change.
Security
Both files are pure non-secret config — no tokens, credentials, paths, or execution surfaces. The github adapter requires no secrets in the binding (ambient gh CLI only), as documented in CONTRACT.md. Nothing concerns me.
Minor Note (non-blocking)
Zero-item edge in track due: With no items in the schedule, the "All recurring items are current. Next due: {item} on {date}" message template has no values to interpolate. This is a pre-existing spec gap now surfaced by the empty skeleton — worth tracking when the seeding pass lands, but not a blocker here.
Both files check out against the contract, implementation, and recommended values. No changes needed.
Summary
.work-item-tracker.jsonwithprovider: github,lease_ttl_hours: 24..github/recurring-schedule.jsonas an empty{"items":[]}skeleton sodue/recheck/workstop reporting "no recurring schedule configured" instead of hard-erroring.Fix
.work-item-tracker.jsonwas never committed on this repo (the flagship dogfood repo for the work-items plugin family), so every seam coordination verb (list-frontier,claim,reclaim) exit-3'd here. This forced the/work-items:workloop lanes to bypass the seam entirely via directghlabel queries.Per issue #560's decision brief (RECOMMENDED option, confirmed via a live human interview this session):
github— the only bundled adapter withreclaim/race-safeclaim;local-markdownis never a coordination surface (reclaim: falsein its manifest).lease_ttl_hours: 24— reclaim's activity check (non-lease comments, open cross-referenced PRs) means TTL never steals active work; it only bounds a crashed session's stale claim.config.role_labelsremap — verified againstCONTRACT.md'slist-frontierspec directly:--autonomousonly excludesneeds-human-labeled items, it never gates inclusion on theautonomous-eligiblelabel. So this repo'sstatus: ready(vs. the skill'sagent-readydefault, which is actually a medley-onlyGovernedRepositories.csExtraLabel, not part of the org_coretaxonomy) is a cosmetic naming difference, not a functional gap.Verification
jq .on both new files: valid JSON.git check-ignore -von both paths: not ignored (exit 1).checkprobes against the written files: binding parses, carriesschema_version/provider/config.lease_ttl_hours; schedule parses with the{"items":[]}root shape.Related
Closes #560
🤖 Generated with Claude Code