@rune-kit/rune 2.2.3 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rune-kit/rune",
3
- "version": "2.2.3",
3
+ "version": "2.2.4",
4
4
  "description": "58-skill mesh for AI coding assistants — 5-layer architecture, 200+ connections, 8 platforms (Claude Code, Cursor, Windsurf, Antigravity, Codex, OpenCode, OpenClaw, Generic)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -4,7 +4,7 @@ description: "Validates agent claims against evidence trail. Catches 'done' with
4
4
  user-invocable: false
5
5
  metadata:
6
6
  author: runedev
7
- version: "1.2.0"
7
+ version: "1.3.0"
8
8
  layer: L3
9
9
  model: haiku
10
10
  group: validation
@@ -123,6 +123,34 @@ IF no evidence found:
123
123
  UNCONFIRMED — 1 claim lacks evidence, 1 contradicted. Cannot proceed to commit.
124
124
  ```
125
125
 
126
+ ### Step 4.5 — Cross-Phase Integration Check
127
+
128
+ > From GSD (gsd-build/get-shit-done, 30.8k★): "Phase boundaries are where integration bugs hide."
129
+
130
+ When validating a completed phase in a multi-phase plan, check for integration gaps between phases:
131
+
132
+ 1. **Orphaned exports** — files/functions created in this phase that claim to be used by future phases (see `## Cross-Phase Context → Exports`) but are not yet importable:
133
+ ```
134
+ Grep for the export name in the current codebase:
135
+ - If export exists AND is importable → CONFIRMED
136
+ - If export exists but has wrong signature vs phase file contract → CONTRADICTED
137
+ - Expected export missing entirely → UNCONFIRMED ("Phase N claims to export X but X not found")
138
+ ```
139
+
140
+ 2. **Uncalled routes** — API endpoints added in this phase but not wired to any frontend/consumer yet:
141
+ - This is OK if a future phase handles wiring (check master plan)
142
+ - Flag as WARN if no future phase mentions consuming this route
143
+
144
+ 3. **Auth gaps** — new endpoints or pages without authentication/authorization:
145
+ - `Grep` for route handlers without auth middleware
146
+ - Flag as WARN (may be intentional for public endpoints, but worth checking)
147
+
148
+ 4. **E2E flow trace** — for the primary user flow this phase enables:
149
+ - Trace: entry point → business logic → data layer → response
150
+ - If any step in the chain is missing or stubbed → CONTRADICTED
151
+
152
+ **This step is OPTIONAL for single-phase tasks and MANDATORY for multi-phase master plans.**
153
+
126
154
  ### Step 5 — Evidence Quality Gate
127
155
 
128
156
  Before emitting verdict, verify evidence quality:
@@ -170,6 +198,8 @@ Completion Gate Report with status (CONFIRMED/UNCONFIRMED/CONTRADICTED), claim v
170
198
  | Agent pre-generates evidence by running commands proactively | LOW | This is actually GOOD behavior — we want agents to provide evidence |
171
199
  | Completion-gate itself claims "all confirmed" without evidence | CRITICAL | Gate report MUST include the evidence table — no table = report is invalid |
172
200
  | Existence Theater — agent creates files but they're stubs | HIGH | Step 1b stub detection: grep for Placeholder/TODO/NotImplementedError in new files |
201
+ | Cross-phase integration gaps — exports exist but wrong signature | HIGH | Step 4.5: verify exports match Code Contracts from phase file |
202
+ | Phase complete but E2E flow broken — missing link in the chain | MEDIUM | Step 4.5 E2E flow trace: entry → logic → data → response must all be connected |
173
203
 
174
204
  ## Done When
175
205
 
@@ -5,7 +5,7 @@ context: fork
5
5
  agent: general-purpose
6
6
  metadata:
7
7
  author: runedev
8
- version: "0.7.0"
8
+ version: "0.9.0"
9
9
  layer: L1
10
10
  model: sonnet
11
11
  group: orchestrator
@@ -322,6 +322,11 @@ If the coder model needs info from other phases, it's in the Cross-Phase Context
322
322
  1. Mark Phase 4 as `in_progress`
323
323
  2. **Phase-file execution** — if working from a master plan + phase file:
324
324
  - Execute tasks listed in the phase file (the `## Tasks` section)
325
+ - **Wave-based execution**: if tasks are organized into waves (see `plan` skill), execute wave-by-wave:
326
+ - Wave 1 tasks first (no dependencies — can run in parallel if inside `team`)
327
+ - Wave 2 tasks only after ALL Wave 1 tasks complete
328
+ - Within a wave: `team` dispatches as parallel subagents; solo cook runs sequentially
329
+ - If a task in Wave N fails → do NOT start Wave N+1. Fix or DECOMPOSE the failed task first
325
330
  - Follow code contracts from `## Code Contracts` section
326
331
  - Respect rejection criteria from `## Rejection Criteria` section
327
332
  - Handle failure scenarios from `## Failure Scenarios` section
@@ -419,6 +424,7 @@ PARALLEL EXECUTION:
419
424
  **REQUIRED SUB-SKILL**: Use `rune:completion-gate`
420
425
  - Validate that agent claims match evidence trail
421
426
  - Check: tests actually ran (stdout captured), files actually changed (git diff), build actually passed
427
+ - Check: no truncated code files (`// ...`, `// rest of code`, bare ellipsis) — agent MUST complete all output
422
428
  - Any UNCONFIRMED claim → BLOCK with specific gap identified
423
429
 
424
430
  **Gate**: If sentinel finds CRITICAL security issue → STOP, fix it, re-run. Non-negotiable.
@@ -739,13 +745,23 @@ A wrong first attempt that produces feedback beats perfect understanding that ne
739
745
 
740
746
  ```
741
747
  ## Cook Report: [Task Name]
742
- - **Status**: complete | partial | blocked
748
+ - **Status**: DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
743
749
  - **Phases**: [list of completed phases]
744
750
  - **Files Changed**: [count] ([list])
745
751
  - **Tests**: [passed]/[total] ([coverage]%)
746
752
  - **Quality**: preflight [PASS/WARN] | sentinel [PASS/WARN] | review [PASS/WARN]
747
753
  - **Commit**: [hash] — [message]
748
754
 
755
+ ### Deliverables (NEXUS response — when invoked by team)
756
+ | # | Deliverable | Status | Evidence |
757
+ |---|-------------|--------|----------|
758
+ | 1 | [from handoff] | DELIVERED | [file path or test output quote] |
759
+ | 2 | [from handoff] | DELIVERED | [file path or test output quote] |
760
+ | 3 | [from handoff] | PARTIAL | [what's missing and why] |
761
+
762
+ ### Concerns (if DONE_WITH_CONCERNS)
763
+ - [concern]: [impact assessment] — [suggested remediation]
764
+
749
765
  ### Decisions Made
750
766
  - [decision]: [rationale]
751
767
 
@@ -754,6 +770,8 @@ A wrong first attempt that produces feedback beats perfect understanding that ne
754
770
  - Saved to .rune/progress.md
755
771
  ```
756
772
 
773
+ > When cook is invoked standalone (not by team), the Deliverables table is optional. When invoked by team with a NEXUS Handoff, the Deliverables table is MANDATORY — team uses it to track acceptance criteria across streams.
774
+
757
775
  ## Sharp Edges
758
776
 
759
777
  Known failure modes for this skill. Check these before declaring done.
@@ -3,7 +3,7 @@ name: hallucination-guard
3
3
  description: Verify AI-generated imports, API calls, and packages actually exist. Catches phantom functions, non-existent packages, and slopsquatting attacks.
4
4
  metadata:
5
5
  author: runedev
6
- version: "0.2.0"
6
+ version: "0.3.0"
7
7
  layer: L3
8
8
  model: haiku
9
9
  group: validation
@@ -74,15 +74,30 @@ File: resolved file path
74
74
 
75
75
  If export not found → mark as **WARN** (symbol may not be exported).
76
76
 
77
- ### Step 3 — Verify external packages
77
+ ### Step 3 — Verify external packages (Dependency Check Before Import)
78
+
79
+ > From taste-skill (Leonxlnx/taste-skill, 3.4k★): "Before importing ANY 3rd party lib, check package.json."
78
80
 
79
81
  Use `Read` on the project's dependency manifest to confirm each external package is listed:
80
82
 
81
83
  - JavaScript/TypeScript: `package.json` → check `dependencies` and `devDependencies`
