8000 docs(specs): add the Box Volumes spec (BVOL) for inbox#731 by mitodrummer · Pull Request #1990 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

docs(specs): add the Box Volumes spec (BVOL) for inbox#731 - #1990

Draft
mitodrummer wants to merge 3 commits into
mainfrom
docs/spec-box-volumes
Draft

mitodrummer wants to merge 3 commits into
mainfrom
docs/spec-box-volumes

Conversation

@mitodrummer
Copy link
Copy Markdown
Member

Split out of #1697 so the BOX model spec can land on its own. The document is byte-identical to the one that was on that branch at d8b1e23, where it went through the same spec-author checkpoints, the review-fix loop, and the CodeRabbit and minimal-foundry threads recorded there.

Spec id Requirements Tiers Owns
docs/specs/27-spec-box-volumes BVOL 12 11 T0 · 1 T1 Box Volumes, locally backed: named, persistent, single-writer, min volume verbs. Volumes are keyed by project per arch AT21, carry an access mode (rw/ro), and keep a write hold through stopped that is released on exited or reap; resume from exited is refused (exit 5) when another box holds the volume (BVOL-013).

Depends on BOX (#1697): BOX-076 admits BVOL-011's volume items and BOX-025 cites BVOL-013 in the resume refusal order. Lands after #1697.

Open question for arch: volumes mount at /volumes/<name>.

Epic story: S19 (stretch) of gominimal/inbox#731.

spec-lint reports only P004, one per named test that does not exist yet.

🤖 Generated with Claude Code

Moved verbatim from the docs/spec-box-local-first branch so the BOX model
spec can land on its own; this document is unchanged from head d8b1e23.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@coderabbitai
coderabbitai Bot commented Oct 5, 2026
Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@mitodrummer
Copy link
Copy Markdown
Member Author

/review

@minimal-foundry
minimal-foundry Bot commented Oct 5, 2026 •
Copy link
Copy Markdown
Contributor

Approved: no findings at 4833f1528d96.

Nothing to do.

Clobber: none: git log on the path shows only the three spec commits for this branch, nothing reverted.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — advisory review

Verdict COMMENT — 2 findings, 2 inline.

mitodrummer and others added 2 commits October 5, 2026 20:46
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions
github-actions Bot commented Oct 5, 2026
Copy link
Copy Markdown
Contributor

Spec lint

docs/specs/27-spec-box-volumes/27-spec-box-volumes.md — 12 finding(s)

docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:33: P004 BVOL-001 names test 'declared_volume_is_mounted', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:37: P004 BVOL-002 names test 'create_or_resume_creates_missing_project_volume', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:41: P004 BVOL-003 names test 'create_or_resume_reattaches_volume_by_project_and_name_keeps_contents', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:45: P004 BVOL-004 names test 'second_writer_refused_exit5_names_holder', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:49: P004 BVOL-006 names test 'volume_verbs_render_size_last_use_boxes', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:53: P004 BVOL-007 names test 'volume_rm_held_needs_force', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:57: P004 BVOL-008 names test 'box_rm_keeps_volume', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:61: P004 BVOL-009 names test 'volume_never_mounted_across_projects', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:65: P004 BVOL-010 names test 'write_hold_kept_while_stopped_released_on_exit', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:69: P004 BVOL-013 names test 'resume_from_exited_refused_exit5_when_volume_held', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:73: P004 BVOL-012 names test 'volume_prune_skips_held_prunes_exited_writers', which was not found in the repository
docs/specs/27-spec-box-volumes/27-spec-box-volumes.md:77: P004 BVOL-014 names test 'expanded_volumes_deduplicated_first_occurrence_order', which was not found in the repository

Advisory. None of this blocks the merge; the review decides.

Advisory, and never a merge gate. Linter: gominimal/foundry@b913de94, spec format: How Minimal Writes Specs.

@mitodrummer
Copy link
Copy Markdown
Member Author

/review

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — approved

Verdict APPROVE — No findings.

@minimal-foundry minimal-foundry Bot added the review:approved minimal-review approved the current head label Oct 5, 2026
@mitodrummer
Copy link
Copy Markdown
Member Author

/review

mitodrummer added a commit that referenced this pull request Oct 29, 2026
…ssing restart

BVOL is proposed in #1990 and BRES in #1762 (epic gominimal/inbox#698);
neither is on main, so BCLI cites them as the open PRs. BOX defines no
restart for an until_stopped box and sends those rules to the Agent Box
epic gominimal/inbox#678, so the Rollout line says so and an open
question asks which spec defines the operation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw
yermakoffivan pushed a commit to yermakoffivan/minimal that referenced this pull request Nov 4, 2026
…#1991)

* docs(specs): add the BCLI spec for the min box grammar, split out of gominimal#1697

Moved verbatim from the docs/spec-box-local-first branch so the BOX model
spec can land on its own; this document is unchanged from head d8b1e23.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): date the BCLI spec to its last revision

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): pin the BCLI spec's arch link to a commit

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): bind BCLI list, show and spec to the new BOX operations

BCLI-001 prints the records BOX-158 lists, BCLI-003 renders the record
BOX-159 returns, and BCLI-021 names each value's layer and type as
BOX-161 reports them.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* docs(specs): name the name column in BCLI's first slice

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): apply the owner's BCLI grammar decisions

Drop the daily shortcuts (min shell, min run, min attach, min ls) in
favour of the long forms and record them as a non-goal; retire BCLI-008,
BCLI-031, BCLI-045, BCLI-054 and BCLI-065, which had no long form. Make
BCLI-001's columns a floor, drop BCLI-018's per-type flags, list project
types in BCLI-019, and raise BCLI-063 to T1 with a property.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): add min box attach --exec as the PTY exec re-attach verb

BCLI-068 re-attaches a live PTY exec by id on the long form, with
refusals for an unknown id (exit 4), a non-PTY exec (exit 2) and an
ended exec (exit 4). BCLI-026 lists attach; Design reasoning and Open
questions note min box attach as an architecture follow-up.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): give min box attach a bare form over the box's PTY

BCLI-068's bare form re-attaches a pty_enabled box and refuses a box
without a PTY with exit 2 naming min box logs. min session attach
(BCLI-032) becomes its filtered form, and BCLI-007 and BCLI-009 name
min box attach beside it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): re-transcribe BCLI's verb-set story from the epic

The epic's S10 now lists min box attach and drops the shortcut clause.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): follow BOX's renumber to 29 and its event and type rules

BCLI cites docs/specs/29-spec-box-local-first, binds min box events to
BOX-162's read and follow, and refuses min init for a type BOX-063
refuses.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): add min box exec --timeout bound to BOX-149

BCLI-053 gains --timeout for an exec's own timeout, and a timed-out
exec returns 124 with code timeout from min box exec and min box wait
--exec. BCLI-026, Design reasoning and the open questions follow.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): date BCLI to 2026-10-06

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): cite gominimal/arch#114 for BCLI's command-tree follow-ups

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): limit BCLI-068's no-PTY refusal to a running box

A stopped or exited box without a PTY gets BCLI-009's restart refusal
naming min task run; min session attach inherits the split.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): bind BCLI's create verbs to BOX-163's name rule

BCLI-069 gives min box start, min session start and min task run a
--name that overrides [box] name, and reports BOX-163's collision
refusal with exit 2 naming the holder and hinting --name.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(specs): re-pin BCLI to arch 823f45f; fresh instances and bare start

Re-pin the architecture link to gominimal/arch 823f45f, where the
command tree, exit-code rows and resume meaning this spec raised are
merged, and turn those open questions into citations.

- BCLI-069: --name on start and run; only a plain start reports
  BOX-163's held-name refusal, with a hint naming --new and --name.
