@rune-kit/rune 2.29.1 → 2.30.1
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/.codex-plugin/plugin.json +1 -1
- package/README.md +11 -3
- package/agents/audit.md +1 -1
- package/agents/cook.md +1 -1
- package/agents/journal.md +1 -1
- package/agents/reviewer.md +23 -1
- package/agents/session-bridge.md +1 -1
- package/agents/skill-forge.md +1 -1
- package/agents/skill-router.md +1 -1
- package/agents/trend-scout.md +1 -1
- package/agents/worktree.md +1 -1
- package/compiler/__tests__/skill-attribution.test.js +109 -0
- package/compiler/emitter.js +1 -1
- package/hooks/context-watch/index.cjs +5 -8
- package/hooks/hooks.json +1 -1
- package/hooks/intent-router/index.cjs +9 -6
- package/hooks/lib/hook-output.cjs +7 -1
- package/hooks/lib/hook-stdin.cjs +52 -0
- package/hooks/metrics-collector/index.cjs +5 -8
- package/hooks/pre-tool-guard/index.cjs +6 -6
- package/hooks/quarantine/index.cjs +12 -21
- package/package.json +4 -3
- package/skill-index.json +2187 -0
- package/skills/audit/SKILL.md +3 -3
- package/skills/completion-gate/SKILL.md +1 -1
- package/skills/constraint-check/SKILL.md +1 -1
- package/skills/context-engine/SKILL.md +2 -2
- package/skills/cook/SKILL.md +2 -2
- package/skills/cook/references/loop-detection.md +1 -1
- package/skills/cook/references/mid-run-signals.md +1 -1
- package/skills/debug/SKILL.md +2 -2
- package/skills/dependency-doctor/SKILL.md +1 -1
- package/skills/design/SKILL.md +1 -1
- package/skills/docs/SKILL.md +1 -1
- package/skills/docs-seeker/SKILL.md +3 -0
- package/skills/hallucination-guard/SKILL.md +2 -2
- package/skills/incident/SKILL.md +1 -1
- package/skills/integrity-check/SKILL.md +1 -1
- package/skills/launch/SKILL.md +1 -1
- package/skills/preflight/SKILL.md +35 -9
- package/skills/rescue/SKILL.md +1 -1
- package/skills/research/SKILL.md +1 -1
- package/skills/review/SKILL.md +135 -84
- package/skills/review/references/rules/config.md +63 -0
- package/skills/review/references/rules/default.md +57 -0
- package/skills/review/references/rules/go.md +65 -0
- package/skills/review/references/rules/index.md +43 -0
- package/skills/review/references/rules/python.md +64 -0
- package/skills/review/references/rules/rust.md +65 -0
- package/skills/review/references/rules/sql.md +65 -0
- package/skills/review/references/rules/ts-js.md +80 -0
- package/skills/sast/SKILL.md +1 -1
- package/skills/scout/SKILL.md +3 -0
- package/skills/sentinel/SKILL.md +29 -6
- package/skills/skill-router/SKILL.md +1 -1
- package/skills/team/SKILL.md +2 -2
- package/skills/verification/SKILL.md +3 -4
- package/skills/watchdog/SKILL.md +1 -1
package/skills/audit/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ metadata:
|
|
|
5
5
|
author: runedev
|
|
6
6
|
version: "0.5.0"
|
|
7
7
|
layer: L2
|
|
8
|
-
model:
|
|
8
|
+
model: opus
|
|
9
9
|
group: quality
|
|
10
10
|
tools: "Read, Bash, Glob, Grep"
|
|
11
11
|
emit: audit.complete
|
|
@@ -585,7 +585,7 @@ LOW — Nice to have. Style inconsistencies, minor refactors, doc gaps.
|
|
|
585
585
|
INFO — Observation only. Architecture notes, tech debt acknowledgment.
|
|
586
586
|
```
|
|
587
587
|
|
|
588
|
-
Apply
|
|
588
|
+
Apply the Falsification Pass (`../review/SKILL.md` → Step 6): drop a finding only when what you read contains direct counter-evidence against its key claim — never merely because you are unsure. A finding you cannot disprove is reported and typed `ASSUMED` with the unchecked premise named. Consolidate similar issues (e.g., "12 functions missing error handling in src/services/" — not 12 separate findings). Adapt judgment to project type (a `console.log` in a CLI tool is fine; in a production API handler, it's not).
|
|
589
589
|
|
|
590
590
|
## Output Format
|
|
591
591
|
|
|
@@ -644,7 +644,7 @@ Report saved to: AUDIT-REPORT.md
|
|
|
644
644
|
|
|
645
645
|
1. MUST complete all 8 phases (Phase 8 may report "no data" if .rune/metrics/ doesn't exist yet) — if any phase is skipped, state explicitly which phase and why
|
|
646
646
|
2. MUST delegate Phase 1 to dependency-doctor and Phase 2 to sentinel — no manual replacements
|
|
647
|
-
3. MUST apply
|
|
647
|
+
3. MUST apply the Falsification Pass — drop findings only on direct counter-evidence, never on uncertainty; consolidate similar issues
|
|
648
648
|
4. MUST include at least 3 positive findings — an audit with no positives is incomplete
|
|
649
649
|
5. MUST produce quantified health scores (1-10 per dimension) — not vague "needs work"
|
|
650
650
|
6. MUST NOT fabricate findings — every finding requires a specific file:line citation
|
|
@@ -6,7 +6,7 @@ metadata:
|
|
|
6
6
|
author: runedev
|
|
7
7
|
version: "1.3.0"
|
|
8
8
|
layer: L3
|
|
9
|
-
model:
|
|
9
|
+
model: sonnet
|
|
10
10
|
group: state
|
|
11
11
|
tools: "Read, Glob, Grep"
|
|
12
12
|
emit: context.preview, output.density.set
|
|
@@ -321,7 +321,7 @@ When ORANGE or RED is reached, use this table to determine whether compaction is
|
|
|
321
321
|
|
|
322
322
|
### Mid-Loop Compaction (Phase 4 Emergency)
|
|
323
323
|
|
|
324
|
-
|
|
324
|
+
Compact during the run, not just at the session boundary.
|
|
325
325
|
|
|
326
326
|
When context hits RED during Phase 4 (implementation), compaction IS possible at **clean split points**:
|
|
327
327
|
|
package/skills/cook/SKILL.md
CHANGED
|
@@ -640,7 +640,7 @@ Escalation chain: debug-fix (3x) → re-plan (1x) → brainstorm rescue (1x) →
|
|
|
640
640
|
|
|
641
641
|
### Structured Escalation Report
|
|
642
642
|
|
|
643
|
-
|
|
643
|
+
After 3 retry failures, structured escalation prevents cargo-cult retrying.
|
|
644
644
|
|
|
645
645
|
When escalation chain exhausts (all retries hit) or cook returns `BLOCKED`, produce a Structured Escalation Report instead of a vague "I can't do this":
|
|
646
646
|
|
|
@@ -678,7 +678,7 @@ When escalation chain exhausts (all retries hit) or cook returns `BLOCKED`, prod
|
|
|
678
678
|
|
|
679
679
|
### Subagent Question Gate
|
|
680
680
|
|
|
681
|
-
|
|
681
|
+
Subagents that start work without asking questions frequently produce the wrong thing.
|
|
682
682
|
|
|
683
683
|
Before dispatching a sub-skill (fix, test, review) for a non-trivial task (3+ files OR ambiguous scope):
|
|
684
684
|
|
|
@@ -4,7 +4,7 @@ The Analysis Paralysis Guard (5-read counter in SKILL.md) catches obvious paraly
|
|
|
4
4
|
This catches **same-input-same-output loops** — where the agent keeps calling the same tool
|
|
5
5
|
with the same arguments and getting the same result, making zero progress.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Hash-based detection distinguishes true stuck loops from productive retries.
|
|
8
8
|
|
|
9
9
|
## Detection Logic
|
|
10
10
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Mid-Run Signal Detection — Two-Stage Intent Classification
|
|
2
2
|
|
|
3
3
|
When user sends a message DURING cook execution (mid-phase), classify intent before acting.
|
|
4
|
-
|
|
4
|
+
Two-stage intent classification prevents expensive LLM calls for simple signals.
|
|
5
5
|
|
|
6
6
|
## Stage 1 — Keyword Fast-Path
|
|
7
7
|
|
package/skills/debug/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ metadata:
|
|
|
5
5
|
author: runedev
|
|
6
6
|
version: "1.4.0"
|
|
7
7
|
layer: L2
|
|
8
|
-
model:
|
|
8
|
+
model: opus
|
|
9
9
|
group: development
|
|
10
10
|
tools: "Read, Bash, Glob, Grep"
|
|
11
11
|
emit: bug.diagnosed, agent.stuck
|
|
@@ -282,7 +282,7 @@ Track fix attempts in the Debug Report. If this is attempt N>1 for the same symp
|
|
|
282
282
|
|
|
283
283
|
### 3+ Fixes as Architectural Signal
|
|
284
284
|
|
|
285
|
-
|
|
285
|
+
Each fix revealing new problems elsewhere is a structural issue, not a bug hunt.
|
|
286
286
|
|
|
287
287
|
When 3+ **distinct** fixes fail (not retries of the same fix), STOP treating it as a bug:
|
|
288
288
|
|
package/skills/design/SKILL.md
CHANGED
package/skills/docs/SKILL.md
CHANGED
|
@@ -177,7 +177,7 @@ Delegate to `rune:git changelog` to produce a changelog entry from commits since
|
|
|
177
177
|
|
|
178
178
|
#### Step 4 — Cross-Doc Consistency Pass
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
Cross-document consistency prevents the second-most-common docs problem: docs that exist but contradict each other.
|
|
181
181
|
|
|
182
182
|
After updating any doc, verify consistency across all project documentation:
|
|
183
183
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: docs-seeker
|
|
3
3
|
description: "Find documentation for APIs, libraries, and error messages. Looks up official docs, changelog entries, and migration guides."
|
|
4
|
+
context: fork
|
|
5
|
+
agent: general-purpose
|
|
6
|
+
model: haiku
|
|
4
7
|
metadata:
|
|
5
8
|
author: runedev
|
|
6
9
|
version: "0.2.0"
|
|
@@ -5,7 +5,7 @@ metadata:
|
|
|
5
5
|
author: runedev
|
|
6
6
|
version: "0.3.0"
|
|
7
7
|
layer: L3
|
|
8
|
-
model:
|
|
8
|
+
model: sonnet
|
|
9
9
|
group: validation
|
|
10
10
|
tools: "Read, Bash, Glob, Grep"
|
|
11
11
|
---
|
|
@@ -78,7 +78,7 @@ If export not found → mark as **WARN** (symbol may not be exported).
|
|
|
78
78
|
|
|
79
79
|
### Step 3 — Verify external packages (Dependency Check Before Import)
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
Before importing ANY third-party library, check the dependency manifest.
|
|
82
82
|
|
|
83
83
|
Use `Read` on the project's dependency manifest to confirm each external package is listed:
|
|
84
84
|
|
package/skills/incident/SKILL.md
CHANGED
package/skills/launch/SKILL.md
CHANGED
|
@@ -103,7 +103,7 @@ const permissions = await fetchPermissions(id); // waits unnecessarily
|
|
|
103
103
|
const [user, permissions] = await Promise.all([fetchUser(id), fetchPermissions(id)]);
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
Flag each issue with: file path,
|
|
106
|
+
Flag each issue with: file path, a **verbatim evidence snippet** copied from the file, category (null-deref | missing-await | off-by-one | type-coerce), and a one-line description. Record the snippet, not a line number — Step 6's Anchor Pass resolves the line with `Grep`.
|
|
107
107
|
|
|
108
108
|
### Step 2 — Error Handling
|
|
109
109
|
For every changed file, verify:
|
|
@@ -132,7 +132,7 @@ app.use((err, req, res, next) => {
|
|
|
132
132
|
});
|
|
133
133
|
```
|
|
134
134
|
|
|
135
|
-
Flag each violation with: file path,
|
|
135
|
+
Flag each violation with: file path, a **verbatim evidence snippet**, category (bare-catch | missing-status-check | raw-error-exposure), and description. Same rule as Step 1 — the snippet is what you produce; the line number comes from Step 6's Anchor Pass.
|
|
136
136
|
|
|
137
137
|
### Step 3 — Regression Check
|
|
138
138
|
Use `rune:scout` to identify all files that import or depend on the changed files/functions.
|
|
@@ -337,7 +337,21 @@ Score is appended to the Preflight Report footer. Useful for tracking quality tr
|
|
|
337
337
|
Invoke `rune:sentinel` on the changed files. Attach sentinel's output verbatim under the "Security" section of the preflight report. If sentinel returns BLOCK, preflight verdict is also BLOCK.
|
|
338
338
|
|
|
339
339
|
### Step 6 — Generate Verdict
|
|
340
|
-
|
|
340
|
+
|
|
341
|
+
**Falsification Pass first.** Before aggregating, filter findings by disproof, not by confidence — the same rule `review` applies (`../review/SKILL.md` → Step 6):
|
|
342
|
+
|
|
343
|
+
- **DROP** a finding only when the code you read contains **direct counter-evidence** against its key claim (the null check exists, the `await` is present, the caller validates the input).
|
|
344
|
+
- **KEEP** a finding that depends on context outside the diff which you did read via tools — that context is evidence.
|
|
345
|
+
- **KEEP** a finding you can neither verify nor disprove. "Unsure" is not grounds to drop; only counter-evidence is.
|
|
346
|
+
- Dropped findings are discarded silently, never listed as considered-and-dismissed.
|
|
347
|
+
|
|
348
|
+
Type each surviving finding `OBSERVED | DERIVED | ASSUMED` per `../completion-gate/references/claim-discipline.md`. An `ASSUMED` finding — one resting on a premise you could not check — names that premise and **never escalates the verdict to BLOCK on its own**. It reports as WARN with the premise stated.
|
|
349
|
+
|
|
350
|
+
**Anchor Pass second.** Every finding you collected in Steps 1-4 carries an evidence snippet, not a line number. Resolve each one now via the Anchor Ladder defined in `../review/SKILL.md` → Step 6: `Grep` the exact snippet, retry once whitespace-normalised with the outer lines dropped, and on a second miss mark the finding `UNANCHORED`.
|
|
351
|
+
|
|
352
|
+
`UNANCHORED` behaves here exactly as it does in `review` — downgrade one level (BLOCK → WARN → INFO), report as `path (unanchored)` with the snippet inline, never drop. A finding that will not anchor **cannot carry the BLOCK verdict on its own**, for the same reason an `ASSUMED` one cannot: halting a pipeline on a claim nobody can locate spends the developer's trust faster than the bug would have.
|
|
353
|
+
|
|
354
|
+
Then aggregate all surviving findings:
|
|
341
355
|
- Any BLOCK from sentinel OR a logic issue that would cause data corruption or security bypass OR a dead interactive element (Step 4 cross-layer pairing / Step 4.5 dead-interactive check) OR a BLOCK from any domain hook → overall **BLOCK**
|
|
342
356
|
- Any missing error handling, regression risk with no tests, or incomplete feature (other than the BLOCK cases above) → **WARN**
|
|
343
357
|
- Only style or best-practice suggestions → **PASS**
|
|
@@ -346,18 +360,28 @@ Report PASS, WARN, or BLOCK. For WARN, list each item the developer must acknowl
|
|
|
346
360
|
|
|
347
361
|
## Output Format
|
|
348
362
|
|
|
349
|
-
|
|
363
|
+
````
|
|
350
364
|
## Preflight Report
|
|
351
365
|
- **Status**: PASS | WARN | BLOCK
|
|
352
366
|
- **Files Checked**: [count]
|
|
353
367
|
- **Changes**: +[added] -[removed] lines across [files] files
|
|
368
|
+
- **Unanchored**: [count — findings whose evidence did not resolve to a line]
|
|
354
369
|
|
|
355
370
|
### Logic Issues
|
|
356
|
-
- `path/to/file.ts:42` — null-deref: `user.name` accessed without null check
|
|
357
|
-
|
|
371
|
+
- `path/to/file.ts:42` — [OBSERVED] null-deref: `user.name` accessed without null check
|
|
372
|
+
```ts
|
|
373
|
+
return user.name.trim();
|
|
374
|
+
```
|
|
375
|
+
- `path/to/api.ts (unanchored)` — [ASSUMED: caller in job.ts not read] missing-await: async database call not awaited
|
|
376
|
+
```ts
|
|
377
|
+
db.orders.insert(row);
|
|
378
|
+
```
|
|
358
379
|
|
|
359
380
|
### Error Handling
|
|
360
381
|
- `path/to/handler.ts:20` — bare-catch: error swallowed silently
|
|
382
|
+
```ts
|
|
383
|
+
} catch (e) {}
|
|
384
|
+
```
|
|
361
385
|
|
|
362
386
|
### Regression Risk
|
|
363
387
|
- `utils/format.ts` — changed function used by 5 modules, 2 have tests, 3 untested (WARN)
|
|
@@ -379,12 +403,14 @@ Report PASS, WARN, or BLOCK. For WARN, list each item the developer must acknowl
|
|
|
379
403
|
|
|
380
404
|
### Verdict
|
|
381
405
|
WARN — 3 issues found (0 blocking, 3 must-acknowledge). Resolve before commit or explicitly acknowledge each WARN.
|
|
382
|
-
|
|
406
|
+
````
|
|
407
|
+
|
|
408
|
+
Findings under Logic Issues and Error Handling show their evidence block; the Regression, Completeness, and Coherence sections describe file-level or structural gaps that have no single line to anchor, so they carry a path only.
|
|
383
409
|
|
|
384
410
|
## Constraints
|
|
385
411
|
|
|
386
412
|
1. MUST check: logic errors, error handling, edge cases, type safety, naming conventions
|
|
387
|
-
2. MUST
|
|
413
|
+
2. MUST anchor every line-level finding to a verbatim evidence snippet, resolving the line via the Anchor Pass rather than recall — unresolved findings report `(unanchored)`, downgraded one level, and cannot carry BLOCK alone
|
|
388
414
|
3. MUST NOT skip edge case analysis — "happy path works" is insufficient
|
|
389
415
|
4. MUST verify error messages are user-friendly and don't leak internal details
|
|
390
416
|
5. MUST check that async operations have proper error handling and cleanup
|
|
@@ -424,7 +450,7 @@ WARN — 3 issues found (0 blocking, 3 must-acknowledge). Resolve before commit
|
|
|
424
450
|
- Cross-layer pairing checked (Step 4): every new interactive component's handler chain reaches a real endpoint/service or has an explicit UI-only scope
|
|
425
451
|
- Dead-interactive scan done (Step 4.5 UI hook) on all UI files in the diff
|
|
426
452
|
- Sentinel invoked and its output attached in Security section
|
|
427
|
-
- Structured report emitted with PASS / WARN / BLOCK verdict and
|
|
453
|
+
- Structured report emitted with PASS / WARN / BLOCK verdict, and every line-level finding anchored to a verbatim snippet (or reported `(unanchored)` and downgraded)
|
|
428
454
|
|
|
429
455
|
## Cost Profile
|
|
430
456
|
|
package/skills/rescue/SKILL.md
CHANGED