82
- - Python: `requirements.txt` or `pyproject.toml`
83
- - Rust: `Cargo.toml` → `[dependencies]`
84
-
85
- If package is **not listed** in the manifest mark as **BLOCK** (phantom dependency).
84
+ - Python: `requirements.txt` or `pyproject.toml` → `[project.dependencies]` and `[project.optional-dependencies]`
85
+ - Rust: `Cargo.toml` → `[dependencies]` and `[dev-dependencies]`
86
+
87
+ **Pre-import gate** (BEFORE writing import statements, not just after):
88
+ 1. If the agent is ABOUT to import a package → check manifest FIRST
89
+ 2. If package is NOT in manifest → output install command before writing the import:
90
+ ```
91
+ ⚠ Package '<name>' not in dependencies. Install first:
92
+ npm install <name> # JS/TS
93
+ pip install <name> # Python
94
+ cargo add <name> # Rust
95
+ ```
96
+ 3. If package IS in manifest → proceed with import
97
+
98
+ **Post-import verification** (after code is written):
99
+ - If package is **not listed** in the manifest → mark as **BLOCK** (phantom dependency)
100
+ - If package is listed but not installed (no lockfile entry) → mark as **WARN** (not yet installed)
86
101
 
87
102
  Also check for typosquatting: if package name has edit distance ≤ 2 from a known popular package (axios/axois, lodash/lodahs, react/recat), mark as **SUSPICIOUS**.
88
103
 
@@ -3,7 +3,7 @@ name: plan
3
3
  description: Create structured implementation plans from requirements. Produces master plan + phase files for enterprise-scale project management. Master plan = overview (<80 lines). Phase files = execution detail (<150 lines each). Each session handles 1 phase. Uses opus for deep reasoning.
4
4
  metadata:
5
5
  author: runedev
6
- version: "0.4.0"
6
+ version: "0.6.0"
7
7
  layer: L2
8
8
  model: opus
9
9
  group: creation
@@ -149,6 +149,46 @@ Phase decomposition rules:
149
149
  - **Dependencies before consumers**: create what's imported before the importer
150
150
  - **Test alongside**: each phase includes its own test tasks
151
151
  - **Max 5-7 tasks per phase**: if more, split the phase
152
+ - **Vertical slices over horizontal layers**: prefer "auth end-to-end" over "all models → all APIs → all UI"
153
+
154
+ ### Wave-Based Task Grouping (within each phase)
155
+
156
+ Tasks inside a phase MUST be organized into **waves** based on dependency analysis. Independent tasks within the same wave can execute in parallel.
157
+
158
+ ```
159
+ ## Tasks
160
+
161
+ ### Wave 1 (parallel — no dependencies)
162
+ - [ ] Task 1 — Create types/interfaces
163
+ - File: `src/types.ts` (new)
164
+ - ...
165
+ - [ ] Task 2 — Create validation schema
166
+ - File: `src/validation.ts` (new)
167
+ - ...
168
+
169
+ ### Wave 2 (depends on Wave 1)
170
+ - [ ] Task 3 — Implement core logic (imports types from Task 1)
171
+ - File: `src/core.ts` (new)
172
+ - depends_on: [Task 1]
173
+ - ...
174
+
175
+ ### Wave 3 (depends on Wave 2)
176
+ - [ ] Task 4 — Wire into API endpoint (imports core from Task 3)
177
+ - File: `src/routes/api.ts` (modify)
178
+ - depends_on: [Task 3]
179
+ - ...
180
+ - [ ] Task 5 — Write integration tests (tests core from Task 3)
181
+ - File: `tests/core.test.ts` (new)
182
+ - depends_on: [Task 3]
183
+ - ...
184
+ ```
185
+
186
+ **Wave rules:**
187
+ - Wave 1 = tasks with zero dependencies (types, schemas, configs) — always first
188
+ - Subsequent waves: a task goes in the earliest wave where ALL its `depends_on` tasks are in prior waves
189
+ - Tasks within the same wave have NO dependencies on each other → safe for parallel dispatch
190
+ - `depends_on` field is MANDATORY for Wave 2+ tasks — explicit is better than implicit
191
+ - `team` orchestrator can dispatch wave tasks as parallel subagents; solo `cook` executes sequentially within a wave but respects wave ordering
152
192
 
153
193
  ### Step 4 — Write Master Plan File
154
194
 
@@ -188,6 +228,52 @@ Save to `.rune/plan-<feature>.md`:
188
228
 
189
229
  **Max 80 lines.** No implementation details — that's what phase files are for.
190
230
 
231
+ ### Step 4.5 — Workflow Registry (Complex Features Only)
232
+
233
+ > From agency-agents (msitarzewski/agency-agents, 50.8k★): "Every route is an entry point. Every worker is a workflow. If it's missing from the registry, it doesn't exist."
234
+
235
+ For complex features (4+ phases OR 3+ user-facing workflows), build a **4-view Workflow Registry** before writing phase files. This catches missing pieces, dead ends, and integration gaps at plan time — not implementation time.
236
+
237
+ **Skip conditions**: trivial tasks, inline plans, single-workflow features.
238
+
239
+ **4 cross-referenced views:**
240
+
241
+ ```markdown
242
+ ## Workflow Registry
243
+
244
+ ### View 1: By Workflow
245
+ | Workflow | Entry Point | Components Touched | Exit Point | Phase |
246
+ |----------|-------------|-------------------|------------|-------|
247
+ | User signup | POST /auth/register | AuthService, UserRepo, EmailService | 201 + email sent | Phase 1 |
248
+ | Password reset | POST /auth/reset | AuthService, EmailService, TokenRepo | 200 + reset email | Phase 2 |
249
+
250
+ ### View 2: By Component
251
+ | Component | Used By Workflows | Owner Phase | Status |
252
+ |-----------|-------------------|-------------|--------|
253
+ | AuthService | signup, login, reset | Phase 1 | Planned |
254
+ | EmailService | signup, reset, invite | Phase 2 | Planned |
255
+ | TokenRepo | reset, invite | Phase 2 | Missing ← RED FLAG |
256
+
257
+ ### View 3: By User Journey
258
+ | Journey | Steps (workflow chain) | Happy Path | Error Path |
259
+ |---------|----------------------|------------|------------|
260
+ | New user → first action | signup → verify email → login → onboard | 4 steps | signup fail, email bounce |
261
+
262
+ ### View 4: By State
263
+ | Step | User Sees | DB State | Logs | Operator Sees |
264
+ |------|-----------|----------|------|---------------|
265
+ | After signup | "Check your email" | user.status=pending | user.created event | New user in admin |
266
+ | After verify | Dashboard | user.status=active | user.verified event | Active user count +1 |
267
+ ```
268
+
269
+ **Validation rules:**
270
+ - Every component in View 2 MUST appear in at least one workflow in View 1 — orphaned components = dead code
271
+ - Every workflow in View 1 MUST map to a phase — unphased workflows will be forgotten
272
+ - "Missing" status in View 2 = **red flag** — component needed but not planned in any phase → add to a phase or create new phase
273
+ - Every user journey step in View 3 MUST have a corresponding state row in View 4
274
+
275
+ **Output**: Add the registry to the master plan file (it fits within the 80-line budget when tables are compact). Phase files reference it but don't duplicate it.
276
+
191
277
  ### Step 5 — Write Phase Files
192
278
 
193
279
  For each phase, save to `.rune/plan-<feature>-phase<N>.md`.
@@ -519,7 +605,10 @@ Max 200 lines. Self-contained — coder needs ONLY this file.
519
605
  | Phase with zero test tasks | CRITICAL | HARD-GATE rejects it |
520
606
  | 10+ phases overwhelming the master plan | MEDIUM | Max 8 phases — split into sub-projects if more |
521
607
  | Task without File path or Verify command | HIGH | Every task MUST have File + Test + Verify + Commit fields — no vague "implement the feature" tasks |
608
+ | Horizontal layer planning (all models → all APIs → all UI) | HIGH | Vertical slices parallelize better. Use wave-based grouping: independent tasks in same wave, dependent tasks in later waves |
609
+ | Tasks without `depends_on` in Wave 2+ | MEDIUM | Implicit dependencies break parallel dispatch. Every Wave 2+ task MUST declare `depends_on` |
522
610
  | Plan ignores locked Decisions from BA | CRITICAL | Decision Compliance section cross-checks requirements.md — locked decisions are non-negotiable |
611
+ | Complex feature missing Workflow Registry — components planned but never wired | HIGH | Step 4.5: 4-view registry catches orphaned components, unphased workflows, and missing state transitions before phase files are written |
523
612
 
524
613
  ## Done When
525
614
 
@@ -380,6 +380,7 @@ LOW — style inconsistency, naming suggestion, minor refactor opportunity
380
380
  | Treating purple/indigo accent as "just a color choice" | MEDIUM | It is a documented AI-generated UI signature — always flag for domain justification |
381
381
  | Suggesting "add X" without checking if X is used | MEDIUM | YAGNI pushback: grep codebase for the suggested feature → if uncalled anywhere → respond "Not called anywhere. Remove? (YAGNI)". Valid pushback, not laziness |
382
382
  | Adding abstractions "for future flexibility" | MEDIUM | Three similar lines > premature abstraction. Only abstract when there are 3+ concrete callers today |
383
+ | Missing cross-phase integration check at phase boundary | MEDIUM | When reviewing a phase completion: check orphaned exports, uncalled routes, auth gaps, E2E flow continuity. Delegate to completion-gate Step 4.5 |
383
384
 
384
385
  ## Done When
385
386
 
