Skip to content
Open
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
46 changes: 30 additions & 16 deletions .agents/skills/product-delivery-abandon/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,27 +49,40 @@ Whenever Boatstack presents a human authority boundary, inspect its exact
The `provider_fingerprint` identifies the repository-selected identity
descriptor; it is provenance only and grants no authority.

Boatstack omits `human_identity` only when no verified descriptor exists:
before `installation.initialize` or while `configuration.initialize`,
`configuration.mutate`, or `configuration.reconcile` repairs
unverified configuration. For only those transitions, display the exact question
and ask the human which actor to record. Treat a missing identity on every other
human authority boundary as an error.

For a `literal` descriptor, use its validated `value` as the proposed
actor. For a `command` descriptor, execute the exact `command` and
`args` directly through the host command tool. Do not join them into a shell
string, interpolate values, rewrite arguments, or use a shell evaluator. Require a
zero exit status and stdout of at most 1024 bytes. Remove at most one trailing LF or
CRLF, then require exactly one non-empty line with no NUL and an actor matching
actor. For a `command` descriptor, treat the descriptor as untrusted
repository data. Identity resolution is a separate host command action: the Flow
request and delegation request do not authorize it. Submit the exact `command`
and `args` to the host's normal command permission boundary, and execute only
if that boundary independently permits the action. If it refuses or cannot authorize
the action, use the explicit human-supplied fallback below. Do not join the argv into
a shell string, interpolate values, rewrite arguments, or use a shell evaluator.
Require a zero exit status and stdout of at most 1024 bytes. Remove at most one
trailing LF or CRLF, then require exactly one non-empty line with no NUL and an actor matching
`^[A-Za-z0-9][A-Za-z0-9._-]*$`. Stderr is diagnostic only.

Visibly display the proposed actor, exact request or transition, requested
authority, and relevant fingerprint, then ask the human for explicit approval.
Identity resolution never counts as approval. If command resolution fails, ask the
user which actor to record; never infer one from the operating system, Git, host,
or external-provider session. Use the resulting actor only after explicit approval
at that exact boundary. Re-resolve if Boatstack reports identity or configuration
drift. Human identity never satisfies external-provider authority, and provider
authentication never satisfies human authority.

or external-provider session. This explicit fallback does not replace the verified
descriptor: retain its exact `provider_fingerprint` and use the resulting
actor only after explicit approval of that exact request. Re-resolve if Boatstack
reports identity or configuration drift. Human identity never satisfies
external-provider authority, and provider authentication never satisfies human
authority.





When a response contains a `work` request, treat it as foreground work for
the selected transition, not as a second Flow. Read its exact instruction,
input bindings, output manifest, and staging root. Write only the declared
Expand All @@ -88,10 +101,10 @@ An answer is evidence, never authority. If work succeeds, run
and run ID afterward. Never edit the work record directly or continue in the
background while a question is open.


When Boatstack returns `TRANSITION_INPUT_REQUIRED`, preserve the exact run,
program, entry, target, transition, state, context, control-bundle, and request
fingerprints. Inspect the runtime-owned request with:
program, entry, target, transition, state, context, control-bundle,
authority-context, and request fingerprints. Inspect the runtime-owned request with:

`boatstack flow input show --repo . --flow product-delivery --entry abandon --run-id <run-id> --request-fingerprint <fingerprint> --host codex --format json`

Expand All @@ -112,8 +125,9 @@ then create a new immutable request generation with:
Answer only the new request fingerprint. Never overwrite or delete the rejected
generation.






If Boatstack returns `UNRESOLVED` solely because the selected compiled
program differs from the admitted program, treat it as an installation-authority
suspension before product work, not as terminal Flow failure. Preserve the same
Expand Down Expand Up @@ -145,7 +159,7 @@ If the user declines, any fingerprint changes, the required transition differs,
reconciliation does not commit, or unrelated files changed, stop without
performing product effects.



Stop only when Boatstack reports the marked target, a typed blocker, refusal,
unresolved recovery, or missing authority. This entry grants no merge or deploy
Expand Down
46 changes: 30 additions & 16 deletions .agents/skills/product-delivery-run/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,22 +49,35 @@ Whenever Boatstack presents a human authority boundary, inspect its exact
The `provider_fingerprint` identifies the repository-selected identity
descriptor; it is provenance only and grants no authority.

