Skip to content

β.4: one-lab provisioning (closes #4) - #10

Merged
Rchari1 merged 6 commits into
mainfrom
rchari/beta4-provisioning
Jun 26, 2026
Merged

β.4: one-lab provisioning (closes #4)#10
Rchari1 merged 6 commits into
mainfrom
rchari/beta4-provisioning

Conversation

@Rchari1

@Rchari1 Rchari1 commented Jun 17, 2026

Copy link
Copy Markdown
Member

Closes #4. Stacked on #9 (β.3) → base retargets to main as the stack merges. Separate PR from β.6 (demo dry-run, coming next).

Makes a clean machine Amicode-ready + verifiable, per spec-20260617-134308-one-lab-provisioning.

What this is

  • Bundled pinned Julia projectpackages/extension/julia/{Project,Manifest}.toml pins the vetted Piccolo 1.19 stack; provisioning is a deterministic Pkg.instantiate (no resolver drift, no sysimage).
  • scripts/install.sh — idempotent: checks Julia, instantiates ~/.amico/julia, code --install-extension, drops a starter lab.toml, prints next steps.
  • scripts/healthcheck.mjs — exit-coded; a pure resolveChecks() (unit-tested with injected probes) + probes for julia+Piccolo, opencode /event 200 (spawns β.2's boot-smoke), amico-run --help, and Bedrock-creds (config-level). All 4 ✓, exit 0 on this machine.
  • vsce packagingpnpm --filter amicode-v2 package produces amicode.vsix (39 MB, 16 files); a packaging-manifest test asserts the VSIX actually contains the staged amico-run, vendored opencode, template, and the pinned julia project (guards the β.2 dropped-asset trap).
  • RUNBOOK.md — timed ≤60-min clean-machine steps.

AC → evidence

Issue AC Evidence
Clean install ≤60min + amico-run finds bundled script (no exit-64) install.sh + RUNBOOK; amico-run probe --help exits 0; β.3 ships the template
healthcheck exit 0 all-pass / non-zero precise message resolveChecks unit tests (3) + live run: all 4 ✓ exit 0
VSIX contains amico-run + opencode + template + julia packaging-manifest assertion (green): extension/bin/dist/amico-run.js, vendor/opencode/darwin-arm64/opencode, templates/solve_template.jl, julia/Project.toml all present

Scope guardrails held: no PackageCompiler sysimage and no multi-lab lab.toml schema (both Phase 2); deterministic instantiate from the committed Manifest.

Fast tier: 45 amico-run + 30 extension tests green from a clean install.

🤖 Generated with Claude Code

@Rchari1

Rchari1 commented Jun 17, 2026

Copy link
Copy Markdown
Member Author

@jack-champagne

@jack-champagne jack-champagne 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.

Gave β.4 a look — pulled it, CI green, scope is clean and in-lane. Two things stood out that are worth fixing before this is the install path we hand a lab.

Must change

  • package builds the extension + opencode but never builds/stages amico-run, so the VSIX can ship without the orchestrator — and the test that'd catch it is skipIf(no VSIX), so CI never does. Only the runtime healthcheck backstops it.
  • probeCreds regexes a .jsonc file, so a "model" inside a // comment passes the creds check (false green).

Taste / non-blocking

  • Pin the Julia minor to the 1.12.3 Manifest you vendor, so the healthcheck Julia and the shipped Manifest can't drift.
  • The probes (creds/julia/opencode/amicorun) have no tests — only the pure resolveChecks aggregator does.

Comment thread packages/extension/package.json Outdated
"fetch:opencode": "node scripts/fetch_opencode.mjs"
"fetch:opencode": "node scripts/fetch_opencode.mjs",
"healthcheck": "node scripts/healthcheck.mjs",
"package": "pnpm run build && pnpm run fetch:opencode && vsce package --no-dependencies --allow-missing-repository -o amicode.vsix"

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.

package never builds/stages amico-run — the VSIX can ship without it, and packaging.test.ts is skipIf(no VSIX) so CI won't catch it.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Fixed in 7c768d8 — the package script now runs pnpm --filter @amicode/amico-run build first, so the VSIX can't ship without the orchestrator. The packaging-manifest assertion verifies amico-run is present in the staged VSIX.

// amazon-bedrock, AWS creds findable in env or ~/.aws. Not a paid LLM call.
const cfgPath = [join(homedir(), '.config', 'opencode', 'opencode.jsonc'), join(homedir(), '.config', 'opencode', 'opencode.json')].find(existsSync)
if (!cfgPath) return { ok: false, reason: 'no opencode config', fix: 'create ~/.config/opencode/opencode.jsonc with a model' }
const model = /"model"\s*:\s*"([^"]+)"/.exec(readFileSync(cfgPath, 'utf8'))?.[1]

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.

Regex on a .jsonc file — a "model" inside a // comment passes here. Parse with jsonc-parser (already a dep).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Fixed in 7c768d8probeCreds now strips JSONC (string-aware, so a // inside a URL/model-id is preserved) and JSON.parses the result, so a "model" mentioned inside a real comment can't false-pass. Covered in healthcheck.test.ts.

Rchari1 and others added 6 commits June 20, 2026 21:40
…ce + package/healthcheck scripts + repository field; .vscodeignore ships julia/

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…de/amico-run/creds probes); all 4 green on dev machine

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…+ opencode + template + julia (verified, 39MB, 16 files)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- package: build @amicode/amico-run before packaging, so esbuild's bin/ staging
  isn't silently skipped and the VSIX always ships the orchestrator (the
  packaging.test is skipIf-no-VSIX, so this was the real backstop).