@@ -3,7 +3,7 @@ name: sentinel-env
3
3
  description: Environment-aware pre-flight check. Validates OS, runtime versions, installed tools, port availability, env vars, and disk space BEFORE coding starts. Prevents "works on my machine" failures. Like sentinel but for the environment, not the code.
4
4
  metadata:
5
5
  author: runedev
6
- version: "0.1.0"
6
+ version: "0.2.0"
7
7
  layer: L3
8
8
  model: haiku
9
9
  group: validation
@@ -111,6 +111,34 @@ Detect and verify tools the project depends on:
111
111
  4. **Database tools**: Check if `prisma`, `drizzle`, `alembic`, `django` migrations exist → verify DB client installed
112
112
  5. **Build tools**: Check for `turbo.json` (turborepo), `nx.json` (Nx), `Makefile`, etc.
113
113
 
114
+ 6. **Hard dependencies** — tools the project WRAPS (not just uses as dev dependency):
115
+ > From CLI-Anything (HKUDS/CLI-Anything, 17.4k★): "The software is a required dependency, not optional."
116
+
117
+ Scan for evidence that the project wraps an external tool:
118
+ - `Grep` for `shutil.which(`, `which `, `command -v ` → project looks up an executable at runtime
119
+ - `Grep` for `subprocess.run(`, `child_process.exec(`, `Deno.Command(` → project invokes external CLI
120
+ - `Read` README/docs for "requires X installed" or "depends on X"
121
+
122
+ For each detected hard dependency:
123
+ ```bash
124
+ # Verify the tool exists on PATH
125
+ which <tool-name> 2>/dev/null || echo "MISSING: <tool-name>"
126
+ # If found, check version
127
+ <tool-name> --version 2>/dev/null
128
+ ```
129
+
130
+ **Verdict:**
131
+ - Tool found on PATH → PASS (log version)
132
+ - Tool NOT found → **BLOCK** with clear install instructions per OS:
133
+ ```
134
+ [ENV-XXX] Required tool '<tool>' not found on PATH
135
+ → Debian/Ubuntu: sudo apt install <tool>
136
+ → macOS: brew install <tool>
137
+ → Windows: winget install <tool> (or choco install <tool>)
138
+ → Manual: <download URL if known>
139
+ ```
140
+ - This prevents the entire class of "it worked in CI but not locally" failures where `subprocess.run()` silently fails
141
+
114
142
  ### Step 4: Port Availability Check
115
143
 
116
144
  Detect which ports the project needs and check if they're available:
@@ -210,6 +238,8 @@ For each finding, include a specific remediation command the developer can copy-
210
238
  | .env file contains secrets — accidentally logged | CRITICAL | NEVER read .env values, only check key existence via grep for key names |
211
239
  | Platform detection wrong — WSL vs native Windows | MEDIUM | Check for WSL explicitly (`uname -r` contains "microsoft") |
212
240
  | Over-checking — flagging optional tools as required | MEDIUM | Only check tools evidenced by config files, not speculative |
241
+ | Missing hard dependency — project wraps external CLI but tool not checked | HIGH | Step 3.6: scan for `shutil.which`, `subprocess.run`, `child_process.exec` → verify tool exists on PATH |
242
+ | Hard dep found but wrong version — tool exists but API changed | MEDIUM | Log version for manual review. Version compatibility is project-specific — don't guess |
213
243
 
214
244
  ## Done When
215
245
 
@@ -5,7 +5,7 @@ context: fork
5
5
  agent: general-purpose
6
6
  metadata:
7
7
  author: runedev
8
- version: "0.4.0"
8
+ version: "0.5.0"
9
9
  layer: L1
10
10
  model: opus
11
11
  group: orchestrator
@@ -152,7 +152,11 @@ Mark todo[1] `in_progress`.
152
152
 
153
153
  **2a. Launch parallel streams.**
154
154
 
155
- Launch independent streams (depends_on: []) in parallel using Task tool with worktree isolation:
155
+ Launch independent streams (depends_on: []) in parallel using Task tool with worktree isolation.
156
+
157
+ > From agency-agents (msitarzewski/agency-agents, 50.8k★): "Structured handoff docs prevent the #1 multi-agent failure: context loss between agents."
158
+
159
+ Each stream receives a **NEXUS Handoff Template** — not a bare prompt:
156
160
 
157
161
  ```
158
162
  For each stream where depends_on == []:
@@ -160,22 +164,54 @@ For each stream where depends_on == []:
160
164
  subagent_type: "general-purpose",
161
165
  model: "sonnet",
162
166
  isolation: "worktree",
163
- prompt: "Cook task: [stream.task]. Files in scope: [stream.files]. Return cook report on completion."
167
+ prompt: <NEXUS Handoff below>
164
168
  )
165
169
  ```
