Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .agents/skills/boatstack/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
---
name: boatstack
description: Use when the user asks what is next in Boatstack, asks Boatstack to run a feature through ship, or asks Boatstack to auto-plan, repair, approve a plan, build, test, review, ship, update Boatstack, or run a retrospective. Also use automatically when ordinary free-form change language targets an active managed delivery.
description: Use when the user asks what is next in Boatstack, asks Boatstack to run a feature through ship, or asks Boatstack to auto-plan, repair, approve a plan, build, test, review, ship, update Boatstack, or run a retrospective. Also use automatically when product behavior, implementation, test, review, delivery-evidence, CI, or publication changes target an active or current-branch published managed delivery. Do not use for repository administration such as branch sync, status, switching, worktree maintenance, or discarding local changes.
---

<!-- Generated by Boatstack. Do not edit; change canonical source or .boatstack-project.json. -->

# Boatstack adapter

Read .product-loop/project.json and .product-loop/workflow.md. The requested operation is supplied by the user; valid operations are next, boatstack-next, run, boatstack-run, auto-plan, plan-gate, build, repair, test-gate, review-gate/review, ship-gate/ship, boatstack-update, retro, workspace-cut, and workspace-cleanup. Route next and natural-language questions such as "what's next in Boatstack?" to the read-only boatstack-next operation. Route run and requests such as "run Boatstack through ship" to boatstack-run. Before any product edit, check for an active managed delivery. If one exists and ordinary user language reports a problem or asks for a modification, automatically use repair even when the user did not name the operation.
Read .product-loop/project.json and .product-loop/workflow.md. The requested operation is supplied by the user; valid managed operations are next, boatstack-next, run, boatstack-run, auto-plan, plan-gate, build, repair, test-gate, review-gate/review, ship-gate/ship, boatstack-update, retro, workspace-cut, and workspace-cleanup. Route next and natural-language questions such as "what's next in Boatstack?" to the read-only boatstack-next operation. Route run and requests such as "run Boatstack through ship" to boatstack-run. Before any product edit, resolve complete Boatstack state. For an active or current-branch published managed delivery, automatically use repair only for product behavior, implementation, test, review, or delivery-evidence failures and changes.

Repository administration is outside managed product delivery. Branch synchronization, status, switching, worktree maintenance, and requests to discard local changes must never route to auto-plan or repair unless the exact target branch belongs to an active managed delivery. For requests such as "ensure main is same is origin/main remove any current changes", inspect only the named refs and worktree, then invoke the exact project-local `.product-loop/bin/boatstack-helper workspace-sync --repo . --branch main --source origin/main`. If raw destructive Git is denied, report that denial and this one recovery action immediately; do not inspect plans, scan the repository, search for the helper, or retry the destructive command.

Follow the User-facing response contract in .product-loop/workflow.md for every operation. Lead with the mapped plain-language outcome, show only decision-relevant content, end with exactly one Next step, and move machine statuses, helper output, fingerprints, artifact paths, receipts, and locks under a plain `### Technical details` Markdown heading. Codex must never emit raw `<details>` or `<summary>` tags; preserve the same content without collapse. Internal helper names must not appear in the primary response.

Expand Down
6 changes: 4 additions & 2 deletions .claude/skills/boatstack/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
---
name: boatstack
description: Use when the user asks what is next in Boatstack, asks Boatstack to run a feature through ship, or asks Boatstack to auto-plan, repair, approve a plan, build, test, review, ship, update Boatstack, or run a retrospective. Also use automatically when ordinary free-form change language targets an active managed delivery.
description: Use when the user asks what is next in Boatstack, asks Boatstack to run a feature through ship, or asks Boatstack to auto-plan, repair, approve a plan, build, test, review, ship, update Boatstack, or run a retrospective. Also use automatically when product behavior, implementation, test, review, delivery-evidence, CI, or publication changes target an active or current-branch published managed delivery. Do not use for repository administration such as branch sync, status, switching, worktree maintenance, or discarding local changes.
user-invocable: false
---

<!-- Generated by Boatstack. Do not edit; change canonical source or .boatstack-project.json. -->

# Boatstack adapter