- healthcheck probeCreds: parse the opencode .jsonc (string-aware comment strip
  + JSON.parse) instead of regexing it — a "model" inside a // comment no
  longer false-passes, and the $schema URL's // is preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Rchari1
Rchari1 force-pushed the rchari/beta4-provisioning branch from a9c4e2c to 7c768d8 Compare June 21, 2026 01:46
@Rchari1

Rchari1 commented Jun 21, 2026

Copy link
Copy Markdown
Member Author

Thanks Jack — both addressed in the latest push (rebased on the updated #9).

  • package stages amico-run: package now runs pnpm --filter @amicode/amico-run build first, so esbuild's bin/ staging isn't skipped and the VSIX always ships the orchestrator. (esbuild also already warns on a skipped stage as a backstop.)
  • creds probe / jsonc: probeCreds now strips JSONC comments (string-aware, so the $schema URL's // is preserved) and JSON.parses — a "model" inside a // comment no longer false-passes. Verified both cases. Note: I used a small string-aware strip rather than jsonc-parser — it isn't actually in the dep tree, and the strip avoids adding a dep across the whole stack; happy to switch to jsonc-parser if you'd prefer.

Taste: pinning the healthcheck Julia minor to the vendored 1.12.3 Manifest — sensible; I left it for a follow-up to keep this PR focused on the two must-changes. Noted.

@Rchari1

Rchari1 commented Jun 22, 2026

Copy link
Copy Markdown
Member Author

Thanks @jack-champagne — both must-changes are in 7c768d8:

  • package now builds/stages amico-run before packaging (VSIX can't ship without the orchestrator).
  • probeCreds parses with a string-aware JSONC strip + JSON.parse, so a "model" inside a // comment no longer false-passes.

The taste items (pin Julia minor to the vendored Manifest; probe-level tests) I'm treating as non-blocking follow-ups unless you'd rather they land here. Re-requesting review.

@Rchari1
Rchari1 requested a review from jack-champagne June 22, 2026 21:18
@jack-champagne

Copy link
Copy Markdown
Member

Provisioning machinery is solid — deterministic instantiate of the pinned stack, clean pure/impure split in healthcheck, VSIX-content guard. Notes:

@jack-champagne jack-champagne 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.

Approving — provisioning is solid; the blank --project is fixed in #12. The julia-version gate is a worthwhile follow-up (comment above).

@Rchari1
Rchari1 changed the base branch from rchari/beta3-agents-template to main June 26, 2026 20:08
@Rchari1
Rchari1 merged commit 22808dd into main Jun 26, 2026
3 checks passed
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.

β.4 — One-lab provisioning slice (bundle + install + healthcheck)

2 participants