chore(blueprint): add A-600 external runtime dependency shims#48
chore(blueprint): add A-600 external runtime dependency shims#48
Conversation
Adds A-600 to the arc blueprint as a planned iteration-10 feature. externalDeps[] manifest field + install postcheck + arc doctor, so arc-installed long-running processes (grove-bot, etc.) can resolve external binaries like `claude` even when launched from a context with a stripped PATH (launchd, nohup, system services). Surfaced by 2026-04-07 grove-bot/Luna outage: Bun.spawn(["claude", ...]) hit ENOENT in cc-session.ts because the bot's inherited PATH did not include ~/.local/bin where the native installer drops claude. Worked around with a manual symlink (~/bin/claude → ~/.local/bin/claude). A-600 is the structural fix. Refs #47
Code Review — 6-Lens AnalysisPR: Lens Results
Per-Lens DetailsCodeQuality
Security / Hardening / Performance All three lenses are not applicable. This PR modifies only a YAML planning file with zero runtime code, zero endpoints, zero user input handling, and zero resource management. Architecture The new entry follows the existing pattern:
EcosystemCompliance
Duplication Searched the blueprint for overlapping features. A-600 is distinct:
Verdict: APPROVEClean blueprint addition. The feature is well-scoped, correctly positioned in the dependency graph, and the PR is thoroughly documented with incident context, design rationale, and acceptance criteria in issue #47. No code to review — this is planning only. |
mellanon
left a comment
There was a problem hiding this comment.
6-lens code review complete. Clean blueprint-only addition — no code changes, all fields schema-valid, correct dependency graph positioning, thorough issue documentation. Verdict: APPROVE (submitted as comment due to self-authorship constraint).
Summary
Adds A-600 External runtime dependency shims to
blueprint.yamlas a planned iteration-10 feature, depending on A-100 (manifest format) and A-101 (install pipeline).A-600 is the structural fix for the gap surfaced by today's grove-bot/Luna outage: arc-installed long-running processes (grove-bot, future bots) inherit a stripped PATH from launchd/nohup/system services, so
Bun.spawn(["claude", ...])ingrove/src/bot/lib/cc-session.ts:115hits ENOENT even thoughclaudeis installed on the machine — just not in any directory the bot's PATH sees.Full design and acceptance criteria are in #47. This PR is blueprint-only — it does not implement A-600, just makes it visible on the dependency graph.
What this PR contains
Verification
$ BLUEPRINT_DEV_ROOT=/tmp/bp-test bun run src/cli.ts lint ✓ All checks passed. $ BLUEPRINT_DEV_ROOT=/tmp/bp-test bun run src/cli.ts ready --repo arc Ready to start (6): [ready] arc/A-600 External runtime dependency shims [ready] arc/A-400 Runtime enforcement (SecurityValidator) [ready] arc/A-401 metafactory registry source [ready] arc/A-406 SHA-256 registry verification [ready] arc/A-500 Remote package info [ready] arc/A-402 Version pinning(Lint run via
/tmp/bp-testsymlink farm with arc pointing at this worktree branch — same pattern used for grove#171 and meta-factory#67 launch-plan imports.)Connection to launch plan
A-600 is a DD-72 prerequisite, not a launch blocker. We worked around today's incident with a one-off
~/bin/claudesymlink, and Luna is functional again. But A-600 is the right structural fix and should land in iteration 10 alongside the launch plan, ideally before grove's first non-founder install (grove:S2-11).Cross-stream context: see meta-factory
docs/critical-path-to-launch.mdand the launch-plan blueprint imports in:Test plan
blueprint lintcleanblueprint ready --repo arcshows A-600Refs #47