166
170
 
171
+ **NEXUS Handoff Template** (sent to each cook instance):
172
+
173
+ ```markdown
174
+ ## NEXUS Handoff: Stream [id]
175
+
176
+ ### Metadata
177
+ - Stream: [id] of [total]
178
+ - Depends on: [none | stream ids]
179
+ - File ownership: [list — ONLY these files may be modified]
180
+ - Model: sonnet
181
+
182
+ ### Context
183
+ - Project: [project name and type]
184
+ - Overall goal: [1-line feature description]
185
+ - This stream's goal: [specific sub-task]
186
+ - Conventions: [key patterns from scout — naming, file structure, test framework]
187
+
188
+ ### Deliverable
189
+ - [ ] [specific outcome 1 — e.g., "AuthService with login/register/reset methods"]
190
+ - [ ] [specific outcome 2 — e.g., "Unit tests covering happy path + 3 error cases"]
191
+ - [ ] [specific outcome 3 — e.g., "Types exported for Phase 2 consumers"]
192
+
193
+ ### Quality Expectations
194
+ - Tests: must pass with evidence (stdout captured)
195
+ - Types: no `any`, strict mode
196
+ - Security: no hardcoded secrets, parameterized queries
197
+ - Conventions: [project-specific — from scout output]
198
+
199
+ ### Evidence Required
200
+ Return a Cook Report with:
201
+ - Exact files modified (git diff --stat)
202
+ - Test output (stdout — not just "tests pass")
203
+ - Any CONCERNS discovered during implementation
204
+ ```
205
+
167
206
  **2b. Launch dependent streams sequentially.**
168
207
 
169
208
  ```
170
209
  For each stream where depends_on != []:
171
210
  WAIT for all depends_on streams to complete.
172
- Then launch:
173
- Task(
174
- subagent_type: "general-purpose",
175
- model: "sonnet",
176
- isolation: "worktree",
177
- prompt: "Cook task: [stream.task]. Files in scope: [stream.files]. Patterns from stream [depends_on] are available in worktree. Return cook report."
178
- )
211
+ Then launch with NEXUS Handoff that includes:
212
+ - Completed stream's deliverables as "Available Context"
213
+ - Exported interfaces/types from prior streams in "Code Contracts" section
214
+ - Any CONCERNS from prior streams in "Known Issues" section
179
215
  ```
180
216
 
181
217
  **2b.5. Pre-merge scope verification.**
@@ -367,16 +403,24 @@ Mark todo[4] `completed`.
367
403
  - **Duration**: [time across streams]
368
404
 
369
405
  ### Streams
370
- | Stream | Task | Status | Cook Report |
371
- |--------|------|--------|-------------|
372
- | A | [task] | complete | [summary] |
373
- | B | [task] | complete | [summary] |
374
- | C | [task] | complete | [summary] |
406
+ | Stream | Task | Status | Deliverables | Concerns |
407
+ |--------|------|--------|-------------|----------|
408
+ | A | [task] | DONE | 3/3 delivered | None |
409
+ | B | [task] | DONE_WITH_CONCERNS | 2/2 delivered | Perf regression on large input |
410
+ | C | [task] | DONE | 2/2 delivered | None |
411
+
412
+ ### Acceptance Criteria
413
+ | # | Criterion | Stream | Evidence | Verdict |
414
+ |---|-----------|--------|----------|---------|
415
+ | 1 | Auth endpoints return JWT | A | Test stdout: "3 passed" | PASS |
416
+ | 2 | No SQL injection | A | Sentinel: PASS | PASS |
417
+ | 3 | Dashboard loads < 2s | B | No perf test run | UNVERIFIED |
375
418
 
376
419
  ### Integration
377
420
  - Merge conflicts: [count]
378
421
  - Integration tests: [passed]/[total]
379
422
  - Coverage: [%]
