Skip to content

[EPIC] Production-ready, end-to-end onboarding on every harness (Pi-parity distribution) #393

Description

@richard-devbot

Why this epic exists

Epic #376 proved RStack's enforcement is real on every harness (guard + validator sandbox + budgets). This epic is about the other half — distribution & end-to-end onboarding. Right now only Pi is genuinely install-and-go; the docs promise a Claude Code plugin (/plugin install …, /sdlc-* commands) that does not exist in the repo, and Tau/Operator/Hermes are "adapter written, wired manually, barely live-run." A user who installs rstack-agents and follows the README cannot reproduce the Pi experience anywhere else. This epic makes every supported harness reach Pi-parity onboarding: install → one wiring step → drive the governed loop.

The command surface (what a harness must expose)

The product is 18 sdlc_* tools (the LLM-facing surface — identical names/schemas on every harness, served from one registry via bin/rstack-bridge.ts --list):

Tool What it does
sdlc_orchestrate Load orchestrator/builder/validator instructions into the task (call first)
sdlc_start Begin a governed run under .rstack/runs/<id>/
sdlc_clarify Capture product-owner answers before planning
sdlc_plan Build the stage/task graph
sdlc_spec Read/update a stage artifact (vision, requirements, architecture, …)
sdlc_dor_check Definition-of-Ready gate → dor-report.json/readiness.json
sdlc_build_next Claim + prepare the next builder task (enforces attempt budgets)
sdlc_validate Read-only validation report (enforces telemetry budgets)
sdlc_approve Record a human approval/rejection at a gate
sdlc_decisions / sdlc_decide List/add / resolve/waive Decision Queue items
sdlc_delegate Spawn agents as isolated workers (validators default read-only)
sdlc_status Run status, task progress, next recommended action
sdlc_agents List package/project agents/skills by domain (routing)
sdlc_memory Search/append episodic project learnings
sdlc_rollback Restore a stage to its last verified checkpoint
sdlc_trace Trace tool calls/results for a task
sdlc_dashboard Generate a static run dashboard

Plus the rstack-agents CLI (host-agnostic operations): init, doctor, adopt, guard, gate, pipeline status|run|loop, rollback, checkpoint-status, config validate, approvals audit, decisions, dor, review independence, attest/verify-attestations, drift, memory inspect, env scan, inventory, list, add, notify, context/observe/notify-hook/statusline, hub. (Full detail: docs/SETUP.md.)

How the backend is designed (harness-independent)

Everything that decides lives in src/core/harness/ (~32 pure modules) and is reused by every adapter — zero host logic:

  • State & run model: runs.js, run-state.js, pipeline-state.js, stages.js, migrations.js (schema-versioned, atomic via safe-write.js).
  • Contracts: contracts.js (builder/validator completeness), required-checks.js, validator-registry.js.
  • Governance/enforcement: guardrails.js (attempt/telemetry budgets), destructive-actions.js (the classifier), validator-sandbox.js, stage-approvals.js, approval-audit.js (trust boundary), checkpoints.js, retry-policy.js.
  • Loop & goals: goal-check.js, goal-loop.js, context-pressure.js.
  • Evidence & audit: evidence.js, attestations.js, review-independence.js, drift.js, telemetry.js, readiness.js, decisions.js.
  • Two front doors: bin/rstack-bridge.ts (framework-neutral tool bridge) and rstack-agents guard (framework-neutral enforcement gate). Both are how non-Pi hosts reach the core.

The Pi reference pattern (what "end-to-end, just like Pi" means)

Pi is the gold standard. src/integrations/pi/rstack-sdlc.ts does three things, and every harness must reproduce all three:

  1. Register the 18 toolsregisterTool(...) × 18 (the LLM-facing surface).
  2. Wire the lifecycle hookspi.on(...): tool_call (the enforcement gate), before_agent_start (inject the orchestrator packet on RStack prompts), session_start (launch the Business Hub), tool_result (observability), session_shutdown, resources_discover (expose the agent/skill catalog).
  3. Auto-loadpi.extensions in package.json, so npm install is the only step.

Result: on Pi, install → sdlc_start { goal } → the whole governed loop, enforced, observable, no manual wiring. That is the bar for every other harness.

Current state (honest)

Harness Tools registered Enforcement hook Context/observe One-command onboarding Live-run end-to-end
Pi ✅ auto-load
Claude Code via bridge only ✅ (guard hook init writes) no plugin / marketplace / /sdlc-* commands hooks only
Tau ✅ (bridge) ✅ (tool_call) ⚠️ partial ⚠️ manual settings merge once (doctor)
Operator ✅ (bridge) ❌ no blocking hook ⚠️ manual settings merge once
Hermes ✅ (bridge) ✅ (pre_tool_call) ⚠️ ⚠️ manual symlink never run against real Hermes

Children

Suggested order: #388 first (its marketplace manifest unblocks installability for the whole plugins/ library), then #392 live-test matrix as the harness stabilizes, with #389/#390/#391 in parallel.

Prereq order: the marketplace manifest (in the Claude Code issue) unblocks installability for all the repo's plugins, not just SDLC.

Metadata

Metadata

Assignees

No one assigned

    Labels

    dxDeveloper experience improvementepicMulti-issue epicharnessHarness and run-state workharness-integrationPer-harness adapter integration + enforcement paritypriority-p1Core end-user journey; next implementation waveroadmapStrategic roadmap item

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions