Follow-ups from the DECISIONS.md and SKILL.md cold reads (#1755, #1756): what the reads found in the code that is not a decision of any file. None blocks the PRs; each is a code or design item on its own.
Bugs, mechanical
@gemstack/skill-tickets: priority comes back as a string from list and show ("priority":"7") while effort and uncertainty are numbers; a sort by priority orders "10" below "7".
@gemstack/agent-data: the branch time-budget rule scans the global options too (git.ts:84 filters args, not the stripped words), so git -C <repo> branch --list gets the write budget.
@gemstack/skill-branches: a forced worktree removal that also fails is swallowed and the reclaim answers ok: true with the checkout still on disk; prune loses its removed/skipped list when one checkout throws past the decision.
@gemstack/skill-tickets: a dot-prefixed filename (.x.md) passes as a bare name (isTicketFile) but is refused as the tickets/.x.md path (isTicketPath), so the two forms the skill calls equivalent are not.
@gemstack/skill-branches: the merged-branch rule accepts a remote-tracking ref of any remote while "pushed" means origin only; a branch reachable only from upstream/main is deleted without ever reaching origin.
@gemstack/skill-branches: remove <session-name> and remove <id> reclaim the same checkout but differ in whether the birth branch goes: the birth branch is derived from the argument (cli.ts:184), not from the checkout's folder.
@gemstack/skill-branches: branchesDeleted can name a branch whose deletion failed silently (deleteBranch swallows errors, reclaim.ts:130-137 records the name regardless).
@gemstack/skill-tickets: a queue edit committed but not pushed answers {ok:false} (queue.ts:140) while a claim or release in the same state counts as landed; and --ticket's label is interpolated unescaped, so a text containing a markdown link breaks the read-back (names.ts:72 takes the first link).
- CI: the daemon test "a run loses its worktree once its work is on the remote" timed out twice at 12s on markdown-only commits, green on rerun.
- Packaging:
npm pack leaves "@gemstack/agent-data": "workspace:*" in both skill tarballs, which npm install refuses (EUNSUPPORTEDPROTOCOL); pnpm pack rewrites it. Publish with pnpm, or add a prepack rewrite.
Undocumented or unstated
tickets.ts skips a leading Source: line when picking a ticket's summary; neither DECISIONS.md nor the ticket format mentions it. Document or remove.
release prints the same shape as claim ({"ok":true,"file":…,"holder":…}), so a caller cannot see from the output that a lock was lifted.
queue prints a flat array with no priority, while the skill says "in order of work".
Design questions
- The queue file: an entry added with no priority to a file that has no
## section yet is a plain line; the first --priority add then creates its section below it, so the unranked entry outranks Priority 10 forever. Same family as the level-1-title-only queue file getting sections appended.
- The reclaim pushes whatever branch an agent's checkout ended on, the user's own included, when the program allows a push; only the deletion is limited to
agent-*.
close does not touch the queue: an entry linking the closed ticket stays until queue done.
- A scoped package (
@acme/x) an agent installs in its checkout still writes into the user's node_modules, because the dependency links go one entry deep and a scope is one entry.
🤖 curated · Fable 5.1, effort high — the agent's cold reads and rig runs found these and wrote the lines; the grouping and the split into bugs versus design questions are mine.
Follow-ups from the DECISIONS.md and SKILL.md cold reads (#1755, #1756): what the reads found in the code that is not a decision of any file. None blocks the PRs; each is a code or design item on its own.
Bugs, mechanical
@gemstack/skill-tickets:prioritycomes back as a string fromlistandshow("priority":"7") whileeffortanduncertaintyare numbers; a sort by priority orders"10"below"7".@gemstack/agent-data: thebranchtime-budget rule scans the global options too (git.ts:84filtersargs, not the stripped words), sogit -C <repo> branch --listgets the write budget.@gemstack/skill-branches: a forced worktree removal that also fails is swallowed and the reclaim answersok: truewith the checkout still on disk;pruneloses itsremoved/skippedlist when one checkout throws past the decision.@gemstack/skill-tickets: a dot-prefixed filename (.x.md) passes as a bare name (isTicketFile) but is refused as thetickets/.x.mdpath (isTicketPath), so the two forms the skill calls equivalent are not.@gemstack/skill-branches: the merged-branch rule accepts a remote-tracking ref of any remote while "pushed" meansoriginonly; a branch reachable only fromupstream/mainis deleted without ever reachingorigin.@gemstack/skill-branches:remove <session-name>andremove <id>reclaim the same checkout but differ in whether the birth branch goes: the birth branch is derived from the argument (cli.ts:184), not from the checkout's folder.@gemstack/skill-branches:branchesDeletedcan name a branch whose deletion failed silently (deleteBranchswallows errors,reclaim.ts:130-137records the name regardless).@gemstack/skill-tickets: a queue edit committed but not pushed answers{ok:false}(queue.ts:140) while a claim or release in the same state counts as landed; and--ticket's label is interpolated unescaped, so a text containing a markdown link breaks the read-back (names.ts:72takes the first link).npm packleaves"@gemstack/agent-data": "workspace:*"in both skill tarballs, whichnpm installrefuses (EUNSUPPORTEDPROTOCOL);pnpm packrewrites it. Publish with pnpm, or add a prepack rewrite.Undocumented or unstated
tickets.tsskips a leadingSource:line when picking a ticket's summary; neither DECISIONS.md nor the ticket format mentions it. Document or remove.releaseprints the same shape asclaim({"ok":true,"file":…,"holder":…}), so a caller cannot see from the output that a lock was lifted.queueprints a flat array with no priority, while the skill says "in order of work".Design questions
##section yet is a plain line; the first--priorityadd then creates its section below it, so the unranked entry outranks Priority 10 forever. Same family as the level-1-title-only queue file getting sections appended.agent-*.closedoes not touch the queue: an entry linking the closed ticket stays untilqueue done.@acme/x) an agent installs in its checkout still writes into the user'snode_modules, because the dependency links go one entry deep and a scope is one entry.🤖 curated · Fable 5.1, effort high — the agent's cold reads and rig runs found these and wrote the lines; the grouping and the split into bugs versus design questions are mine.