423
+ - Unresolved concerns: [count — from DONE_WITH_CONCERNS streams]
380
424
  ```
381
425
 
382
426
  ---
@@ -405,6 +449,8 @@ Known failure modes for this skill. Check these before declaring done.
405
449
  | Agent modified files outside declared scope | HIGH | Pre-merge scope verification in Phase 2b.5 — flag before merge, not after |
406
450
  | Merge failure with no rollback path | HIGH | pre-team-merge tag created before merges — git reset --hard on failure |
407
451
  | Poisoned cook report merged blindly | HIGH | Phase 3a.5 integrity-check on all cook reports before merge |
452
+ | Bare prompt to cook instance — no context, conventions, or scope boundary | HIGH | NEXUS Handoff Template: structured handoff with metadata, deliverables, quality expectations, and evidence requirements |
453
+ | Cook returns "done" with no acceptance criteria tracking | MEDIUM | Team Report includes Acceptance Criteria table with per-criterion evidence and PASS/FAIL/UNVERIFIED verdict |
408
454
 
409
455
  ## Done When
410
456
 
@@ -3,7 +3,7 @@ name: test
3
3
  description: "TDD test writer. Writes failing tests FIRST (red), then verifies they pass after implementation (green). Covers unit, integration, and e2e tests."
4
4
  metadata:
5
5
  author: runedev
6
- version: "0.4.0"
6
+ version: "0.5.0"
7
7
  layer: L2
8
8
  model: sonnet
9
9
  group: development
@@ -168,15 +168,73 @@ Input: git diff main --name-only
168
168
  Output: Prioritized test plan targeting only affected paths
169
169
  ```
170
170
 
171
- ## Test Types
171
+ ## Test Types — 4-Layer Methodology
172
172
 
173
- | Type | When | Framework | Speed |
174
- |------|------|-----------|-------|
175
- | Unit | Individual functions, pure logic | jest/vitest/pytest/cargo test | Fast |
176
- | Integration | API endpoints, DB operations | supertest/httpx/reqwest | Medium |
177
- | E2E | Critical user flows | Playwright/Cypress via browser-pilot | Slow |
178
- | Regression | After bug fixes | Same as unit | Fast |
179
- | Diff-aware | After implementation, large codebases | Same as unit + integration | Fast (targeted) |
173
+ Tests are organized in 4 layers. Each layer catches a different failure class. Higher layers are slower but catch integration issues lower layers miss.
174
+
175
+ | Layer | Type | What It Catches | Framework | Speed |
176
+ |-------|------|-----------------|-----------|-------|
177
+ | L1 | **Unit** | Logic bugs, boundary violations, pure function errors | jest/vitest/pytest/cargo test | Fast |
178
+ | L2 | **Integration** | API contract breaks, DB query errors, service interaction failures | supertest/httpx/reqwest | Medium |
179
+ | L3 | **True Backend** | Real tool/service output correctness (not just exit 0) | Same + real software invocation | Medium-Slow |
180
+ | L4 | **E2E / Subprocess** | Full workflow from user/agent perspective, installed app works | Playwright/Cypress/subprocess | Slow |
181
+
182
+ **Layer rules:**
183
+ - **L1 (Unit)**: Synthetic data, no external deps. Every function tested in isolation. Fast, deterministic, CI-friendly
184
+ - **L2 (Integration)**: Tests service boundaries — API endpoints, DB operations, message queues. May need test DB or mock server
185
+ - **L3 (True Backend)**: **Invokes the REAL tool/service** and verifies output programmatically. No graceful degradation — if the dependency isn't installed, tests FAIL (not skip). Verify: magic bytes, file size > 0, content structure. Print artifact paths for manual inspection
186
+ - **L4 (E2E/Subprocess)**: Tests the installed command/app via subprocess or browser automation. Full user workflow: input → process → output → verify
187
+
188
+ **"No graceful degradation" rule** (L3/L4): Hard dependencies MUST be installed. Tests MUST NOT skip or produce fake results when the dependency is missing. A silently skipping test is worse than a loudly failing test.
189
+
190
+ Additional modes:
191
+
192
+ | Type | When | Speed |
193
+ |------|------|-------|
194
+ | Regression | After bug fixes | Fast |
195
+ | Diff-aware | After implementation, large codebases (Phase 6.5) | Fast (targeted) |
196
+
197
+ ## TEST.md — Test Plan + Results Document
198
+
199
+ For non-trivial features (3+ test files or 20+ test cases), create a `TEST.md` in the test directory. This is BOTH a planning doc (written BEFORE tests) and results doc (appended AFTER tests pass).
200
+
201
+ ### Before writing tests — write the plan:
202
+ ```markdown
203
+ # Test Plan: [Feature Name]
204
+
205
+ ## Test Inventory
206
+ - `test_core.py`: ~XX unit tests planned (L1)
207
+ - `test_integration.py`: ~XX integration tests planned (L2)
208
+ - `test_e2e.py`: ~XX E2E tests planned (L3/L4)
209
+
210
+ ## Unit Test Plan (L1)
211
+ | Module | Functions | Edge Cases | Est. Tests |
212
+ |--------|-----------|------------|------------|
213
+ | `core/auth.py` | login, register, refresh | expired token, invalid creds, rate limit | 12 |
214
+
215
+ ## E2E Scenarios (L3/L4)
216
+ | Workflow | Simulates | Operations | Verified |
217
+ |----------|-----------|------------|----------|
218
+ | User signup | New user onboarding | register → verify → login | Token valid, profile created |
219
+
220
+ ## Realistic Workflow Scenarios
221
+ - **[Name]**: [Step 1] → [Step 2] → verify [output properties]
222
+ ```
223
+
224
+ ### After tests pass — append results:
225
+ ```markdown
226
+ ## Test Results
227
+ [Paste full `pytest -v --tb=no` or `npm test` output]
228
+
229
+ ## Summary
230
+ - Total: XX | Passed: XX | Failed: 0
231
+ - Execution time: X.Xs | Coverage: XX%
232
+
233
+ ## Gaps
234
+ - [Areas not covered and why]
235
+ ```
236
+
237
+ **Why TEST.md**: Planning tests before code catches missing edge cases early. Appending results creates permanent evidence. One document = complete testing story.
180
238
 
