feat(ward-specs): add the full PR lifecycle (close, reopen, edit, update) to the forgejo KDL spec #489
No reviewers
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/agentic-os!489
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "issue-488"
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?
What
Adds the coherent pull-request lifecycle to the forgejo KDL spec bundle, so a stranded or empty PR is resolvable through ward instead of the web UI.
guardfile.forgejo.kdl(the liveward ops forgejosurface, perward.bundle.kdl) - growspr files/pr commitsreads pluspr create/pr edit/pr close/pr reopen/pr update. Close and reopen are fixed-body state toggles onrepoEditPullRequest(the milestone/issue pattern), update isrepoUpdatePullRequest(pull a stale head branch current). Merge stays out of the monolith, so the merge gate is unchanged.guardfile.forgejo.read.kdl- trap 2 reconciled: theneverpair over pr view/list was dead (the monolith granted both all along and the live director surface served them), and since deny inherits up the chain it would have silently shadowed every pr leaf an upper tier ever grew. Replaced with the pr read grants (view/list/files/commits), so the tier chain now agrees with the monolith.guardfile.forgejo.merge.kdl- re-described as the PR-lifecycle overlay per the issue's Where: the mutating verbs ride it beside the untouched merge pair, outside the read/write/admin chain, bound to the director/engineer/pm roles only (roles.kdl).forgejo.swagger.lock.json- trap 1: regenerated with the cli-guardkdl-specs lock --guardfiledriver (v0.94.0 pinned, the committed lock's own provenance - same path as1e239ed), not hand-edited. The diff is a strict superset: the 5 new operationIds (repoEditPullRequest,repoUpdatePullRequest,repoCreatePullRequest,repoGetPullRequestFiles,repoGetPullRequestCommits) plus 3 transitive definitions.specverb.lockcame out byte-identical.docs/ward-ops-forgejo-reference.md- regenerated viaward exec gen-ward-ops-referenceagainst the edited bundle, so the new verb names are greppable off-disk.tests/test_ward_specs_bundle.py- pins the new surface: lifecycle ops present in the lock, denials gone from the read tier, merge absent from the monolith, verbs present in the committed render.Validation
ward doctoragainst the edited bundle: all checks pass (the ops bundle mounts fail-closed on any unresolvable operationId - the aos#452/ward#1123 failure mode).ward ops forgejo pr close coilyco-bridge agentic-os-kai 721 --dry-runresolves toPATCH .../pulls/721with body{"state": "closed"}- the issue's done-condition command, rehearsed end to end minus the fire.ward exec surface-checkpasses,ward exec test459 passed,pre-commit run --all-filesclean.Notes
repoMergePullRequest/repoPullRequestIsMerged) is still not in the lock: the lock is the monolith member's pruned contract, and the merge overlay is a separateward-kdl-mergebinary whose runtime mounting is ward-side work (ward#1072). Nothing regressed - that is today's state, and the driver output keeps it honest.closes #488
ward.workflow: pull-request-and-merge
Render note for review: regenerating
docs/ward-ops-forgejo-reference.mdwith ward v0.633.0 also dropped the twoactions rerunexec-bridge sections the old v0.584.0 render carried. That is the binary's own mounting behavior (same-path exec overlays are skipped fail-closed, seedocs/forgejo-actions-logs.md), not a bundle edit in this PR - the pinned pre-PR bundle mounts the identical surface in this container. The bridge scripts anddocs/forgejo-actions-rerun.mdare untouched, and ward#950 / agentic-os#434 already track the first-class replacements.