Repository navigation
feat: ask about contribution mode at install time, default off - #9
Merged
Merged
Conversation
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
commented
Sep 17, 2026
ahrazzle
left a comment
Contributor
Author
There was a problem hiding this comment.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Asks about contribution mode at install time, with a safe default.
What
install.shtakes--contribution-mode off|on(defaultoff) and, when switching on, a required--operator-ref <reference>.records/CONTRIB-STATE.md, rendered from theprotean-opsingredient's own installed template. The composer still vendors nothing: no schema copy, no submodule.tests/test_contribution_mode.pycovers 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
off; nothing else changes--contribution-mode onwithout--operator-ref--contribution-mode on --operator-ref <ref>switchrow citing the reference--contribution-mode maybeoffonNo environment variable is introduced: the choice is a recorded, reviewable flag rather than an ambient
HERMES_*setting.Evidence
python3 -m unittest tests.test_contribution_modepython3 -m unittest tests.test_kit_lockpython3 build/check-lock.py kit.lock.jsonpython3 build/check-ingredient-contract.py --lock kit.lock.jsonpython3 build/install.py --all --target <tmp> --dry-run --contribution-mode on --operator-ref OP-9contribution mode: on (operator reference OP-9)Pre-existing, not caused by this change — the repository's
build/verify-all.pyreports 7 of 10 steps failed onmainbecause it invokesbuild/sweep-gate.py,build/review-gate.py,build/surface-scan.py,build/check-artifact-contract.py,preflight/check.py,report/check.py, andbuild/generate.py, none of which exist in this tree; the workflow'sVerify surface-scan passesstep 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.jsonare 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.