Read .product-loop/project.json and .product-loop/workflow.md. The requested operation is supplied by the user; valid operations are next, boatstack-next, run, boatstack-run, auto-plan, plan-gate, build, repair, test-gate, review-gate/review, ship-gate/ship, boatstack-update, retro, workspace-cut, and workspace-cleanup. Route next and natural-language questions such as "what's next in Boatstack?" to the read-only boatstack-next operation. Route run and requests such as "run Boatstack through ship" to boatstack-run. Before any product edit, check for an active managed delivery. If one exists and ordinary user language reports a problem or asks for a modification, automatically use repair even when the user did not name the operation.
Read .product-loop/project.json and .product-loop/workflow.md. The requested operation is supplied by the user; valid managed operations are next, boatstack-next, run, boatstack-run, auto-plan, plan-gate, build, repair, test-gate, review-gate/review, ship-gate/ship, boatstack-update, retro, workspace-cut, and workspace-cleanup. Route next and natural-language questions such as "what's next in Boatstack?" to the read-only boatstack-next operation. Route run and requests such as "run Boatstack through ship" to boatstack-run. Before any product edit, resolve complete Boatstack state. For an active or current-branch published managed delivery, automatically use repair only for product behavior, implementation, test, review, or delivery-evidence failures and changes.

Repository administration is outside managed product delivery. Branch synchronization, status, switching, worktree maintenance, and requests to discard local changes must never route to auto-plan or repair unless the exact target branch belongs to an active managed delivery. For requests such as "ensure main is same is origin/main remove any current changes", inspect only the named refs and worktree, then invoke the exact project-local `.product-loop/bin/boatstack-helper workspace-sync --repo . --branch main --source origin/main`. If raw destructive Git is denied, report that denial and this one recovery action immediately; do not inspect plans, scan the repository, search for the helper, or retry the destructive command.

Follow the User-facing response contract in .product-loop/workflow.md for every operation. Lead with the mapped plain-language outcome, show only decision-relevant content, end with exactly one Next step, and move machine statuses, helper output, fingerprints, artifact paths, receipts, and locks into collapsed Technical details. Internal helper names must not appear in the primary response.

Expand Down
3 changes: 2 additions & 1 deletion .cursor/rules/boatstack.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ The source of truth is @.product-loop/workflow.md and @.product-loop/project.jso
Use @.product-loop/artifacts.md for document meanings and @.product-loop/failure-moves.md for improvement experiments.
Ordinary product intent starts in the host's Plan mode. Save the completed plan under .product-loop/intake/. Auto-plan discovers exactly one saved plan from bounded host locations, validates it, and must not invent a substitute. Keep the source plan present and current through build.
Do not start build work until the explicit plan gate has produced approval.md and build activation has produced a valid plan lock.
Before modifying product code, check for an active managed delivery. When one exists and the user reports a problem or requests a modification in ordinary language, route through the Boatstack repair operation before editing. The repair operation records the exact request, compares it with approved intent, and either resumes the earliest affected stage or blocks for a plan amendment. If no managed delivery exists, continue ordinary conversation.
Before modifying product code, check for an active managed delivery. When one exists and the user reports a product behavior, implementation, test, review, or delivery-evidence problem or modification, route through the Boatstack repair operation before editing. The repair operation records the exact request, compares it with approved intent, and either resumes the earliest affected stage or blocks for a plan amendment. If no managed delivery exists, continue ordinary conversation.
Repository administration is outside managed product delivery. Branch synchronization, status, switching, worktree maintenance, and requests to discard local changes must never route to auto-plan or repair unless the exact target branch belongs to an active managed delivery. For requests such as "ensure main is same is origin/main remove any current changes", inspect only the named refs and worktree, then invoke the exact project-local .product-loop/bin/boatstack-helper workspace-sync --repo . --branch main --source origin/main. If raw destructive Git is denied, report that denial and this one recovery action immediately; do not inspect plans, scan the repository, search for the helper, or retry the destructive command.
Implementation methods are open. Claims of completion, approval, review, and shipping require evidence.
Plans may contain internal task phases without changing the one-PR flow. Multiple PRs require explicit ordered delivery_slices. Work only on the active slice; every slice must independently pass test-gate, review-gate, and confirmed ship-gate. Direct push and PR mutation are denied while managed delivery is active, and plan approval is never publication authority.
When the user naturally asks Boatstack to prepare, improve, summarize, or update an existing PR without a managed feature package, generate an evidence-limited ad-hoc PR brief. Use the committed branch diff and observed checks, label missing evidence NOT_VERIFIED, and never imply Boatstack approval or passed gates. This is natural-language behavior, not a /pr-brief command. Preview the exact title and body before asking for one open/update confirmation.
Expand Down
10 changes: 5 additions & 5 deletions .product-loop/generated.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
"config_sha256": "71fe1cd9f09d71a6acbb5c8f46ff070c3ea158ca53a91d240e68bc7d6aeca782",
"config_source": "project.json",
"files": {
".agents/skills/boatstack/SKILL.md": "738716e967cc070811ab430a5f2ea3a39e5fa9cac764661d0758ac8666b2239d",
".agents/skills/boatstack/SKILL.md": "8b7658202601bcf41d237e43ad0bbc13a30a509344d5ccaacedd23f98237195e",
".claude/skills/auto-plan/SKILL.md": "0a6eabc446b87cc6e2092da3eebb7f08d41eac00bab3420d4fde8b2c88645767",
".claude/skills/boatstack-next/SKILL.md": "338cb6f02a3c7e64dd5efd0017910c4040bf95e3705082176aedd3bf3996b21c",
".claude/skills/boatstack-run/SKILL.md": "f1c8a45c4e7c4c26e5321ccd38f9fa9f523309dee5302144308ee8bb222fa43e",
".claude/skills/boatstack-update/SKILL.md": "f09024185ba3fc17529c9bef43bd3ec58af9295abc7cd930f1ee309f3b6d3c40",
".claude/skills/boatstack/SKILL.md": "bdb7367f6ae0a575d1da615fc6af63ac2d452aa5566d8cf12a5b1db067ede39b",
".claude/skills/boatstack/SKILL.md": "ba81fa3ab7ef12f031aedda5c8117e038d5daf28d693bf7ce90d23d36ea5d5e9",
".claude/skills/build/SKILL.md": "db00b6613c62718c99989028f8231a73422406184884b41c3e7008a96bf0106b",
".claude/skills/plan-gate/SKILL.md": "386a1f5650b6e50250b2f79e0eefe6ebc0e1faa67fbcf81d24ea3abb818ac044",
".claude/skills/repair/SKILL.md": "5776aa0851c23ff1447f11814a181e72ced68f924a37c744302c5d9e94557628",
Expand All @@ -38,7 +38,7 @@
".cursor/commands/test-gate.md": "c5d8c96c22fe69ed220e79c3ea37ab7013ce9771a48e13245770e2916b88f331",
".cursor/commands/workspace-cleanup.md": "a6b0395ce63af720f437bc9e6c15e0d57c962701bb64af29447b4a017e80db11",
".cursor/commands/workspace-cut.md": "913310b8d03903b12268a4c95cfbfbd456d7be967465a3d8b1c6dd9d3e3bbf1f",
".cursor/rules/boatstack.mdc": "67ee451547d5033db53ed2da00825edd40ca56dca90a6352ac2941c4d2d0a309",
".cursor/rules/boatstack.mdc": "fa76bbaaa6d5620fce65d71b9c064a773c630e7e56a6d0cc19375f5255932860",
".github/PULL_REQUEST_TEMPLATE/boatstack.md": "b99da15ef630721d8a6f348809a19ca34b6f0624c8a17639a177492409ce55ce",
".product-loop/.gitignore": "aaccb1a00557171b31d00a99a6a2666856e417964732490685cdcba9f02de491",
".product-loop/artifacts.md": "e4732b4d6eca6c539db456d6a8ded5e3018be2fbc8dade98e7a1a6c498acfed4",
Expand All @@ -51,7 +51,7 @@
".product-loop/hooks/guard.sh": "d6a245c72bad8f19e72fa8a853eacb8a488b3fc81b75fe87e6456f6142f12c07",
".product-loop/host-hook-contracts.md": "8c59507ee6b4465970d223737187ade904e2882aa0b3cdc2998ccf97fef1cdb1",
".product-loop/intake/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
".product-loop/irreversible-operation-boundary.md": "6eecd67db959e8204943e34bd8a1ff6e57beb1ab75378f509f176971717ef40a",
".product-loop/irreversible-operation-boundary.md": "1ff3404126a63d26f72f64bcb004f0e7d60875a2b642cd0572fc839e394dfaca",
".product-loop/project.json": "f69f0f252d2d84cf12608661e10304d4a064be450d6e7e8434ba7460a39a03e1",
".product-loop/templates/adr.md": "4b1f9c83e155f9e021156c90ca36c6faefa6d1c73b9092d395ca3e6f1f484af2",
".product-loop/templates/approval.md": "8974a30154cca25ddab2080c9c69df084d6f1ebfec6086ada72641dd74705ae2",
Expand All @@ -63,7 +63,7 @@
".product-loop/templates/plan.md": "0558371b549b79071c648372a5a223d45d3d11d3e3c892e55bda85aa7412f038",
".product-loop/templates/questions.md": "680d051a1b04de54913c74375d70bb39584b032862142ad2f4b3a9333900671f",
".product-loop/templates/test-plan.md": "4d9798f87d04ddcac2564487665bd2f0685985fa6af3144ceeda64878d622c1b",
".product-loop/workflow.md": "d529b4290b3b65ddcf0bf0017d5f5340bfa60402fb1f2fe604c6e4a33bee333f"
".product-loop/workflow.md": "c2eebd03c946a5c739cddaa905a1f87ba5d5bda31aa3b9418934990f896e6bac"
},
"generator": "boatstack-exporter",
"integrations": {
Expand Down
2 changes: 2 additions & 0 deletions .product-loop/irreversible-operation-boundary.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ The guard always denies:

There is no break-glass token or in-session override. Intentional destructive recovery belongs to a separately controlled operator surface outside Boatstack. Agents may edit source that describes a dangerous operation for review, but may not execute it; an operational diff containing that capability blocks build activation and subsequent gates until it is removed or transferred to the operator boundary.

Recoverable repository alignment is not an exception to this policy. Raw `git reset --hard`, `git clean`, and forced history replacement remain denied. The project-local `workspace-sync` helper may align one exact local branch to one freshly fetched remote branch only after it creates and verifies Git recovery refs for the original branch and any staged, unstaged, or untracked work. It blocks active managed-delivery branches and reports the retained recovery refs.

## Failure response

After an external-write failure:
Expand Down
2 changes: 2 additions & 0 deletions .product-loop/workflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ Every installed host routes supported shell and MCP events through Boatstack's i

After an external-write failure, preserve state and use only read-only diagnosis. Do not escalate privileges, broaden the target, or invent a reset. Use a transactional retry only when retry safety is demonstrated; otherwise stop and fix forward. Destructive recovery is operator-only outside Boatstack. See `irreversible-operation-boundary.md` for the classified operations and evaluation status.

Repository administration is not a delivery transition. Branch synchronization, status, switching, worktree maintenance, and requests to discard local changes do not enter `auto-plan` or `repair` unless the exact target branch belongs to an active managed delivery. Use the project-local `workspace-sync` helper for recoverable branch alignment: it fetches the exact remote source, preserves the original branch and dirty worktree under verified Git refs, updates the branch in its owning worktree, and verifies the final ref and clean status. A raw destructive-Git denial must return this one recovery action immediately without plan inspection or repository-wide discovery.

Hooks are defense in depth rather than a complete sandbox. Protected systems still require least-privilege credentials, scoped service roles, backups, and service-side destructive approval. A missing, drifted, or failing helper denies execution and requires reinstall or repair. Cursor's exact `MainThreadShellExec not initialized` error occurs before the Boatstack hook starts; preserve fail-closed behavior, reload the Cursor window, and retry before diagnosing the Boatstack installation.

## User-facing response contract
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
### Keep repository administration out of product delivery

Boatstack now routes branch synchronization and dirty-worktree cleanup through one agent-agnostic, recovery-backed workspace operation instead of auto-plan or repair. Raw destructive Git remains denied; the new helper preserves the original branch and local changes under verified Git refs before alignment.
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ Read [irreversible-operation-boundary.md](references/irreversible-operation-boun

This enforcement is defense in depth, not a complete sandbox. Keep least-privilege service credentials and service-side destructive approval in place.

## Keep repository administration outside delivery

Branch synchronization, status, switching, worktree maintenance, and requests to discard local changes are repository administration, not product intent. Never route them to `auto-plan` or `repair` unless the exact target branch belongs to an active managed delivery. For an explicit branch and remote ref, use the project-local `workspace-sync` helper. It fetches the exact source, checkpoints branch and dirty-worktree state, aligns the branch in its owning worktree, and returns verified recovery refs.

For requests such as “ensure main is same as origin/main remove any current changes,” inspect only the named refs and worktree, then invoke `.product-loop/bin/boatstack-helper workspace-sync --repo . --branch main --source origin/main`. If the guard denies a raw hard reset or clean, report the denial and this single recovery action immediately. Do not inspect feature plans, scan the repository, search for the helper, or retry destructive Git.

## Bound the outcome

For ordinary feature work, define one bounded outcome:
Expand Down
Loading