No wrapper edits a PR body (issue-edit.sh has no PR equivalent) — blocks a seat from correcting its own declared contract #979
Open
opened 2026-07-31 03:10:23 +00:00 by Mos
·
0 comments
No Branch/Tag Specified
main
next
remediation/state
feat/rm-02-gate-registry
fix/rm-01-reproducible-checkout
remediation/mission-setup
fix/hygiene-inert-format-gate
fix/1019-queue-guard-stdin
feat/mos-ste-writing-standard
fix/1007-suite-hermeticity
fix/991-comment-url-scheme-normalise
feat/push-guard-null-case-verification
mos-comms-live
docs/heartbeat-framework-layering-ms-lead
feat/869-c4-version-coupling
feat/869-c2-install-ordering-guard
feat/869-c5-doctor-activation-check
feat/per-agent-gitea-identity
fix/875-belongs-case-insensitive-slug
fix/ci-queue-wait-404-branch-absent
feat/869-c1-activation-probe
feat/869-c3-broker-supervisor
fix/865-tea-cli-comment-invocation
feat/glpi-skills
fix/860-deflake-mutator-lease-gate
fix/850-detect-platform-port-normalization
fix/856-worktree-deps-preflight
fix/835-pr-review-approve-reject-comment-flag
fix/848-truthful-evidence
fix/812-pr-review-comment
fix/849-recovery-runtime-fixture-race
docs/758-ledger-m5-001-sync
feat/834-tc-server-side-doc
feat/833-constrained-recovery-command
feat/827-gate0-probe
governance/gate0-probe3-amendment
fix/795-codex-pr-diff
fix/795-ci-base-jq
fix/795-ci-base-git
feat/791-pr3-fleet-regen
feat/791-pr2-snapshot-restore
fix/807-glpi-206
fix/808-agent-send-false-sender
feat/791-upgrade-config-protection
feat/790-mosaic-yolo-claudex-pr2
feat/790-mosaic-yolo-claudex
feat/758-v1-v2-migrator
fix/766-exact-fleet-comms
test/758-reconciler-lifecycle-gates
docs/771-kbn101-db-role-split
test/758-example-profile-dispositions
feat/758-shared-role-resolution
feat/mos-logical-identity-fencing
feat/769-kbn100-unified-schema
docs/753-kbn010-threat-gate
feat/758-roster-v2-compiler
feat/756-official-discord-plugin
docs/758-fleet-config-management
fix/mos-option2-qualification-format
docs/issue-758-m0
docs/mos-option2-qualification
mos-comms
feat/tess-interaction-agent
fix/tess-docs-format
draft/mosaic-platform-prd
fix/installer-provider-gate-and-local-gateway-redis
release/mosaic-cli-0.0.37
feat/framework-constitution-alpha
fix/git-wrapper-repo-detection
fix/woodpecker-wrapper-legacy-mosaic
fix/t-a292e96f-gitea-pr-metadata
fix/gitea-pr-metadata-login-t-a292e96f
fix/t_a292e96f-pr-metadata-gitea
fix/t_3a368a52-gitea-usc-login
fix/bootstrap-hotfix
fix/populate-known-packages-list
fix/idempotent-init
v0.0.39-alpha
mosaic-v0.0.31
fed-v0.2.0-m2
fed-v0.1.0-m1
mosaic-v0.0.29
mosaic-v0.0.28
mosaic-v0.0.27
mosaic-v0.0.26
mosaic-v0.0.25
mosaic-v0.0.24
v0.2.0
v0.1.0
v0.0.8
v0.0.7
v0.0.6
v0.0.5
v0.0.4
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mosaicstack/stack#979
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
There is a wrapper to edit an issue body (
issue-edit.sh) but none to edit a pull request body.Observed
A coder seat was instructed to refresh a stale contract section in a PR description — documentation only, no code change. It correctly stopped at the wrapper gate and did not fall back to raw
tea/API:(That specific failure was a usage error —
pr-view.shrequires-n <number>, not a positional. But even with correct syntax,pr-view.shonly reads.)Full inventory of PR wrappers:
pr-ci-wait,pr-close,pr-create,pr-diff,pr-list,pr-merge,pr-metadata,pr-review,pr-view. None edits a PR body.Why this matters more than it sounds
The PR body is where the declared contract lives — the thing reviewers, validators, and merge gates check against. On the PR in question, a marker's declared line number drifted 171 → 183 → 206 across three heads while the invariant literal stayed fixed. An external validator greps that literal; a reviewer reads that contract. A stale body is a stale gate input.
Under the hard gate ("use the Mosaic git wrappers before any raw provider CLI; if a required wrapper command fails, status is blocked"), a seat that needs to correct its own declared contract cannot, and must escalate to whoever holds a raw credential. That is the correct behaviour given the rule, and it means the rule currently forbids a routine, low-risk documentation fix.
Required
Add
pr-edit.shcovering at minimum--bodyand--title, mirroringissue-edit.sh's interface and its login/slug resolution.And build it with the readback this family is missing (#976, #977, #978): assert the edit is present by re-reading the PR after the write, and make the success line conditional on that. Do not repeat the pattern where the tool prints success for an effect that never occurred.
Note also that
teahas noissue commentsubcommand (#976); confirm which PR-edit verbsteaactually exposes withtea pr --helpbefore wiring the implementation, rather than assuming a verb exists because it is spelled like its siblings.