8000 docs(specs): add the min box CLI spec (BCLI) for inbox#731 by mitodrummer · Pull Request #1991 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

docs(specs): add the min box CLI spec (BCLI) for inbox#731 - #1991

Merged
mitodrummer merged 48 commits into
mainfrom
docs/spec-box-cli
Nov 3, 2026
Merged

mitodrummer merged 48 commits into
mainfrom
docs/spec-box-cli

Conversation

@mitodrummer
@mitodrummer mitodrummer commented Oct 5, 2026 •
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/28-spec-box-cli BCLI 62 61 T0, 1 T1 the grammar: the min box verb set (with min box attach --exec for re-attaching a PTY exec) and type nouns, exec flags, output schemas and machine-mode errors, the exit-code table, the one-release alias window (min session spellings canonicalise and expire; session destroy → box rm --force; session policy kept as an alias since NET-061/GWI-003 cite it), docs, min host and min provider. Daily shortcuts are a non-goal. Each requirement binds to a BOX operation by id.

Depends on BOX (#1697): every requirement binds to a BOX operation. Lands after #1697, so the model ships first, the grammar migration is scheduled and reviewed separately, and a non-CLI client binds to the model.

Epic stories: S10–S13 of gominimal/inbox#731.

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

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added a specification for the min CLI, covering box lifecycle and execution, address resolution, initialization, terminal access, network overrides, and host shutdown.
    • Documented type-specific session and task aliases, host and provider commands, machine-readable output schemas, and error outcomes.
    • Recorded how legacy command spellings are handled, including replacement hints and when they begin failing, along with security requirements, design decisions, non-goals, and open questions.

8000
…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>
@coderabbitai
coderabbitai Bot commented Oct 5, 2026 •
Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review.

Walkthrough

The change adds a specification for the min box CLI. It defines command grammar, box and task operations, output and exit-code behavior, compatibility aliases, host and provider commands, and security requirements.

Changes: BCLI Specification

Layer / File(s) Summary
Box and task operations
docs/specs/28-spec-box-cli/28-spec-box-cli.md
Specifies box addressing and lifecycle commands, task operations, and related output, error, and fallback behavior.
Command gr 8000 ammar and output
docs/specs/28-spec-box-cli/28-spec-box-cli.md
Specifies command structure, start and attach selection, type-noun aliases, machine-output schemas, and secret-safe rendering.
Compatibility and design requirements
docs/specs/28-spec-box-cli/28-spec-box-cli.md
Specifies legacy alias handling, host and provider commands, non-goals, design decisions, security requirements, and open questions.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Other

Suggested reviewers: norrietaylor

Merge Risk: Minimal · previous review 78ec1

This is a documentation-only specification addition with no runtime behavior change, and no merge-blocking risk remains.

Pre-merge checks: Passed 4
Check name Status Explanation
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Title check Passed The title follows Conventional Commit form (docs(specs): ...) and names the main change: adding the min box CLI spec (BCLI) for inbox#731. It is short, specific, and matches the single added spec file…
Description check Passed The description covers the purpose and scope of the spec. It explains why the document is split out of #1697, lists the spec id, requirement count, tiers, and what the spec owns, and names the depende…
Full details: Title check

Explanation

The title follows Conventional Commit form (docs(specs): ...) and names the main change: adding the min box CLI spec (BCLI) for inbox#731. It is short, specific, and matches the single added spec file, so it is clearly related to the changeset.

Full details: Description check

Explanation

The description covers the purpose and scope of the spec. It explains why the document is split out of #1697, lists the spec id, requirement count, tiers, and what the spec owns, and names the dependency on BOX (#1697). It links the epic stories (S10–S13 of gominimal/inbox#731) and reports the spec-lint result. It does not follow the template's headings. It has no '## Summary', '## Testing', or '## Checklist' sections. The Testing section lacks command output and only mentions spec-lint, and the checklist items (docs updated, BREAKING CHANGE footer) are not addressed. The content is mostly complete, so the check passes, but the template structure should be applied.

Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

A rabbit reads the box command page,
Then hops through verbs from stage to stage.
It guards each secret, keeps them hid,
And checks the hints for aliases slid.
The CLI spec is neatly laid;
The rabbit hops, content and glad.

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.
ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 09264cc2-9fad-4758-9c7f-ea87ebdb8618
📥 Commits

Reviewing files that changed from the base of the PR and between 6ca899a and 78ec17b.

📒 Files selected for processing (1)
  • docs/specs/28-spec-box-cli/28-spec-box-cli.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/specs/28-spec-box-cli/28-spec-box-cli.md

Included review availability: This review used your included allowance. 4 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 5 reviews per hour.

@mitodrummer
Copy link
Copy Markdown
Member Author

/review

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

Reviewed: no findings; approval withheld, 3 threads unresolved at 50a6e1b9d6f2.

APPROVE withheld: 3 unresolved threads — norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md. Resolving the last thread releases the approval on this head.

Resolve the open threads. Resolving the last one releases the approval on this head; no new review is required.

Clobber: none: the file is new.

@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 — 1 finding, 1 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/28-spec-box-cli/28-spec-box-cli.md — 62 finding(s)

docs/specs/28-spec-box-cli/28-spec-box-cli.md:40: P004 BCLI-001 names test 'box_list_prints_columns_and_schema', which was
8000
 not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:45: P004 BCLI-002 names test 'box_address_accepts_id_name_and_qualified', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:59: P004 BCLI-003 names test 'box_show_renders_state_and_identity', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:64: P004 BCLI-004 names test 'rm_running_box_refuses_naming_force', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:68: P004 BCLI-005 names test 'prune_off_tty_needs_yes', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:73: P004 BCLI-006 names test 'show_and_prune_dry_run_report_disk', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:78: P004 BCLI-007 names test 'attach_and_resume_verbs_resume_stopped_pty_box', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:86: P004 BCLI-009 names test 'resume_non_pty_box_exit2_hint_by_lifetime', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:91: P004 BCLI-074 names test 'box_restart_until_stopped_restarts_same_id_and_name', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:99: P004 BCLI-010 names test 'run_entry_wires_stdio_and_exit_code', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:110: P004 BCLI-011 names test 'task_run_provided_hidden_run_removed', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:115: P004 BCLI-012 names test 'type_noun_logs_follow', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:119: P004 BCLI-013 names test 'box_wait_returns_retained_exit_code_or_128_plus_signal', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:131: P004 BCLI-014 names test 'run_verbs_and_wait_timeout_return_124_with_code_timeout', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:135: P004 BCLI-015 names test 'task_list_shows_exited_until_pruned', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:139: P004 BCLI-016 names test 'events_jsonl_replay_schema_fields', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:149: P004 BCLI-017 names test 'init_scaffolds_entry_shape', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:153: P004 BCLI-018 names test 'init_entry_type_appends_one', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:169: P004 BCLI-019 names test 'type_list_shows_builtin_and_project_types_with_source', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:174: P004 BCLI-020 names test 'type_show_matches_shipped_table_with_sources', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:179: P004 BCLI-021 names test 'box_spec_renders_formats_secrets_as_refs', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:189: P004 BCLI-022 names test 'box_spec_box_renders_stored_copy', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:200: P004 BCLI-023 names test 'box_spec_renders_unenforced_sections', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:204: P004 BCLI-024 names test 'network_flags_override_stored_spec_and_projection', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:209: P004 BCLI-073 names test 'start_loadout_flag_selects_loadouts_layer', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:213: P004 BCLI-025 names test 'box_show_network_renders_effective', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:220: P004 BCLI-026 names test 'box_verbs_exist_with_arch_flags', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:224: P004 BCLI-027 names test 'plural_nouns_accepted', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:228: P004 BCLI-028 names test 'help_and_completions_from_one_model', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:232: P004 BCLI-029 names test 'start_attaches_pty_box_unless_detached', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:242: P004 BCLI-069 names test 'create_verbs_name_flag_overrides_box_name', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:249: P004 BCLI-070 names test 'run_and_start_new_request_fresh_instance', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:253: P004 BCLI-071 names test 'session_start_without_entry_picks_default_else_sole', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:263: P004 BCLI-072 names test 'box_start_without_entry_picks_default_else_sole', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:270: P004 BCLI-030 names test 'type_noun_verbs_alias_box_forms', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:274: P004 BCLI-032 names test 'session_attach_is_box_attach_filtered_to_sessions', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:297: P004 BCLI-033 names test 'json_output_schema_per_object', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:304: P004 BCLI-063 names test 'secrets_rendered_as_refs_in_every_output_mode', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:310: P004 BCLI-064 names test 'unknown_box_address_exit4_names_address', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:315: P004 BCLI-034 names test 'exit_code_table', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:319: P004 BCLI-035 names test 'run_style_propagates_entrypoint_exit', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:324: P004 BCLI-053 names test 'box_exec_runs_command_and_exits_with_its_code', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:340: P004 BCLI-067 names test 'box_show_lists_live_execs', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:344: P004 BCLI-068 names test 'box_attach_reattaches_pty_box', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:396: P004 BCLI-055 names test 'box_stop_exec_stops_that_exec', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:401: P004 BCLI-056 names test 'box_logs_exec_prints_exec_output', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:406: P004 BCLI-057 names test 'box_wait_exec_returns_exec_code', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:410: P004 BCLI-058 names test 'box_rename_renames_as_box_010', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:414: P004 BCLI-059 names test 'box_stop_stops_as_box_013_force_forces', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:418: P004 BCLI-060 names test 'box_rm_reaps_as_box_019_force_forces', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:422: P004 BCLI-061 names test 'box_prune_flags_map_to_box_021_selectors', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:426: P004 BCLI-062 names test 'box_cp_reads_stopped_box_as_box_017', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:447: P004 BCLI-042 names test 'activate_alias_maps_network_policy_flags_to_override_layer', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:462: P004 BCLI-066 names test 'session_run_exit2_hints_task_run', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:466: P004 BCLI-043 names test 'setup_zed_unchanged', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:471: P004 BCLI-044 names test 'cli_reference_documents_box_grammar', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:479: P004 BCLI-046 names test 'local_provider_and_host_names', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:486: P004 BCLI-047 names test 'host_list_name_and_state', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:490: P004 BCLI-048 names test 'host_show_socket_and_version', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:494: P004 BCLI-049 names test 'host_stop_stops_boxes_then_daemon_and_vm', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:502: P004 BCLI-051 names test 'list_shows_host_per_box', which was not found in the repository
docs/specs/28-spec-box-cli/28-spec-box-cli.md:506: P004 BCLI-052 names test 'provider_list_all_shows_local_providers', 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@fb5932b8, 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 comm 8000 ent

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

minimal-review — advisory review

Verdict COMMENT — 1 finding, 1 inline.

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>
@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 — approval withheld

Verdict COMMENT — APPROVE withheld: 9 unresolved threads — norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md:15, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md:28, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md:71, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md:82, …. 1 finding, 1 inline.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@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 — approval withheld

Verdict COMMENT — APPROVE withheld: 8 unresolved threads — norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md:15, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md:28, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md:71, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md:82, …. No findings.

@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 — advisory review

Verdict COMMENT — 1 finding, 1 inline.

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>
@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
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>
@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 — advisory review

Verdict COMMENT — 1 finding, 1 inline.

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

/review

Cite #2868 for the verbs with no owner,
gominimal/arch#160 for the 124 row, gominimal/arch#161 for --no-hooks
and --sync, and #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
@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.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

… 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
@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.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

…it 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
@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 — 1 finding, 1 inline.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

@norrietaylor norrietaylor left a comment
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks. Re-checked at 990008df4. Points 1, 2, 5, 6, 7 and 9 are fixed. Merging main instead of rebasing is fine: the branch is current and the spec diff is isolated. Two of the fixes introduce new problems, so I'm still requesting changes:

  1. BCLI-022's hooks sub-bullet (L193) can't pass against BOX as written. It makes box spec <box> list each hook with "the loadout or project that declared it" from the stored spec. BOX doesn't keep that for a box. BOX-068 stores the expanded spec, in which BOX-064 merges lifecycle_hooks from every layer into one list. BOX-161 reports layer provenance only when an entry is expanded, never in the spec's bytes, and it names a layer, not a particular loadout. So box_spec_box_lists_hooks_with_declarer needs a BOX amendment. Either list that amendment in Rollout or drop the declarer column. Today session hooks gets it from the daemon's saved composition snapshot (11-spec-lifecycle-hooks:324).
  2. The alias expiry gate (L451, L579-586) doesn't cover the e2e scripts. Expiry waits on the requirements and scripts Rollout lists, but scripts are listed only for bare min stop. scripts/session-e2e.sh alone calls session activate 262×, destroy 203×, exec 385×, policy 82×, rename 11× and hooks 3×. bulk-upload-e2e.sh, stress-session-e2e.sh and kernel-bump-review.sh call activate and destroy too. session rename has no Rollout entry at all. As written, an alias can expire while the VM-lane session proof that BCLI-049's verify line runs still uses it.

Smaller:

  • L439: "The networking and egress-proxy specs define the values of each flag" holds only for --deny-all-egress (NET) and --credentialed-upstream (BEP). --dynamic-ingress, --dynamic-range, --allow-subnets, --allow-dns-hosts, --allow-protocols and --deny-subnets aren't named in any other spec, and NET defines only the keys. State the flag-to-key mapping here, --dynamic-range especially, so activate_alias_maps_network_policy_flags_to_override_layer has something to check.
  • L428/L447, session destroy: --all is now refused as an unmapped flag, and bulk-upload-e2e.sh:141,338 uses session destroy --all --force … || true for cleanup. Today's --force also treats an already-destroyed session as success (cli.rs:1124), which BCLI-064 turns into exit 4. Map both, or list them in Rollout.
  • L428, session hooks hint: say that the hint names the box id. min box spec <name> resolves the entry form first (L190) and would show the entry's hooks, not the box's.
  • L307-308: the "parse before address resolution" order that settles BCLI-064 vs BCLI-042 lives only in an HTML comment. Put it in the requirement text.
  • minimal-foundry's two newest threads (L217 BCLI-026's missing --exec/--timeout, and L428 the bare stop refusal's exit code) have no reply yet.

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
@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 — approval withheld

Verdict COMMENT — APPROVE withheld: 3 unresolved threads — norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md. No findings.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

- 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
@mitodrummer
Copy link
Copy Markdown
Member Author

Thanks, Norrie. All of this is in 1bd4c43.

  1. Hooks declarer (BCLI-022). You're right: BOX-068 stores the merged expanded spec, so the record keeps no declarer. I dropped the column. box spec <box> now lists each hook's transition and whether it is inline or external, and the test is box_spec_box_lists_hooks. A new open question names the BOX amendment that would restore the declarer. Until then, session hooks loses that column when it maps to box spec.
  2. Expiry gate and scripts. The Rollout now lists each alias's scripts as well as its requirements: session-e2e.sh for every session alias, bulk-upload-e2e.sh, stress-session-e2e.sh and kernel-bump-review.sh for activate, and bulk-upload-e2e.sh for destroy. session rename has an entry (no requirement, session-e2e.sh). The section also says why session-e2e.sh gates it: BCLI-049's verify line runs it on the VM lane.

Smaller:

  • Network flags (L439). Each flag now names the key it sets: --dynamic-ingress → dynamic_ingress (NET-043); --dynamic-range <lo>-<hi> → dynamic_allowed_range, inclusive (NET-047); the four allow/deny flags each add one item to egress.allow_subnets, egress.allow_dns_hosts, egress.allow_protocols, egress.deny_subnets (NET-060); --deny-all-egress per NET-140; --credentialed-upstream declares the credentialed upstream present with no hosts of its own (BEP-012).
  • session destroy. Both are mapped for the window: --all → box rm --force on every box the local host lists, and under --force an address that resolves to no box exits 0, as today. BCLI-064 names that as its one exception, so bulk-upload-e2e.sh's || true cleanup keeps working. The script is also in the Rollout.
  • session hooks hint. It names min box spec <box-id>, with the reason (the entry-first read in BCLI-022).
  • Parse-first order (BCLI-064). It's in the requirement text now; the comment only cites the exit table.
  • minimal-foundry's two threads. Both were answered and resolved at ef58775. L217 needed no change, because the architecture's command reference already lists --exec on logs|wait|stop (L478) and --timeout on wait (L484). L428 was fixed: the bare stop alias checks for running boxes first and refuses with exit 2, keeping today's message byte for byte for the installer.

The spec linter reports only P004. The requirement count is unchanged at 62.

@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 — 3 findings, 3 inline.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

…t 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
@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 — 1 finding, 1 inline.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

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
@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 — approval withheld

Verdict COMMENT — APPROVE withheld: 3 unresolved threads — norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md, norrietaylor docs/specs/28-spec-box-cli/28-spec-box-cli.md. No findings.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

@mitodrummer
mitodrummer added this pull request to the merge queue Nov 3, 2026
Merged via the queue into main with commit df86453 Nov 3, 2026
36 checks passed
@mitodrummer
mitodrummer deleted the docs/spec-box-cli branch November 3, 2026 22:16
@norrietaylor
norrietaylor commented Nov 3, 2026 •
Copy link
Copy Markdown
Member

A Rollout note from NET's amendment, #2679.

After #2679, NET-058 binds VM resolution by box name to min session attach, min session exec, min session policy, min session destroy and min net forward. Its comment names min box attach|exec|show --network|rm as their successors.

This PR merged first, so #2679 lands second and updates this spec's Rollout list itself. It adds NET-058 to the min session policy, min session destroy and min session exec rows, and NET-160's new sub-requirement to min session policy.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

0