- BCLI-070: run and start --new request a fresh <name>-<n> instance
  (arch#117).
- BCLI-071/072: bare session start and box start pick the entry named
  default, else the only one, counting BOX-165's implicit entry; exit 2
  lists candidates or names the blocking non-session default (arch#124).
- BCLI-042: bare session activate maps to bare session start.
- BCLI-061: prune no longer accepts --stopped (arch#112).

One open question remains: NET and GWI re-citing the aliased verbs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CdRDynXbYoKR6dByN13KsD

* docs(specs): attach on min box start follows pty_enabled, not the session noun

BCLI-029 stated attach-or-detach for min session start only. The
architecture has min box start attach when the spec sets pty_enabled,
unless --detach, and session start is its alias, so the rule now
covers both verbs and keys on the setting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CdRDynXbYoKR6dByN13KsD

* docs(specs): an unattached start closes stdin and hints; box run attaches a PTY entry

BCLI-029: a start that returns without attaching closes the box's stdin
and, for a box without pty_enabled, hints min box run, logs and wait.
BCLI-070: min box run on a pty_enabled entry attaches as start --new,
pending gominimal/arch#127.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CdRDynXbYoKR6dByN13KsD

* docs(specs): keep bare min session attach; refuse resolution past an unreachable host

- BCLI-032: min session attach with no address keeps today's behaviour,
  picking the current project's session box, else the only one; more than
  one is a picker on a TTY or exit 2 listing them; none is exit 4 hinting
  min session start. The context now lists attach among today's verbs.
- BCLI-002: an unqualified name resolved across hosts fails with exit 7
  naming any host that did not answer, instead of resolving from the rest.
- BCLI-070: the PTY attach for min box run is marked as this spec's
  addition pending gominimal/arch#127, with its reasoning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Twbss23J4ADZCZsGeGdrMP

* docs(specs): bind BCLI exit codes to the arch table and add session logs

Give the session noun `logs` like every other type noun, bind BCLI-034
to the architecture's exit-code table instead of a partial list (its
[proposed] rows stay with BRES), reserve `org` as a type source, and
name box add/restart and the remaining host and provider verbs in
Non-goals with their owners.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): align BCLI's init flags, bare attach and box run with arch

Add the architecture's --session/--task/--agent/--service aliases to
min init, mutually exclusive with --type. Make bare `min session
attach` a one-release hidden alias that fails with exit 2 on an
ambiguous match instead of opening a picker. Drop the PTY attach on
`min box run` until gominimal/arch#127 rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): let an unreachable host win over bare session attach's fallback

Bare `min session attach` resolves by project root, else the only
session on the reachable hosts. That contradicted BCLI-002, which
refuses an incomplete cross-host lookup with exit 7. Make the exit 7
refusal take precedence, which also covers BCLI-042's alias.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): carry --loadout and session exec's shell form into BCLI

From msample's review: bind `--loadout` on session/box start to BOX-064's
selected-loadouts layer (BCLI-073) and carry it through the `session
activate` alias; keep `session exec`'s one-argument shell form inside the
alias window; refuse `min box attach` without a TTY; widen BCLI-010 to
`min box run`; re-pin arch to 4d554e4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): pick BCLI's restart hint by lifetime and fill the arch gaps

Address Norrie's second review of gominimal#1991:

- BCLI-074 brings `min box restart` into scope for `until_stopped` boxes;
  BCLI-009 and BCLI-068 choose the restart hint by `lifetime`.
- BCLI-075 resolves `self` from the connection's per-box identity.
- BCLI-033 binds the `min/v1/<type>` schema to every emitted object.
- BCLI-014 and the run `--detach` sub-bullet cover `min box run`.
- BCLI-064 yields to BCLI-002's exit 7 for an unreachable host.
- BCLI-026 drops the flags that wait on remote providers, SBOMs and
  nesting, each named in Non-goals.
- Rollout lists every merged requirement citing a removed spelling and
  holds each alias's expiry until they are re-cited.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): defer self resolution to nesting, as BOX does

BOX's Non-goals leave running `min` inside a box out of scope, so a
BCLI requirement resolving `self` could not be exercised. Retire
BCLI-075 and name `self` in Non-goals beside `--parent self`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): name one local provider per deployment style, per arch#45's ruling

gominimal/arch#45 ruled on 2026-10-27 that the local providers are
local, local-minvmd and local-box, one per deployment style, and that
the 0..N suffix names their hosts. BCLI-046 now names the three
providers and the hosts by daemon instance; only local-minimald stays
as a one-release alias, in its own WHERE sub-bullet. local-minvmd is the
provider's name again, so the Rollout no longer lists NET-049, NET-051
and TEL-034. The S16 non-goal records that the daemons serve the
providers over their sockets, and a design-reasoning paragraph carries
the ruling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): keep min box spec's path form and add the entry and box forms on top

Main's min box spec [path] renders the Box Egress Proxy rows (BEP-038).
BCLI-021 now keeps that form as a sub-bullet, renders BEP-038's rows in
the entry form, and BCLI-022 resolves a box only when the argument names
neither a directory nor an entry. The directory-first precedence is an
open question.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): narrow the self non-goal to the verbs BCLI specifies

Main's min box audit already takes self and --parent self (BEP-042). The
Non-goals now defer self only on min box spec, show and events, and
--parent self only on the verbs this spec specifies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): cite BVOL and BRES as their open PRs, and state BOX's missing restart

BVOL is proposed in gominimal#1990 and BRES in gominimal#1762 (epic gominimal/inbox#698);
neither is on main, so BCLI cites them as the open PRs. BOX defines no
restart for an until_stopped box and sends those rules to the Agent Box
epic gominimal/inbox#678, so the Rollout line says so and an open
question asks which spec defines the operation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): print alias hints after the command, and keep the global --provider

BCLI-042 and BCLI-046 now print their hint once the command's own work
ends, after any attached terminal is released, so no hint precedes the
shell of session activate, bare session attach, or a healthy start under
--provider local-minimald. The Non-goals and BCLI-026 now defer only
--all-providers and --provider naming a remote provider: the global
--provider flag stays as the local-provider selector the box verbs take.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): verify BCLI-049 on the VM lane and BCLI-044 against the reference

BCLI-049's test is now a scripts/session-e2e.sh case, the form NET-049
and NET-107 use for VM-lane behaviour. BCLI-044 now names the pages it
binds (the CLI reference and the sessions concept page) and is checked
by a test that reads them, the form NET-036 and NET-111 use; the
justfile has no doc-check recipe and the spec skills prescribe none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): state BCLI's requirements and reasons without decision history

Drops the was-BOX provenance comments, the dates, who decided what,
the retired-number notes and the plan-task references. Design reasoning
keeps each reason and each alternative, stated as a reason. The
Rollout's NET-015 line now names what must change before BCLI-066
ships rather than a plan task.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): drop local-minvmd from the expiring aliases

local-minvmd is a canonical provider name (BCLI-046); only
local-minimald is a one-release alias. Design reasoning now says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): choose BCLI-074's refusal hint by lifetime, as BCLI-009 does

The sub-bullet picked its hint by Box Type (task); it now names
min task run for any box that does not set lifetime = "until_stopped",
the same rule BCLI-009 and BCLI-068 use, so behaviour keys on a spec
attribute and never on a type name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): cover the secret invariant by BCLI-063 alone

The invariant holds in every output mode; BCLI-063 states that
universal with its property. BCLI-021 is the min box spec requirement
and renders one of those modes, so it is not the requirement that
covers the invariant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): tighten BCLI's changed lines to the prose rules

Splits BCLI-044's alias-note clause into a sub-bullet and BCLI-022's
argument precedence into a sub-bullet, states the alias hints as
printing after the command ends, and shortens the changed Design
reasoning, Rollout and Open question sentences so the lines this round
touched add no Vale alerts beyond the verify-line pair every verify
line carries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): close four BCLI review gaps on start, run, stop and restart

BCLI-029's off-TTY refusal now runs before the box is created and creates
nothing. The fresh-instance reasoning states the refused alternative as
one. Bare `stop` maps to `host stop` on the one host the global
`--provider` and `--minimal-dir` flags select, with `--force` carried
over. The Rollout names the `min box restart` hints of BCLI-009 and
BCLI-068 as needing the same daemon operation as BCLI-074.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): bring BCLI's prose to the repo's Vale rules

