You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Spec #550 (PR #554, merged 2026-02) shipped the porch.checks override in .codev/config.json — a per-check command / cwd / skip override that covers both phase checks (getPhaseChecks) and the phase_completion predicates (getPhaseCompletionChecks). That mechanism works and is the correct unblock for non-Node projects.
#550 deliberately scoped to option (a): config override with npm as the default, leaving the npm strings as the overridable defaults in codev-skeleton/protocols/*/protocol.json. It did not do auto-detection or de-npm the defaults.
Problem this follow-up addresses: discoverability
The fix is invisible until you already know it exists. A first-time strict-mode Python/uv project (no package.json) had a builder BLOCK at implement check 1 on npm run build — the architect's reflex was to fork the entire protocol.json (tier-2 override), not reach for porch.checks, because nothing pointed there. The mechanism shipped 4 months ago and still bit cold.
This is not a missing feature — it's that #550's knob isn't surfaced where a blocked non-Node builder would find it.
Proposed work (pick a subset)
Surface the hint on failure (cheapest, highest value). When a check fails with a missing-toolchain signature (command not found: npm / exit 127), emit a pointer to porch.checks in .codev/config.json with a copy-pasteable example. Turns a silent wall into a self-service unblock.
Document it prominently.porch.checks should be in CLAUDE/AGENTS and a check-config doc, not just discoverable by reading the spec.
Auto-detect toolchain (option (b) from Language-agnostic porch check commands (af-config.json override) #550, deferred).package.json→npm, pnpm-lock.yaml→pnpm, pyproject.toml/uv.lock→uv/pytest, go.mod→go, Cargo.toml→cargo — so the common non-Node cases need zero config. Optionally de-npm defaults.checks and phase_completion.build_succeeds/tests_pass once detection lands.
Context
Spec #550 (PR #554, merged 2026-02) shipped the
porch.checksoverride in.codev/config.json— a per-checkcommand/cwd/skipoverride that covers both phase checks (getPhaseChecks) and thephase_completionpredicates (getPhaseCompletionChecks). That mechanism works and is the correct unblock for non-Node projects.#550 deliberately scoped to option (a): config override with npm as the default, leaving the npm strings as the overridable defaults in
codev-skeleton/protocols/*/protocol.json. It did not do auto-detection or de-npm the defaults.Problem this follow-up addresses: discoverability
The fix is invisible until you already know it exists. A first-time strict-mode Python/uv project (no
package.json) had a builder BLOCK at implement check 1 onnpm run build— the architect's reflex was to fork the entireprotocol.json(tier-2 override), not reach forporch.checks, because nothing pointed there. The mechanism shipped 4 months ago and still bit cold.This is not a missing feature — it's that #550's knob isn't surfaced where a blocked non-Node builder would find it.
Proposed work (pick a subset)
command not found: npm/ exit 127), emit a pointer toporch.checksin.codev/config.jsonwith a copy-pasteable example. Turns a silent wall into a self-service unblock.porch.checksshould be in CLAUDE/AGENTS and a check-config doc, not just discoverable by reading the spec.package.json→npm,pnpm-lock.yaml→pnpm,pyproject.toml/uv.lock→uv/pytest,go.mod→go,Cargo.toml→cargo — so the common non-Node cases need zero config. Optionally de-npmdefaults.checksandphase_completion.build_succeeds/tests_passonce detection lands.Refs
packages/codev/src/commands/porch/config.tsgetPhaseChecks/getPhaseCompletionChecksinpackages/codev/src/commands/porch/protocol.tscodev-skeleton/protocols/*/protocol.json