feat(setup): S3 — ./setup one-click orchestrator (one-click-installer) - #447
Merged
Conversation
artyhoo
enabled auto-merge (squash)
June 10, 2026 12:56
6 tasks
artyhoo
added a commit
that referenced
this pull request
Jun 10, 2026
…with ./setup reality Carried fixes from S4 GO: (1) BFR §1.1 opt-in seam is now the ./setup companion-manifest flow (companion blocks left install.sh in S1 #442; ./setup + setup.d shipped #443-#447); (2) doc-authority-hierarchy §2 install.sh:138-152 citation updated to the verified SHIPPED_DOCS copy/validate range install.sh:89-128.
artyhoo
added a commit
that referenced
this pull request
Jun 10, 2026
…ring (one-click-installer S5) (#452) SCOPE 1: setup.d/bridge-guided.sh:32 had two bugs in the state=up branch: (a) bare relative path to setup-runtime-bridge.sh broke when cwd != repo root (lib is sourced, so $0 is the caller); (b) consumers installed via install.sh have no packages/runtime-bridge/ at all -> unconditional fail. Fix (Option C, dual-implementation §3 graceful degrade): resolve root via BASH_SOURCE, run the script by absolute path when present (framework repo), else print a docs/runtime-bridge-setup.md pointer and return 0. Paired-negative (script absent) + positive (script present, cwd=/tmp) cases added to tests/install-sh/bridge-guided.test.sh; falsifier verified: new cases FAIL=3 against the old lib code. SCOPE 2: .github/workflows/audit-self.yml — wire the 5 install-sh tests from S1-S3 (#443-#447) as per-file steps in principles-meta-tests, after the runtime-bridge opt-IN gate step (convention from #445). transform-internal-refs.test.sh was already wired; not duplicated. Plan Task 9 verification: full install-sh suite green (6 files, all FAIL=0), e2e dry-run in /tmp throwaway wrote nothing, shellcheck clean (2 pre-existing SC2317 info on the lib-only sentinel pattern, intended). Prior-art: skipped — graceful-fallback fix + CI wiring + verification, no new capability (./setup shipped S3, spec §11).
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.
Summary
Stage S3 of the one-click-installer umbrella (plan Task 5, after S2 #443/#444/#445). Adds the single entry point
./setup: preflight → framework (install.sh) → companions (manifest × engine, consent-first) → runtime-bridge (guided-detect), with--yes/--all/--dry-run.Delta from plan (sanctioned by the plan's own «Manifest-parse note», T-OCI-A): the inline pipe-split awk/sed parser is replaced by a tab parser (
while IFS=$'\t' read -r name detect install kind) — the shipped manifest (#443) is tab-delimited (single tab, no padding; header = format contract). Inner pipes in detect_cmd survive intact. The plan-mandated parse sub-test against the REAL manifest rows is included (proven non-vacuous:superpowersoccurs 0 times in install.sh's own dry-run output — the assertion can only pass via the manifest→engine path).Changes
setup(repo root, executable, 48 LOC) — plan Step 3 verbatim except the tab parser block.tests/install-sh/setup-orchestrator.test.sh— plan's 5 assertions + 2 parse-proof assertions (output mentionssuperpowers; nocommand not found). TDD redPASS=2 FAIL=5→ greenPASS=7 FAIL=0.Prior-art consult
Prior-art: aif-handoff installMcpServer precedent (spec §11; same pattern as commit ecb6457 / PR #311).Root-levelsetupis outside the capability-gate detection scope (packages/ + deps only); no new deps.Test plan
bash tests/install-sh/setup-orchestrator.test.sh→ PASS=7 FAIL=0 (worker verify-trace, red phase pasted)bash -n setup→ exit 0 (compensating check: pre-commit's bash -n gate covers only*.sh; extensionlesssetupbypasses it)⊝ superpowers already present — skipping,[dry-run] would run bridge guided-detect,✅ ./setup complete (dry-run)., exit 0, dir contains only its own package.jsonci-success(runs on PR)§1.7 Self-discipline check (REQUIRED if PR touches discipline-bearing files)
§1.7 Skipped: executable orchestrator script + its test only; no rules, principles, templates or discipline-bearing docs touched.
🟢 Простыми словами
Появилась одна команда
./setup: она проверяет инструменты, ставит сам фреймворк, потом по табличке-манифесту предлагает поставить компаньоны (сначала проверив — может уже стоят), и в конце помогает поднять «мост» к aif. Флаги:--yes— не спрашивать,--dry-run— только показать план, ничего не трогая. Покрыто 7 проверками.Observations (out of scope, follow-ups)
setup.d/bridge-guided.sh:32cwd-relative path bug (S2 artifact, untouched):bash packages/runtime-bridge/scripts/setup-runtime-bridge.shbreaks when a consumer runs./setupfrom their project dir with bridge state=up. Needs$HERE-anchoring or install-layout-aware resolution — candidate for S4/S5 or a standalone one-liner PR.setup.shat repo root still documented in README/INSTALL-FOR-AI — Task 8 (S4 docs) territory.