Skip to content

porch checks: surface/auto-detect non-npm toolchains (discoverability follow-up to #550) #1069

@waleedkadous

Description

@waleedkadous

Context

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)

  1. 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.
  2. Document it prominently. porch.checks should be in CLAUDE/AGENTS and a check-config doc, not just discoverable by reading the spec.
  3. 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.

Refs

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/porchArea: Porch state machine / protocol orchestration

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions