Repository navigation
v1.3.0 — Parity + correctness release
[1.3.0] - 2026-06-07
Parity + correctness release. Closes the full stride-pi-vs-stride gap audit (goal G166): brings every skill, agent, and TypeScript extension up to the canonical Claude Code plugin's feature set — schema_version 1.3 review reports with security_considerations, the missing task-enricher subagent, the ## after_goal GOAL_* env fix, claim-baseline changed_files anchoring, and a zero-config default install — while keeping the intentional Pi-specific adaptations explicit.
Added
task-enrichersubagent (W1013, W1014) — the previously-missing fifth agent. Newextensions/subagent-dispatch/agents/stride-task-enricher.mdports the canonical four-phase enrichment procedure (intent parse → six-step codebase exploration → complexity → 17-item checklist incl.security_considerations) to the Pi agent format, and a matching inlinestride-enriching-tasksskill path.task-enricheris wired into the dispatch registry (extracted to a pi-freeextensions/subagent-dispatch/agents-registry.ts, imported byindex.ts), so the dispatch tool now resolves 5 agents. First-ever subagent-dispatch test suite added (index.test.ts).security_considerationsas a first-class review_queue-scored field across the creation, enrichment, decomposition, and review skills/agents (W1007, W1008, W1011) — added to the scored-field banners, the per-task field templates, every worked example, the Embedded-Object-Formats subsection (array-of-strings, with the"None — …"escape hatch), and the## Consuming Provided Context(--dirbundle) sections.- Doc-level orchestrator gating on every internal sub-skill (W1007, W1008, W1015, W1016, W1017, W1018) —
INTERNALfrontmatter descriptions,## STOP — orchestrator checkblocks, andskills_version: 1.0. This is deliberately doc-level only: stride-pi does not ship the Claude plugin's PreToolUse skill-gate hook (Pi has no equivalent), so the gating is framing, not enforcement.
Fixed
after_goalnow actually forwardsGOAL_*env (W1019) — the 1.2.0 changelog claimedGOAL_ID/GOAL_IDENTIFIER/GOAL_TITLE/GOAL_DESCRIPTIONwere forwarded into the## after_goalchild process, but no code parsed the server'shook.env. NewextractGoalEnvFromResultinafter-goal-detector.tssourcesGOAL_*(plusBOARD_*/COLUMN_*/AGENT_NAME) verbatim fromhook.env; omitted canonical keys default to empty strings; prototype-pollution keys and non-string values are dropped; the API token is never injected.buildHookEnv/runHookgained anextraEnvparameter.after_goalenv-cache deletion ordering on the mark_reviewed route (W1019) — the env cache was deleted beforeafter_goalran on/mark_reviewed. Extracted the post-hook sequence into a pure, import-freeafter-goal-runner.ts(runAfterGoalAndCleanup) that runsafter_goalfirst, then cleans up — mirroring canonicalstride-hook.shordering.TASK_BASE_REFpersistence sochanged_filesanchors to the claim baseline (W1020) —changed-files.tsreadTASK_BASE_REFto anchor diffs, but nothing computed or persisted it, so the snapshot always fell back toHEAD~1and mis-reported the delta whenever the commit count since claim ≠ 1.index.tsnow runsgit rev-parse HEADat claim time, addsTASK_BASE_REFtoTASK_ENV_KEYS, and persists it viawriteEnvCache(withtaskToEnvrefactored to a git-freeTASK_FIELD_MAP). Empty refs preserve theHEAD~1fallback.- Missing required completion fields (W1016) — every
/completeJSON example instride-completing-tasksomittedcompletion_summary,actual_complexity, andactual_files_changed(a copy-paste-level bug that fails strict validation); added to both examples plusskills_version. The dispatchedreviewer_resultshape was upgraded from the thin legacy envelope to the full structured block with the "do not send only the thin envelope" warning.
Changed
- Reviewer review-report contract upgraded to
schema_version1.3 (W1009, W1010, W1015, W1017) — both reviewer variants (the dispatched ext-agent and the inline skill) emit the full canonical fenced ```json block:status, `issue_counts`, `issues[]` with the 7-value category enum (incl. `security` and `project_check`), `acceptance_criteria[]`, `project_checks[]` (CODE-REVIEW.md mechanism), and the four per-section verdicts (`testing_strategy` / `patterns` / `pitfalls` / `security_considerations`). The two variants are reconciled to describe the same block (no dual-variant contradiction). The orchestrator (`stride-workflow` Step 6) and `stride-subagent-workflow` gained the structured-block extraction + legacy↔structured field mapping and parse-failure fallback. task-decomposerandhook-diagnosticianfleshed out to canonical depth (W1011, W1012) — the decomposer gained the full methodology (scope analysis, boundary identification, dependency ordering, complexity table, dependency-graph patterns, special cases, a complete worked example) and removed a duplicate## Constraintsheader; the diagnostician gained the 6-category Failure Pattern Catalog, structured-JSON-vs-raw-text input detection (documenting both the Pi hook-bridge result shape and the cross-pluginstride-hook.shshape), timeout thresholds, and two worked examples.- Default install now ships the extensions (W1021) —
install.shinstalls thehook-bridge+subagent-dispatchextensions by default, so.stride.mdlifecycle hooks auto-fire out of the box (matching the Claude plugin's zero-config wiring). Added a--no-extensions(alias--skills-only) opt-out;--with-extensionis kept as a deprecated no-op. Removed the emptypromptsdeclaration frompackage.jsonand the unused.gitkeep-onlyprompts/and top-levelagents/placeholder dirs. stride-claiming-taskssendsskills_versionon every claim (W1018) with a stale-skills handling pointer.
Validation & Tests
- All
node --testsuites green: 85/85 (hook-bridge 79, subagent-dispatch 6). New coverage:extractGoalEnvFromResult+runAfterGoalAndCleanup(W1019, 13 tests),TASK_BASE_REFround-trip + anchored-diff (W1020, 2 tests), and theAGENT_NAMESregistry resolution (W1014, 6 tests). dispatch_agentevent contract verified live (W1022) — ranpi --mode json -pagainstpi-coding-agent@0.67.68and confirmed the final assistant answer arrives as amessage_endevent withmessage.content[].text, validatingextractMessageText's filter. The full content-bearing happy-path and thetool_result_endname remain unverified on the test box (no working LLM provider) and are documented as such indocs/smoke-test-w277-dispatch-agent.mdanddocs/validation-phase3.md.
Intentional Pi-specific deviations (not gaps)
- Doc-level gating, no enforcement hook. Internal sub-skills carry
## STOP — orchestrator checkframing andINTERNALdescriptions, but stride-pi does not ship the Claude plugin's PreToolUse skill-gate (Pi has no PreToolUse hook). The gate is documentation, by design. - Dual dispatch/inline path. Pi has no native subagent dispatch, so every subagent role ships both as a dispatched
dispatch_agentextension agent and as an inline skill fallback (--no-extensions). The work and output shape are identical; only isolation differs. - hook-bridge re-platforming. Lifecycle hooks run via the
hook-bridgePi extension intercepting the curltool_call/tool_resultevents (with a placeholder*_resultin the request body), rather than the Claude plugin'shooks.json. The singleHOOK_TIMEOUT_MS = 120000deadline replaces the server-supplied per-hook timeouts.
Source
G166 / W1007–W1023. Final parity audit, version bump, and CHANGELOG/README/AGENTS update closing the stride-pi-vs-stride gap analysis.