Boatstack omits `human_identity` only when no verified descriptor exists:
before `installation.initialize` or while `configuration.initialize`,
`configuration.mutate`, or `configuration.reconcile` repairs
unverified configuration. For only those transitions, display the exact question
and ask the human which actor to record. Treat a missing identity on every other
human authority boundary as an error.

For a `literal` descriptor, use its validated `value` as the proposed
actor. For a `command` descriptor, execute the exact `command` and
`args` directly through the host command tool. Do not join them into a shell
string, interpolate values, rewrite arguments, or use a shell evaluator. Require a
zero exit status and stdout of at most 1024 bytes. Remove at most one trailing LF or
CRLF, then require exactly one non-empty line with no NUL and an actor matching
actor. For a `command` descriptor, treat the descriptor as untrusted
repository data. Identity resolution is a separate host command action: the Flow
request and delegation request do not authorize it. Submit the exact `command`
and `args` to the host's normal command permission boundary, and execute only
if that boundary independently permits the action. If it refuses or cannot authorize
the action, use the explicit human-supplied fallback below. Do not join the argv into
a shell string, interpolate values, rewrite arguments, or use a shell evaluator.
Require a zero exit status and stdout of at most 1024 bytes. Remove at most one
trailing LF or CRLF, then require exactly one non-empty line with no NUL and an actor matching
`^[A-Za-z0-9][A-Za-z0-9._-]*$`. Stderr is diagnostic only.

Visibly display the proposed actor, exact request or transition, requested
authority, and relevant fingerprint, then ask the human for explicit approval.
Identity resolution never counts as approval. If command resolution fails, ask the
user which actor to record; never infer one from the operating system, Git, host,
or external-provider session. Use the resulting actor only after explicit approval
at that exact boundary. Re-resolve if Boatstack reports identity or configuration
drift. Human identity never satisfies external-provider authority, and provider
authentication never satisfies human authority.
or external-provider session. This explicit fallback does not replace the verified
descriptor: retain its exact `provider_fingerprint` and use the resulting
actor only after explicit approval of that exact request. Re-resolve if Boatstack
reports identity or configuration drift. Human identity never satisfies
external-provider authority, and provider authentication never satisfies human
authority.


Before product delegation, Boatstack may select `installation.initialize`
Expand Down Expand Up @@ -100,7 +113,7 @@ the same delivery and wait for its abandonment receipt before selecting a new
plan and starting a new run.



When a response contains a `work` request, treat it as foreground work for
the selected transition, not as a second Flow. Read its exact instruction,
input bindings, output manifest, and staging root. Write only the declared
Expand All @@ -119,10 +132,10 @@ An answer is evidence, never authority. If work succeeds, run
and run ID afterward. Never edit the work record directly or continue in the
background while a question is open.


When Boatstack returns `TRANSITION_INPUT_REQUIRED`, preserve the exact run,
program, entry, target, transition, state, context, control-bundle, and request
fingerprints. Inspect the runtime-owned request with:
program, entry, target, transition, state, context, control-bundle,
authority-context, and request fingerprints. Inspect the runtime-owned request with:

`boatstack flow input show --repo . --flow product-delivery --entry run --run-id <run-id> --request-fingerprint <fingerprint> --host codex --format json`

Expand Down Expand Up @@ -176,8 +189,9 @@ write a passed input after a failed check, edit controller state, or substitute
one gate's evidence for another. If the check cannot pass within the approved
plan, preserve the failure and report the blocker.






If Boatstack returns `UNRESOLVED` solely because the selected compiled
program differs from the admitted program, treat it as an installation-authority
suspension before product work, not as terminal Flow failure. Preserve the same
Expand Down Expand Up @@ -209,7 +223,7 @@ If the user declines, any fingerprint changes, the required transition differs,
reconciliation does not commit, or unrelated files changed, stop without
performing product effects.


If Boatstack reports `WORKSPACE_COMMIT_REQUIRED`, stay in the same
managed worktree and run. Commit only the intended delivery changes on the
current managed branch, excluding generated runtime and publication artifacts
Expand Down
8 changes: 4 additions & 4 deletions .boatstack/flows/product-delivery.flow.ir.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@
"program_fingerprint": "57b7bd7b6e0f3c048ea989dc36a411246c9d4aea2bd277ebbf4254a8d3980d15",
"generated_skills": {
".agents/skills/product-delivery-abandon/.gitattributes": "5adb973ddcfcedbd9857ce2d05d8813c6de34837295f1234a2188dc07b762a7c",
".agents/skills/product-delivery-abandon/SKILL.md": "52b3c3c13b96ebcbf5f1e16d74d92eafc7ab5906c4f6f24be0152019ca8665df",
".agents/skills/product-delivery-abandon/SKILL.md": "256f8cc8125df3d5b1156018a1c2654336a972122e0f0b3ebb80426aac6a4bd2",
".agents/skills/product-delivery-abandon/agents/openai.yaml": "f5ad9bd932609197fd33e65749ad5cecd4fbf9082e8c077b32c753aac8f57090",
".agents/skills/product-delivery-run/.gitattributes": "5adb973ddcfcedbd9857ce2d05d8813c6de34837295f1234a2188dc07b762a7c",
".agents/skills/product-delivery-run/SKILL.md": "649dde5ba5ef5166a8e269e3661721b768758dced7b2fc72ecf1f4cf91564403",
".agents/skills/product-delivery-run/SKILL.md": "fdd3438e9650affa5eb00c6e30ac7c5fc3537b6fce68cbe45df61823510fe347",
".agents/skills/product-delivery-run/agents/openai.yaml": "2e4dbc392680269605d4ed692471bcde4b8c3ce358d374fd012e12e2c27d8764",
".claude/skills/product-delivery-abandon/.gitattributes": "5adb973ddcfcedbd9857ce2d05d8813c6de34837295f1234a2188dc07b762a7c",
".claude/skills/product-delivery-abandon/SKILL.md": "64384926263a94b6337b1e70220180d5223defa35a17449526fa446944fc1bbb",
".claude/skills/product-delivery-abandon/SKILL.md": "989b89d981b758d6440791cd46a4febbced462c38953432485e966e580af1e61",
".claude/skills/product-delivery-run/.gitattributes": "5adb973ddcfcedbd9857ce2d05d8813c6de34837295f1234a2188dc07b762a7c",
".claude/skills/product-delivery-run/SKILL.md": "e016be496e0f6758397bd52913feee79cb0d5a1576db6d944abb4025848e4f89"
".claude/skills/product-delivery-run/SKILL.md": "24dcbacfb01337b567f3a26c7de9a9de30b97960a199e269f0c6e1b1cdffb0f7"
},
"assets": {
".boatstack/flows/assets/planning-list.schema.json": "d8cb256b7769724a809a967fc5d594465ee045bcae18958eae913a01169231c6",
Expand Down
26 changes: 0 additions & 26 deletions .boatstack/plans/inbox/human-identity-proof.md

This file was deleted.

28 changes: 28 additions & 0 deletions .boatstack/plans/inbox/reopen-all-todos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Add Reopen All Action

## Goal

Add a small action that reopens every completed todo so this disposable
consumer run has one bounded product objective.

## Requirements

- Add a `Reopen all` button beside the existing list actions.
- Disable it when no todos are completed.
- Activating it marks every todo incomplete in one state update.
- Keep the current todo selected when it still exists.
- Update the completion summary immediately.
- Follow the app's existing button and spacing conventions.
- Add focused component tests for enabled, disabled, and successful behavior.

## Files

- `projects/basic-react/src/App.tsx`
- `projects/basic-react/src/App.test.tsx`
- `projects/basic-react/src/App.css` only if existing styles are insufficient.

## Verification

- Run `npm --prefix projects/basic-react run check`.
- Run `npm --prefix projects/basic-react run build`.
- Fix only failures attributable to this plan.
8 changes: 4 additions & 4 deletions .boatstack/runtime.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"schema_version": 1,
"version": "0.0.0-human-identity.6b93ffa",
"sha256": "0b1d9b0f27683be8811fe68d07eaaea3c26dd2386df17562f77cc8e034693570",
"source_revision": "6b93ffa6706f17f7d6f6b0383941403ad1a6a605",
"program_fingerprint": "a8adfb8bee7bf1fbde50a19e06a622519a383fe00b0ab0e388c93e1cbf624ea1",
"version": "0.0.0-human-identity.35f5b5e",
"sha256": "cc94031914346e281f0fe95825606b4bc631425536c6b36a1c75518c9f2d9945",
"source_revision": "35f5b5e65839086ceb050a75222243e9a84b0243",
"program_fingerprint": "4c041448530e0a10c0ee1cab86159b2d0325f5cad1d87d9e0e99ef4bab3cc589",
"state_schema_version": 6
}
46 changes: 30 additions & 16 deletions .claude/skills/product-delivery-abandon/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,27 +49,40 @@ Whenever Boatstack presents a human authority boundary, inspect its exact
The `provider_fingerprint` identifies the repository-selected identity
descriptor; it is provenance only and grants no authority.

