feat: propose-work — push, open the PR, and move the issue, in one command #21
Reference in New Issue
Block a user
Delete Branch "feat/propose-work"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
GITEA-SETUP.mdhas listed this under Still to build since 2026-09-04:PROTOCOL.md§Pull requests requires all three. Until now they were three things toremember — and PR #20 had to add a warning to
port-loop.mdabout the two that getforgotten. A rule enforced by memory decays; this makes the sequence structural.
It does not reimplement push-work's refusals — it calls it
main, shared branches and force-push stay refused in exactly one place. Duplicating themwould let the two copies drift, and the copy that drifts is the one that matters.
Three design choices
The issue number is derived from the branch name, which
PROTOCOL.mdalready specifiesas
auto/<agent>/<issue#>-<topic>. A PR therefore cannot cite a different issue than thebranch was cut for — a mismatch no reviewer would catch.
-ioverrides.-mis mandatory.PROTOCOL.mdsays an issue instate/needs-humanmust say what tolook at and what pass and fail look like, "so a person can judge it in under a minute".
Refusing without that line costs the agent one retry; omitting it costs a human a round
trip.
It moves the label rather than adding it. Other
state/*labels are removed — leavingstate/in-progressattached makes the board lie about what is waiting on a person.Credential handling
The token is read from a file and handed to curl through a
--configdocument on stdin:never an argument, never exported. Arguments are world-readable in
/proc, and this tokencan push.
Verified that the mechanism actually delivers the header rather than silently dropping
it — with a bogus token the API answers
invalid username, password or token, while thesame URL with no header returns the label list anonymously. If the header were being
dropped, the bogus-token call would have succeeded.
What is verified, and what is not
#42fromauto/decoder/42-widget-census-m--dry-runsends nothingfabi/Sylpheed--configdelivers the auth headerStated plainly: there is no end-to-end run. That needs a real agent token and a real
issue, and this desktop is the second machine — the agent credentials live on the agent
box. Everything above the network call is exercised; the
POSTs are not. First real useshould be watched, which Phase 7 is going to do anyway.
--dry-rundeliberately does not require a credential — it exists so an agent cancheck the command it is about to run, and demanding a token it never sends would make the
check unavailable exactly where it is cheapest. That was a bug in my first draft, caught by
trying to dry-run it on a machine with no token.
Identical in both agents'
bin/on purpose: the agent name comes from the branch, so thereis nothing per-agent to diverge.
🤖 Generated with Claude Code