Skip to content

factory: sandcastle scaffold + stage-A gate baseline (capture-baseline) - #24

Merged
ALLiDoizCode merged 1 commit into
mainfrom
factory/sandcastle-scaffold
Aug 1, 2026
Merged

factory: sandcastle scaffold + stage-A gate baseline (capture-baseline)#24
ALLiDoizCode merged 1 commit into
mainfrom
factory/sandcastle-scaffold

Conversation

@ALLiDoizCode

Copy link
Copy Markdown

Gives toon-protocol/buzz a working sandcastle software factory (stage-0) plus the stage-A capture-baseline for the gate ladder. Part of toon-protocol/toon-meta#257 (migration epic toon-protocol/toon-meta#256). The FACTORY.md registry row lands separately in toon-meta — per the registry rule this repo is not "live" until that row exists.

What was scaffolded

  • .sandcastle/ — the proven relay-pilot recipe (engine @ai-hero/sandcastle@0.12.0 exact-pin, template parallel-planner-with-review), including every org-hardening already propagated to the other 10 repos: deterministic gh auth setup-git push auth, sandboxSecrets() passthrough in all runner entrypoints, fail-loud open-PR / review-push verification, model tiering (planner/merger = claude-opus-4-8; implementer/reviewer/open-pr/push-review = claude-sonnet-5), and the ~60% context-ceiling handoff instruction in the implement/review prompts.
  • .sandcastle/.gitignore + .sandcastle/.env.example — included up front (the fractal#15 bootstrap omission).
  • .sandcastle/package.json ({"type":"module"}) — buzz's root package.json has no type field, so without this tsx transpiles the runners to CJS and breaks on top-level await / require() of the ESM-only engine (connector#392/feat(desktop): restore Tauri auto-updater support block/buzz#393 gotcha).
  • .github/workflows/agent-image.yml, agent-implement.yml, agent-review.yml — copied from relay with only the pnpm pin (11.4.0), node (24), and image-verify changes; job bodies diffed against the originals to rule out the fractal f041aec comment-strip regression.
  • Root package.json: sandcastle* scripts + exact-pinned devDeps (@ai-hero/sandcastle@0.12.0, tsx, zod); pnpm-lock.yaml regenerated with pnpm 11.4.0 (--frozen-lockfile verified green).
  • Trigger labels agent:implement (#1D76DB) / agent:review (#B392F0) created on the repo.
  • .sandcastle/gate-baseline.json — the stage-A capture, same shape as relay#77/store#59/toon#120.

Gate shape (honest subset the sandbox can run)

Driven by the repo's own Justfile:

Check Command
Rust format just fmt-check
Tauri Rust format just desktop-tauri-fmt-check
Rust lint just clippy (workspace, -D warnings)
Rust unit tests just test-unit (infra-free nextest set)
Desktop lint just desktop-check
Desktop tests just desktop-test
Desktop build/typecheck just desktop-build
Web lint just web-check
Web build/typecheck just web-build

Baseline: zero pre-existing debt on every one of these (fmt 0 violations, clippy 0 warnings, tests green, biome/tsc clean on desktop+web) — measured at main@4d47aa8; Rust checks measured inside the agent image itself.

Explicit exclusions (documented in gate-baseline.json, still covered by upstream ci.yml on every PR): Flutter/mobile; desktop/src-tauri compile-level checks (GTK/WebKit + sidecar stubs — only its fmt-check is in-gate); Playwright e2e; Postgres/Redis integration tests; cargo-deny; cross-compile / Windows / macOS builds; signing/canary/release pipelines (KEEP rule — no upstream workflow was touched). Pre-existing gap noted: upstream CI has no admin-web job; the agent gate mirrors CI and does not silently add one.

Proof

  • Agent image builds locally: sandcastle:buzz (node:24-bookworm + rustup 1.95.0 default profile + corepack/pnpm 11.4.0 + just 1.46.0 + cargo-nextest 0.9.136 + gh + Claude Code), 3.97GB; toolchain-verify script passes inside it.
  • Gate proven inside the image: just fmt-check, just desktop-tauri-fmt-check, just clippy and just test-unit all PASS in the container (timings in gate-baseline.json); JS-side checks pass with the hermit-pinned toolchain.
  • Dry-run plan: SKIPPED — no reusable CLAUDE_CODE_OAUTH_TOKEN exists in any local repo's gitignored .sandcastle/.env, and minting one was out of scope. The org-level Actions secret CLAUDE_CODE_OAUTH_TOKEN is visible to this repo (as are APP_ID/APP_PRIVATE_KEY), so the label runners are expected to authenticate in CI; the first live agent:implement run is the remaining proof.

Fork caveat

This repo is a GitHub fork of block/buzz with no Actions run history of its own; upstream CI jobs run here for the first time on this PR and any failures unrelated to the added files (signing secrets, canaries, environment) are pre-existing fork-environment issues, not regressions from this change.

🤖 Generated with Claude Code

…oon-meta#257)

Stage-0 software factory for buzz, per org FACTORY.md conventions:
- .sandcastle/ on @ai-hero/sandcastle@0.12.0 (exact pin), template
  parallel-planner-with-review, Docker sandbox, relay-pilot recipe with all
  org hardenings (gh auth setup-git hook, sandboxSecrets() passthrough,
  fail-loud PR/push verification, opus/sonnet model tiering, ~60% context
  handoff). Nested .sandcastle/package.json {"type":"module"} scopes ESM for
  tsx (root package.json has no type field — connector#392/block#393 gotcha).
- Agent image: node:24-bookworm + rustup 1.95.0 (default profile) +
  corepack/pnpm@11.4.0 + just 1.46.0 + cargo-nextest 0.9.136 + gh + Claude
  Code; pkg-config/libssl-dev/cmake for openssl-sys/aws-lc-sys.
- Label runners agent-implement.yml / agent-review.yml + agent-image.yml
  build check (copied from relay; job bodies diffed intact).
- Gate (Justfile-driven, in-image proven green at zero debt): fmt-check,
  desktop-tauri-fmt-check, clippy (-D warnings), test-unit (nextest,
  infra-free set), desktop-check/test/build, web-check/build. Excluded by
  design and documented: Flutter/mobile, src-tauri compile checks,
  Playwright e2e, Postgres/Redis integration, cargo-deny, cross-compile,
  signing/canary pipelines (upstream ci.yml still runs them all).
- .sandcastle/gate-baseline.json: stage-A capture (gate epic
  toon-protocol/toon-meta#210 ladder) — correctness counts all zero,
  cold-gate speed, image size; fork has no Actions history so CI-side
  numbers are sampled from upstream block/buzz main and labeled as such.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ALLiDoizCode
ALLiDoizCode merged commit 52629ee into main Aug 1, 2026
25 of 29 checks passed
@ALLiDoizCode
ALLiDoizCode deleted the factory/sandcastle-scaffold branch August 1, 2026 05:24
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