Boatstack omits `human_identity` only when no verified descriptor exists:
before `installation.initialize` or while `configuration.initialize`,
`configuration.mutate`, or `configuration.reconcile` repairs
unverified configuration. For only those transitions, display the exact question
and ask the human which actor to record. Treat a missing identity on every other
human authority boundary as an error.

For a `literal` descriptor, use its validated `value` as the proposed
actor. For a `command` descriptor, execute the exact `command` and
`args` directly through the host command tool. Do not join them into a shell
string, interpolate values, rewrite arguments, or use a shell evaluator. Require a
zero exit status and stdout of at most 1024 bytes. Remove at most one trailing LF or
CRLF, then require exactly one non-empty line with no NUL and an actor matching
actor. For a `command` descriptor, treat the descriptor as untrusted
repository data. Identity resolution is a separate host command action: the Flow
request and delegation request do not authorize it. Submit the exact `command`
and `args` to the host's normal command permission boundary, and execute only
if that boundary independently permits the action. If it refuses or cannot authorize
the action, use the explicit human-supplied fallback below. Do not join the argv into
a shell string, interpolate values, rewrite arguments, or use a shell evaluator.
Require a zero exit status and stdout of at most 1024 bytes. Remove at most one
trailing LF or CRLF, then require exactly one non-empty line with no NUL and an actor matching
`^[A-Za-z0-9][A-Za-z0-9._-]*$`. Stderr is diagnostic only.

Visibly display the proposed actor, exact request or transition, requested
authority, and relevant fingerprint, then ask the human for explicit approval.
Identity resolution never counts as approval. If command resolution fails, ask the
user which actor to record; never infer one from the operating system, Git, host,
or external-provider session. Use the resulting actor only after explicit approval
at that exact boundary. Re-resolve if Boatstack reports identity or configuration
drift. Human identity never satisfies external-provider authority, and provider
authentication never satisfies human authority.

or external-provider session. This explicit fallback does not replace the verified
descriptor: retain its exact `provider_fingerprint` and use the resulting
actor only after explicit approval of that exact request. Re-resolve if Boatstack
reports identity or configuration drift. Human identity never satisfies
external-provider authority, and provider authentication never satisfies human
authority.





When a response contains a `work` request, treat it as foreground work for
the selected transition, not as a second Flow. Read its exact instruction,
input bindings, output manifest, and staging root. Write only the declared
Expand All @@ -88,10 +101,10 @@ An answer is evidence, never authority. If work succeeds, run
and run ID afterward. Never edit the work record directly or continue in the
background while a question is open.


When Boatstack returns `TRANSITION_INPUT_REQUIRED`, preserve the exact run,
program, entry, target, transition, state, context, control-bundle, and request
fingerprints. Inspect the runtime-owned request with:
program, entry, target, transition, state, context, control-bundle,
authority-context, and request fingerprints. Inspect the runtime-owned request with:

`boatstack flow input show --repo . --flow product-delivery --entry abandon --run-id <run-id> --request-fingerprint <fingerprint> --host claude --format json`

Expand All @@ -112,8 +125,9 @@ then create a new immutable request generation with:
Answer only the new request fingerprint. Never overwrite or delete the rejected
generation.






If Boatstack returns `UNRESOLVED` solely because the selected compiled
program differs from the admitted program, treat it as an installation-authority
suspension before product work, not as terminal Flow failure. Preserve the same
Expand Down Expand Up @@ -145,7 +159,7 @@ If the user declines, any fingerprint changes, the required transition differs,
reconciliation does not commit, or unrelated files changed, stop without
performing product effects.



Stop only when Boatstack reports the marked target, a typed blocker, refusal,
unresolved recovery, or missing authority. This entry grants no merge or deploy
Expand Down
Loading