Skip to content

feat: ask about contribution mode at install time, default off - #9

Merged
ahrazzle merged 3 commits into
mainfrom
contrib/continual-contribution-mode
Sep 17, 2026
Merged

ahrazzle merged 3 commits into
mainfrom
contrib/continual-contribution-mode

Conversation

@ahrazzle

Copy link
Copy Markdown
Contributor

Asks about contribution mode at install time, with a safe default.

What

  • install.sh takes --contribution-mode off|on (default off) and, when switching on, a required --operator-ref <reference>.
  • After a successful install the composer writes the contribution-state record at records/CONTRIB-STATE.md, rendered from the protean-ops ingredient's own installed template. The composer still vendors nothing: no schema copy, no submodule.
  • tests/test_contribution_mode.py covers the toggle in 8 cases; the workflow gains one step that runs it.

Why

External contribution is a public side effect, so the mode that permits it belongs to the operator and needs a default that fails safe. The composer is where a fresh machine decides it, so the question and its safe answer belong beside the command that asks it.

Behaviour

input result
no flag mode recorded as off; nothing else changes
--contribution-mode on without --operator-ref exit 1: a permission a flag alone can widen has no audit trail
--contribution-mode on --operator-ref <ref> record written with the mode on and a switch row citing the reference
--contribution-mode maybe exit 1
ops ingredient not in the selection, mode off exit 0 with a reported note; no record written
ops ingredient not in the selection, mode on exit 5 rather than inventing the schema
record already present left unchanged; an install never silently widens a permission

No environment variable is introduced: the choice is a recorded, reviewable flag rather than an ambient HERMES_* setting.

Evidence

command result
python3 -m unittest tests.test_contribution_mode Ran 8 tests, OK
python3 -m unittest tests.test_kit_lock Ran 28 tests, OK
python3 build/check-lock.py kit.lock.json PASS, ingredients=7
python3 build/check-ingredient-contract.py --lock kit.lock.json PASS, ingredients=7, unverified=0
python3 build/install.py --all --target <tmp> --dry-run --contribution-mode on --operator-ref OP-9 exit 0, prints contribution mode: on (operator reference OP-9)

Pre-existing, not caused by this change — the repository's build/verify-all.py reports 7 of 10 steps failed on main because it invokes build/sweep-gate.py, build/review-gate.py, build/surface-scan.py, build/check-artifact-contract.py, preflight/check.py, report/check.py, and build/generate.py, none of which exist in this tree; the workflow's Verify surface-scan passes step exits 2 for the same reason. Those gates are untouched here, and this change does not make them worse: check-lock.py, check-ingredient-contract.py, and both unit-test files pass.

Open item — the pins in kit.lock.json are not re-pointed by this change. The matching ingredient changes travel on their own branches, so the re-pin follows their release tags rather than this commit.

Mozi and others added 3 commits September 17, 2026 11:43
install.sh gains --contribution-mode off|on (default off) and, for on, a required
--operator-ref. After a successful install the composer writes the contribution-state
record at records/CONTRIB-STATE.md, rendered from the protean-ops ingredient's own
installed template; it vendors no schema and never overwrites an existing record.

Default off changes nothing else. on without --operator-ref exits 1, because a
permission a flag alone can widen has no audit trail; on without the ops ingredient
in the selection exits 5 rather than inventing the schema. The choice is a flag, not
an environment variable, so it is recorded and reviewable.

The pins in kit.lock.json are not re-pointed here: the matching ingredient changes
travel on their own branches and the re-pin follows their release tags.
The partition (b95cf39) deleted 7 gate scripts whose functions moved into
the ingredient repos' own gates, but verify-all.py still invoked them, so
the release gate runner failed 7/10 on main and on this PR alike.

- verify-all.py: drop the dead gates (sweep-gate, review-gate, surface-scan,
  check-artifact-contract, preflight/check, report/check, generate.py --help);
  keep check-lock, check-ingredient-contract, test_kit_lock; add
  test_contribution_mode. Update the docstring gate list to the 4 live gates.
- verify.yml: remove the dead 'Verify surface-scan passes' step.

Zero behavior change outside CI: install.py, tests, toggle paths, lockfile,
docs untouched.

@ahrazzle ahrazzle left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

PASS WITH OPEN ITEMS

Audited head: bcfe50e
Scope: gate-runner migration plus doctrine/ops/control-plane v1.1.0 lock repins.
Evidence: verify-all 4/4; check-lock --verify; ingredient-contract --verify; tests 28 + 8; CI 3.11 and 3.12 green in run 35247254474.
Independent QA: Shaka re-QA cleared D1-CI and D1-PIN for the three lane ingredients; mode off/on/operator-ref, internal always-on, external_contrib kill-switch, selected installs, and no-overwrite were read back.
Open item: the pre-existing protean-handoff stale pin still blocks a full --all install; it is outside this PR and lane scope.
Merge approval: green exact head; merge is permitted only with --match-head-commit bcfe50e.

@ahrazzle
ahrazzle merged commit d0a9a17 into main Sep 17, 2026
2 checks passed
@ahrazzle
ahrazzle deleted the contrib/continual-contribution-mode branch September 17, 2026 16:37
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.

1 participant