181
239
  ## Error Recovery
182
240
 
@@ -3,7 +3,7 @@ name: verification
3
3
  description: "Universal verification runner. Runs lint, type-check, tests, and build. Use after any code change to verify nothing is broken."
4
4
  metadata:
5
5
  author: runedev
6
- version: "0.4.0"
6
+ version: "0.5.0"
7
7
  layer: L3
8
8
  model: haiku
9
9
  group: validation
@@ -233,6 +233,33 @@ Overall: [PASS/FAIL]
233
233
  - Unwired: [files that failed Level 3 with 0 consumers]
234
234
  ```
235
235
 
236
+ ## Output Completion Enforcement
237
+
238
+ > From taste-skill (Leonxlnx/taste-skill, 3.4k★): Truncated code is worse than no code — it passes reviews but breaks at runtime.
239
+
240
+ When verifying code files (Level 2 SUBSTANTIVE check), also scan for **truncation patterns** — signs that the agent generated partial output and stopped:
241
+
242
+ | Banned Pattern | Language | What It Means |
243
+ |---|---|---|
244
+ | `// ...` or `/* ... */` as a statement | JS/TS | Agent truncated remaining code |
245
+ | `# ...` as a statement (not comment) | Python | Agent truncated |
246
+ | `// rest of code` / `// remaining implementation` | Any | Explicit truncation admission |
247
+ | `// TODO: implement` as sole function body | Any | Placeholder, not implementation |
248
+ | `{ /* same as above */ }` | JS/TS | Copy-paste truncation |
249
+ | `...` (bare ellipsis, not spread operator) | JS/TS/Python | Truncation marker |
250
+ | `[PAUSED]` / `[CONTINUED]` in source | Any | Agent session marker leaked into code |
251
+
252
+ **Action on detection:**
253
+ - Mark file as TRUNCATED (distinct from STUB) in Verification Report
254
+ - TRUNCATED files are Level 2 FAIL — they CANNOT pass verification
255
+ - Report the specific line number and pattern detected
256
+ - If agent claims "done" with truncated files → REJECTED by Evidence-Before-Claims gate
257
+
258
+ **Continuation protocol** — if the agent hit output limits mid-file:
259
+ - Agent MUST log: `[PAUSED — X of Y functions complete]` in its response (NOT in the code file)
260
+ - Agent MUST resume and complete the file in the next turn
261
+ - Verification re-runs after completion to clear the TRUNCATED flag
262
+
236
263
  ## Evidence-Before-Claims Gate
237
264
 
238
265
  <HARD-GATE>
@@ -284,6 +311,7 @@ Known failure modes for this skill. Check these before declaring done.
284
311
  | Trusting exit code 0 without output verification | CRITICAL | Artifact Verification HARD-GATE: always confirm success indicator in stdout (pass count, "0 errors", output file exists) |
285
312
  | Existence Theater — file exists but is a stub | HIGH | 3-Level check: Level 2 scans for stub patterns (`<div>Placeholder</div>`, `return null`, `NotImplementedError`) |
286
313
  | Dead code — file created but never imported/used | MEDIUM | 3-Level check: Level 3 greps for consumers. 0 importers = UNWIRED |
314
+ | Truncated code — agent hit output limit mid-file | HIGH | Output Completion Enforcement: scan for `// ...`, `// rest of code`, bare ellipsis patterns. TRUNCATED = Level 2 FAIL |
287
315
 
288
316
  ## Done When
289
317