Split long sentences, drop semicolons, passives and unapproved modals,
and restate the AI-tell patterns Vale flags. Each requirement keeps its
EARS pattern, id, tier and verify line. The alerts left are on the
format's verify lines, the owner field, the template's heading dash, and
the user stories transcribed from the epic.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): keep bare stop's refusal in its alias window; track restart

Bare `min stop` keeps today's refusal while boxes run during its alias
window, and maps to `host stop --force` under `--force`. The Rollout
names gominimal#2761, a spec-29 amendment in its own PR, as the
dependency of BCLI-074 and the `min box restart` hints, which closes
the matching Open question.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): map every activate flag and follow arch at 7a86ec7

Rework BCLI-042's alias table: a plain `session activate` maps to
`session start --detach` and `--attach` to `session start`, every
activate flag is mapped (the network policy flags through the
command-line override layer, so `--deny-all-egress` is never dropped),
and an alias refuses any flag it does not map with exit 2.
`session hooks` maps to `box spec <box>`, which now lists each hook
with its declarer.

Re-pin the architecture to 7a86ec7 and follow it: `box run` refuses a
pty_enabled entry, bare `box attach` and `session attach` are permanent
with the attach exit codes 0, 7 and 254, exec refusals name exits 2
and 5, and the held-volume exit code is left to BVOL.

Also: BOX-005's second ambiguity refusal, the byte comparison in
BCLI-021, BCLI-073 narrowed to `loadout_mode = "open"`, the
BCLI-064/BCLI-042 order, `box wait --timeout`, the global-flags
non-goal, the provider non-goals after the Box Provider API, and the
Rollout's missing citers, scripts and the gominimal#2834 dependency.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): cite the BCLI residual issues and answer the review threads

Cite gominimal#2868 for the verbs with no owner,
gominimal/arch#160 for the 124 row, gominimal/arch#161 for --no-hooks
and --sync, and gominimal#2834 for both halves of BCLI-006,
whose disk figure excludes Box Volumes (BVOL-008).

From minimal-review on c4896c0: attach fails off a TTY before it
resumes the box; a stop or removal ends an attach with 254, not 0;
`session hooks <name>` resolves a box, never an entry; and an alias's
window ends one release after its listed citers move, stated in the
requirement as well as the Rollout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): put an alias's machine-mode hint in the error object and map short flags

From minimal-review on 4b494ed: a failing alias under -o json puts its
hint in BCLI-033's error object rather than a second stderr line, and a
short flag (-n, -f) maps wherever its long form maps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): state the bare stop alias's running-box check and its exit code

From minimal-review on 990008d: `host stop` stops running boxes, so the
bare `stop` alias is not a pure mapping. It checks for running boxes
first and refuses with exit 2, keeping today's message byte for byte
because the installer matches it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): keep a detached PTY box's terminal input for a later attach

From minimal-review on ef58775: BCLI-029 closed stdin on every
unattached start, including the `start --detach` that a plain
`session activate` now maps to, which would leave a later attach unable
to type. The close now applies only without `pty_enabled`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): answer Norrie's review at 990008d

- BCLI-022 lists hooks without a declarer: BOX-068 stores the merged
  expanded spec, so the record keeps none. Open question for the BOX
  amendment that would restore it.
- Rollout lists the scripts each alias's window waits on, session-e2e.sh
  among them, and gains `session rename`.
- The activate alias's network flags each name the spec key they set.
- `session destroy --all` and `--force` on a missing box keep today's
  behaviour through the window.
- The `session hooks` hint names the box id.
- BCLI-064 states the parse-first order in its text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): scope `session destroy --all` to session boxes and exempt prune --dry-run

From minimal-review on 1bd4c43: `session destroy --all` now removes
only boxes of type `session`, as BCLI-030 filters the session verbs; a
dry-run prune needs no --yes off a TTY; and the design reasoning no
longer claims `box spec` shows each hook's declarer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

* docs(specs): order BCLI-068's --exec refusals

From minimal-review on b3d698f: an ended exec without a PTY matched the
exit 2 and both exit 4 rules. The unknown-id check now comes first, then
the ended exec, then the live exec with no PTY.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NSAwDroXL6KqsSxUzdbZGw

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review:approved minimal-review approved the current head

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

0