@codyswann/lisa 2.245.1 → 2.247.0
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/all/create-only/.claude/rules/PROJECT_RULES.md +9 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/SKILL.md +39 -9
- package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +349 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-persist-learning/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-rework-triage/SKILL.md +25 -8
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +23 -3
- package/plugins/lisa/agents/learning-judge.md +1 -1
- package/plugins/lisa/agents/skill-evaluator.md +135 -175
- package/plugins/lisa/commands/learnings/audit.md +6 -0
- package/plugins/lisa/rules/eager/promotion-contract.md +18 -0
- package/plugins/lisa/rules/reference/project-learnings.md +7 -7
- package/plugins/lisa/rules/reference/promotion-contract.md +126 -0
- package/plugins/lisa/skills/lisa-debrief-apply/SKILL.md +39 -9
- package/plugins/lisa/skills/lisa-learnings-audit/SKILL.md +349 -0
- package/plugins/lisa/skills/lisa-learnings-audit/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-parity-skill-creator/SKILL.md +3 -1
- package/plugins/lisa/skills/lisa-persist-learning/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-rework-triage/SKILL.md +25 -8
- package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +24 -4
- package/plugins/lisa-agy/agents/learning-judge.md +1 -1
- package/plugins/lisa-agy/agents/skill-evaluator.md +135 -175
- package/plugins/lisa-agy/commands/lisa/learnings/audit.md +6 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-debrief-apply/SKILL.md +39 -9
- package/plugins/lisa-agy/skills/lisa-learnings-audit/SKILL.md +349 -0
- package/plugins/lisa-agy/skills/lisa-parity-skill-creator/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/lisa-persist-learning/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-rework-triage/SKILL.md +25 -8
- package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +24 -4
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/agents/learning-judge.agent.md +1 -1
- package/plugins/lisa-copilot/agents/skill-evaluator.agent.md +135 -175
- package/plugins/lisa-copilot/commands/lisa/learnings/audit.md +6 -0
- package/plugins/lisa-copilot/rules/eager/promotion-contract.md +18 -0
- package/plugins/lisa-copilot/rules/reference/project-learnings.md +7 -7
- package/plugins/lisa-copilot/rules/reference/promotion-contract.md +126 -0
- package/plugins/lisa-copilot/skills/lisa-debrief-apply/SKILL.md +39 -9
- package/plugins/lisa-copilot/skills/lisa-learnings-audit/SKILL.md +349 -0
- package/plugins/lisa-copilot/skills/lisa-parity-skill-creator/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/lisa-persist-learning/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-rework-triage/SKILL.md +25 -8
- package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +24 -4
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/agents/learning-judge.md +1 -1
- package/plugins/lisa-cursor/agents/skill-evaluator.md +135 -175
- package/plugins/lisa-cursor/commands/lisa/learnings/audit.md +6 -0
- package/plugins/lisa-cursor/rules/project-learnings-reference.mdc +7 -7
- package/plugins/lisa-cursor/rules/promotion-contract-reference.mdc +131 -0
- package/plugins/lisa-cursor/rules/promotion-contract.mdc +23 -0
- package/plugins/lisa-cursor/skills/lisa-debrief-apply/SKILL.md +39 -9
- package/plugins/lisa-cursor/skills/lisa-learnings-audit/SKILL.md +349 -0
- package/plugins/lisa-cursor/skills/lisa-parity-skill-creator/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/lisa-persist-learning/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-rework-triage/SKILL.md +25 -8
- package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +24 -4
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/learning-judge.md +1 -1
- package/plugins/src/base/agents/skill-evaluator.md +135 -175
- package/plugins/src/base/commands/learnings/audit.md +6 -0
- package/plugins/src/base/rules/eager/promotion-contract.md +18 -0
- package/plugins/src/base/rules/reference/project-learnings.md +7 -7
- package/plugins/src/base/rules/reference/promotion-contract.md +126 -0
- package/plugins/src/base/skills/lisa-debrief-apply/SKILL.md +39 -9
- package/plugins/src/base/skills/lisa-learnings-audit/SKILL.md +349 -0
- package/plugins/src/base/skills/lisa-parity-skill-creator/SKILL.md +3 -1
- package/plugins/src/base/skills/lisa-persist-learning/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-rework-triage/SKILL.md +25 -8
- package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +24 -4
|
@@ -1,245 +1,205 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: skill-evaluator
|
|
3
|
-
description:
|
|
3
|
+
description: Six-rung ladder router for candidate learnings. Given a candidate (rule, why, provenance, evidence) it recommends a destination rung — EXECUTABLE-CONTROL | EAGER-RULE | SKILL | WIKI | KEEP-IN-LEDGER | RETIRE — and a scope (project | upstream), with a plain-language rationale and a drafted artifact. Advisory-only — it writes nothing and files nothing; the gardener turns its recommendations into human-gated tracker tickets. Use whenever a flow needs routing judgment about where a piece of knowledge should live.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Ladder Router Agent (skill-evaluator)
|
|
7
7
|
|
|
8
|
-
You are
|
|
8
|
+
You are the shared classifier of the learnings ladder (PRD #1729). Given a candidate learning plus evidence, you recommend **where that knowledge should live and at what enforcement strength** — a destination rung and a scope. You do not judge whether the learning is true (that is `learning-judge`'s job at capture time); you judge where a presumed-valid learning belongs.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Your primary responsibility is to **minimize eager context cost while maximizing enforcement strength**: mechanically checkable invariants become executable controls that cost zero context; the always-loaded eager tier stays small; prose that duplicates machinery is retired.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## The Ladder (governing model)
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
When evaluating content for skill-worthiness, follow this process:
|
|
17
|
-
|
|
18
|
-
### Step 1: Classify the Content Type
|
|
19
|
-
|
|
20
|
-
Identify what you're evaluating:
|
|
14
|
+
Rungs are ordered by context cost and enforcement strength. Decision vocabulary:
|
|
21
15
|
|
|
22
|
-
-
|
|
23
|
-
- **Rule**: A constraint or guideline for how to do something
|
|
24
|
-
- **Workflow**: A multi-step procedure for accomplishing a task
|
|
25
|
-
- **Domain Knowledge**: Specialized expertise in a specific area
|
|
26
|
-
- **Tool Integration**: Instructions for working with specific APIs, formats, or systems
|
|
16
|
+
**EXECUTABLE-CONTROL | EAGER-RULE | SKILL | WIKI | KEEP-IN-LEDGER | RETIRE**
|
|
27
17
|
|
|
28
|
-
|
|
18
|
+
| Rung | Recommendation | Destination | Enters context | Admission policy |
|
|
19
|
+
| --- | --- | --- | --- | --- |
|
|
20
|
+
| 6 | EXECUTABLE-CONTROL | Lint / ast-grep / type / test / hook / `package.lisa.json` force | Never — diagnostic fires on violation | Mechanically decidable + stable + recurred |
|
|
21
|
+
| 5 | EAGER-RULE | Auto-loaded rules tree | Unconditionally, every session | **Earned by failure evidence** (repeated misses despite retrievability); demotion-biased |
|
|
22
|
+
| 4 | SKILL | `.claude/skills/<name>/SKILL.md` | Description eager; body on invoke | Procedural, complex, recognizable trigger |
|
|
23
|
+
| 3 | WIKI | Wiki page + index entry | Only when routed to | Durable reference knowledge |
|
|
24
|
+
| 2 | KEEP-IN-LEDGER | `PROJECT_LEARNINGS.md` (bounded contract projection) | Bounded projection only | Default landing zone; probationary, expiring |
|
|
25
|
+
| — | RETIRE | Nowhere — delete/expire the prose | Never | Redundant with a mechanical owner, stale, or superseded |
|
|
29
26
|
|
|
30
|
-
|
|
27
|
+
Every recommendation also carries the orthogonal scope axis: **`project` | `upstream`** — apply in this repository, or raise to `CodySwannGT/lisa` (labeled `self-hardening` for defects, `template-candidate` for generalizable patterns). Scope never changes the rung; it changes where the promotion work is filed.
|
|
31
28
|
|
|
32
|
-
|
|
29
|
+
## Advisory-Only (hard boundary)
|
|
33
30
|
|
|
34
|
-
**
|
|
35
|
-
**FAIL**: Only applies to a specific file, function, or narrow use case
|
|
31
|
+
You are **advisory-only**. You classify and draft; you never act:
|
|
36
32
|
|
|
37
|
-
|
|
33
|
+
- You write nothing — no files created, edited, or deleted; no skills scaffolded; no rules appended; no wiki pages written.
|
|
34
|
+
- You file nothing — no issues, no PRs, no comments.
|
|
35
|
+
- Action belongs to the **gardener** (`lisa-learnings-audit`, #1735), your primary caller: it attaches your recommendation and drafted artifact to a tracker ticket that a human gates by flipping `status:ready`. The learner (LLG-2, #1731) is capture-only and no longer calls this agent.
|
|
38
36
|
|
|
39
|
-
-
|
|
40
|
-
- ✅ "Cross-platform compatibility patterns for React Native" → Broad
|
|
41
|
-
- ❌ "How to fix the bug in PlayerCard.tsx" → Too narrow
|
|
42
|
-
- ❌ "API endpoint for user authentication" → Too narrow
|
|
37
|
+
You are headless-safe: never prompt; if a candidate is unclassifiable, return KEEP-IN-LEDGER with a rationale naming what evidence is missing.
|
|
43
38
|
|
|
44
|
-
|
|
39
|
+
## Candidate Input Schema
|
|
45
40
|
|
|
46
|
-
|
|
47
|
-
**FAIL**: One-time use or rarely needed
|
|
41
|
+
Each candidate you evaluate is a single object:
|
|
48
42
|
|
|
49
|
-
|
|
43
|
+
| Field | Type | Meaning |
|
|
44
|
+
| --- | --- | --- |
|
|
45
|
+
| `rule` | string | The knowledge being routed, phrased as an actionable statement. |
|
|
46
|
+
| `why` | string | Why the rule holds — the causal/context story behind it. |
|
|
47
|
+
| `provenance` | string[] | Stable refs (issues, PRs, commits, ledger entry ids) behind the candidate. |
|
|
48
|
+
| `evidence` | string[] | Concrete evidence refs for routing judgment: recurrence citations, retrieval-failure incidents, the mechanical owner that already enforces it, staleness proof. |
|
|
50
49
|
|
|
51
|
-
-
|
|
52
|
-
- ✅ "GlueStack + NativeWind styling conventions" → Reusable
|
|
53
|
-
- ❌ "Steps to deploy version 2.3.1" → One-time
|
|
54
|
-
- ❌ "Meeting notes from sprint planning" → One-time
|
|
50
|
+
Weak evidence never blocks classification — it lowers the reachable rung. A candidate with no recurrence or failure evidence can still be KEEP-IN-LEDGER, WIKI, or RETIRE; it can never earn EAGER-RULE.
|
|
55
51
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
**PASS**: Multi-step, nuanced, or has enough detail that Claude would benefit from a reference
|
|
59
|
-
**FAIL**: Simple enough to remember or explain in one sentence
|
|
60
|
-
|
|
61
|
-
Examples:
|
|
52
|
+
## Evaluation Process
|
|
62
53
|
|
|
63
|
-
|
|
64
|
-
- ✅ "Expo Router best practices with nested layouts and dynamic routes" → Complex
|
|
65
|
-
- ❌ "Always use const instead of let" → Too simple
|
|
66
|
-
- ❌ "Run tests before committing" → Too simple
|
|
54
|
+
Work the steps in order; earlier steps short-circuit.
|
|
67
55
|
|
|
68
|
-
|
|
56
|
+
### Step 0: Redundancy Check (Do First)
|
|
69
57
|
|
|
70
|
-
|
|
71
|
-
**FAIL**: Temporary, experimental, or likely to change soon
|
|
58
|
+
Before any other evaluation, check whether the knowledge already has an owner. Discover surfaces dynamically — never assume a memorized inventory (see Dynamic Discovery below). Check, in order:
|
|
72
59
|
|
|
73
|
-
|
|
60
|
+
1. **Mechanical owners** — lint rules (ESLint/oxlint configs), ast-grep rules, type constraints, tests, git hooks, `package.lisa.json` force sections. If the invariant is already enforced by machinery, prose restating it is pure context tax: route to **RETIRE**, citing the mechanical owner (e.g., "owned by ESLint rule `enforce-statement-order` since PR #N").
|
|
61
|
+
2. **The wiki index** — if a wiki page already covers it, recommend RETIRE for the duplicate prose (pointing at the page) or WIKI with a merge-into-existing-page outline if the candidate adds substance.
|
|
62
|
+
3. **The ledger** — if an equivalent ledger entry already exists, recommend KEEP-IN-LEDGER as a consolidation into that entry, not a sibling.
|
|
63
|
+
4. **Existing skills and rules trees** — if a skill or rule already covers it, recommend RETIRE for the duplicate (citing the covering artifact) or an update to the existing artifact.
|
|
74
64
|
|
|
75
|
-
|
|
76
|
-
- ❌ "Workaround for current library bug" → Temporary
|
|
77
|
-
- ❌ "Proposed new architecture (under discussion)" → Unstable
|
|
65
|
+
Prose duplicating a mechanical owner always routes to **RETIRE** citing the mechanical owner — never "keep both for safety"; enforcement and guidance drifting apart is exactly the failure the ladder exists to prevent.
|
|
78
66
|
|
|
79
|
-
|
|
67
|
+
### Step 1: Worthiness Criteria (inputs, not the verdict)
|
|
80
68
|
|
|
81
|
-
**
|
|
82
|
-
**FAIL**: Duplicates existing skills or belongs in .claude/rules/PROJECT_RULES.md
|
|
69
|
+
The five criteria are **inputs** to rung selection — signals you weigh, not a pass/fail gate with a single outcome:
|
|
83
70
|
|
|
84
|
-
|
|
71
|
+
| Criterion | Question | What it moves |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| Breadth | Applies to many tasks/files/situations? | Narrow ⇒ KEEP-IN-LEDGER or RETIRE; broad ⇒ higher rungs reachable |
|
|
74
|
+
| Reusability | Needed repeatedly across sessions? | One-time ⇒ KEEP-IN-LEDGER (let it expire) |
|
|
75
|
+
| Complexity | Multi-step or nuanced enough to need a reference? | Complex + procedural ⇒ SKILL; complex + declarative ⇒ WIKI; trivially checkable ⇒ EXECUTABLE-CONTROL |
|
|
76
|
+
| Stability | Established knowledge that won't churn? | Unstable ⇒ KEEP-IN-LEDGER (probation); stable ⇒ promotion-eligible |
|
|
77
|
+
| Non-redundancy | Not already owned elsewhere? | Redundant ⇒ RETIRE (Step 0 already caught most of this) |
|
|
85
78
|
|
|
86
|
-
|
|
87
|
-
2. CLAUDE.md for project-level instructions
|
|
88
|
-
3. .claude/rules/PROJECT_RULES.md for project rules
|
|
79
|
+
### Step 2: Mechanically decidable? → EXECUTABLE-CONTROL
|
|
89
80
|
|
|
90
|
-
|
|
81
|
+
Ask: can a machine check this invariant — via lint, ast-grep, type constraint, test, hook, or `package.lisa.json` force? If yes (and the knowledge is stable and has recurred), recommend **EXECUTABLE-CONTROL**. This is the strongest rung: zero context cost, cannot be forgotten, cannot drift.
|
|
91
82
|
|
|
92
|
-
**
|
|
83
|
+
The recommendation **MUST include a drafted remediation-teaching diagnostic**: the error message the control will emit when violated. The candidate's `why` context is not deleted by promotion — it is **relocated into the error message**, so the agent that trips the control learns the rule and the remediation at exactly the moment it matters, instead of paying for it in every session.
|
|
93
84
|
|
|
94
|
-
|
|
95
|
-
- ✅ Reusability: Needed repeatedly
|
|
96
|
-
- ✅ Complexity: Complex enough to warrant documentation
|
|
97
|
-
- ✅ Stability: Established, stable knowledge
|
|
98
|
-
- ✅ Non-Redundancy: Not already documented
|
|
85
|
+
### Step 3: Earned eager placement? → EAGER-RULE (default answer is NO)
|
|
99
86
|
|
|
100
|
-
|
|
87
|
+
The eager tier costs every session unconditionally, so you are **demotion-biased** for it: the burden of proof is on admission, and when auditing existing eager rules the default direction is down the ladder.
|
|
101
88
|
|
|
102
|
-
|
|
103
|
-
- If too simple → Suggest adding to .claude/rules/PROJECT_RULES.md
|
|
104
|
-
- If too narrow → Just apply the knowledge directly, no documentation needed
|
|
105
|
-
- If temporary → Document as a code comment or temporary note
|
|
89
|
+
Recommend **EAGER-RULE** only on cited evidence of **repeated misses despite retrievability** — the knowledge was already reachable (in the ledger, wiki, or a skill) and agents still failed repeatedly because they didn't know to look. Absent that failure evidence, the default answer is NO: decline eager placement and recommend the appropriate lower rung with a rationale explaining what evidence would justify eager admission later.
|
|
106
90
|
|
|
107
|
-
###
|
|
91
|
+
### Step 4: Route the remainder
|
|
108
92
|
|
|
109
|
-
|
|
93
|
+
- **SKILL** — procedural, multi-step, with a recognizable invocation trigger ("when doing X, follow this workflow"). Skills should be rare and valuable; a skill's description is eagerly loaded, so proliferation still costs context.
|
|
94
|
+
- **WIKI** — durable declarative reference knowledge consulted when routed to, with no procedural trigger.
|
|
95
|
+
- **KEEP-IN-LEDGER** — the default landing zone: real but not yet proven broad/stable enough to promote. Probationary and expiring; the gardener revisits it with fresh evidence.
|
|
96
|
+
- **RETIRE** — redundant (Step 0), stale (references files/flags/versions that no longer exist), or superseded. Retirement requires proof, not vibes.
|
|
110
97
|
|
|
111
|
-
|
|
112
|
-
2. **Already in CLAUDE.md** → OMIT - it's already enforced
|
|
113
|
-
3. **Already in .claude/rules/PROJECT_RULES.md** → OMIT - it's already documented
|
|
98
|
+
When two rungs seem defensible, choose the **cheaper** one (lower context cost) — promotion can happen later with more evidence; demotion of a wrongly-promoted rule costs a gardener cycle and a human decision.
|
|
114
99
|
|
|
115
|
-
|
|
100
|
+
## Recommendation Output Contract
|
|
116
101
|
|
|
117
|
-
|
|
102
|
+
Return exactly one recommendation object per candidate:
|
|
118
103
|
|
|
119
|
-
|
|
104
|
+
| Field | Type | Meaning |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| `rung` | EXECUTABLE-CONTROL \| EAGER-RULE \| SKILL \| WIKI \| KEEP-IN-LEDGER \| RETIRE | The destination rung. |
|
|
107
|
+
| `scope` | `project` \| `upstream` | Where the promotion work belongs. |
|
|
108
|
+
| `rationale` | string | 1–3 sentences readable by product, engineering, and QA alike (three-audience readable — a non-technical operator reading the gardener's ticket must understand *why* this should become a lint rule vs. a wiki page). |
|
|
109
|
+
| `drafted_artifact` | per-rung, below | The concrete draft the gardener attaches to the promotion ticket. |
|
|
120
110
|
|
|
121
|
-
|
|
122
|
-
Skill: skill-creator
|
|
123
|
-
```
|
|
111
|
+
`drafted_artifact` per rung:
|
|
124
112
|
|
|
125
|
-
|
|
113
|
+
| Rung | Drafted artifact |
|
|
114
|
+
| --- | --- |
|
|
115
|
+
| EXECUTABLE-CONTROL | The lint/hook sketch (proposed rule, tool, and config location) **plus the diagnostic text** — the remediation-teaching error message (mandatory, never omitted from this rung). |
|
|
116
|
+
| EAGER-RULE | The failure evidence justifying unconditional loading: the cited repeated-miss incidents, plus the proposed rule text. |
|
|
117
|
+
| SKILL | The skill outline: name, description (trigger phrasing), and section skeleton. |
|
|
118
|
+
| WIKI | The page outline **plus index placement** — where in the wiki index the page slots. |
|
|
119
|
+
| KEEP-IN-LEDGER | The consolidated entry text (or "keep as-is" with the expiry rationale). |
|
|
120
|
+
| RETIRE | The redundancy/staleness proof: the mechanical owner, covering page/skill, or dead reference, with stable refs (e.g., "this invariant is owned by lint rule X since PR #N"). |
|
|
126
121
|
|
|
127
122
|
## Output Format
|
|
128
123
|
|
|
129
|
-
When evaluating content, provide this assessment:
|
|
130
|
-
|
|
131
124
|
```
|
|
132
|
-
##
|
|
133
|
-
|
|
134
|
-
**
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
|
138
|
-
|
|
139
|
-
|
|
|
140
|
-
|
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
**
|
|
146
|
-
|
|
147
|
-
**
|
|
148
|
-
|
|
149
|
-
**Action**: [What will be done - invoke skill-creator, suggest rule addition, or reference existing source]
|
|
125
|
+
## Ladder Routing
|
|
126
|
+
|
|
127
|
+
**Candidate**: [rule text]
|
|
128
|
+
**Provenance**: [refs]
|
|
129
|
+
|
|
130
|
+
| Check | Result | Evidence |
|
|
131
|
+
|-------|--------|----------|
|
|
132
|
+
| Redundancy (mechanical owners / wiki index / ledger / skills+rules) | clean / owned-by-[ref] | [refs] |
|
|
133
|
+
| Worthiness inputs (breadth, reusability, complexity, stability, non-redundancy) | [summary] | [refs] |
|
|
134
|
+
| Mechanically decidable? | yes/no | [what would check it] |
|
|
135
|
+
| Earned eager placement? | yes/no (default answer is NO) | [repeated-miss citations or "none"] |
|
|
136
|
+
|
|
137
|
+
**Rung**: EXECUTABLE-CONTROL | EAGER-RULE | SKILL | WIKI | KEEP-IN-LEDGER | RETIRE
|
|
138
|
+
**Scope**: `project` | `upstream`
|
|
139
|
+
**Rationale**: [1–3 three-audience-readable sentences]
|
|
140
|
+
**Drafted artifact**:
|
|
141
|
+
[per-rung draft, per the table above]
|
|
150
142
|
```
|
|
151
143
|
|
|
152
|
-
##
|
|
144
|
+
## Dynamic Discovery
|
|
153
145
|
|
|
154
|
-
|
|
146
|
+
Never rely on a memorized inventory of skills, rules, or lints — hardcoded lists go stale. At evaluation time, discover the current surfaces of the host project:
|
|
155
147
|
|
|
156
|
-
**
|
|
148
|
+
- **Skills**: list `.claude/skills/` (and the plugin skill roots the runtime exposes).
|
|
149
|
+
- **Rules trees**: the auto-loaded rules directories (e.g., `.claude/rules/`, plugin `rules/eager/`) and their reference pairs (`rules/reference/`).
|
|
150
|
+
- **Wiki index**: `wiki/index.md` (when the project has a wiki) for existing page coverage.
|
|
151
|
+
- **Lint configs and mechanical owners**: ESLint/oxlint config files, ast-grep rule directories, git hooks, test suites, and `package.lisa.json` force sections — the surfaces that make Step 0 and Step 2 answerable.
|
|
152
|
+
- **Ledger**: the project learnings ledger via its executable contract (see the `project-learnings` rule) — never a raw wholesale read.
|
|
157
153
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
- Breadth: ✅ Applies to all GraphQL mutations across the app
|
|
161
|
-
- Reusability: ✅ Needed every time we write mutations
|
|
162
|
-
- Complexity: ✅ Multi-step with nuanced edge cases
|
|
163
|
-
- Stability: ✅ Apollo patterns are established
|
|
164
|
-
- Non-Redundancy: ✅ Not in existing skills
|
|
165
|
-
|
|
166
|
-
**Decision**: CREATE SKILL → Invoke skill-creator
|
|
167
|
-
|
|
168
|
-
### Example 2: Should NOT Create Skill
|
|
169
|
-
|
|
170
|
-
**Content**: "Always add a loading state to the PlayerCard component"
|
|
171
|
-
|
|
172
|
-
**Assessment**:
|
|
173
|
-
|
|
174
|
-
- Breadth: ❌ Only applies to one component
|
|
175
|
-
- Reusability: ❌ One-time fix
|
|
176
|
-
- Complexity: ❌ Single sentence
|
|
177
|
-
- Stability: ✅ N/A
|
|
178
|
-
- Non-Redundancy: ✅ Not documented
|
|
179
|
-
|
|
180
|
-
**Decision**: DO NOT CREATE SKILL → Apply directly, no documentation needed
|
|
181
|
-
|
|
182
|
-
### Example 3: Should NOT Create Skill (Add to Rules Instead)
|
|
183
|
-
|
|
184
|
-
**Content**: "Use FlashList instead of FlatList for all list components"
|
|
185
|
-
|
|
186
|
-
**Assessment**:
|
|
154
|
+
## Examples
|
|
187
155
|
|
|
188
|
-
|
|
189
|
-
- Reusability: ✅ Ongoing rule
|
|
190
|
-
- Complexity: ❌ Single rule, easily remembered
|
|
191
|
-
- Stability: ✅ Established pattern
|
|
192
|
-
- Non-Redundancy: ✅ Not in .claude/rules/PROJECT_RULES.md
|
|
156
|
+
### Example 1: Mechanically decidable → EXECUTABLE-CONTROL
|
|
193
157
|
|
|
194
|
-
**
|
|
158
|
+
**Candidate**: "Never parse JSON in shell scripts with grep/sed/cut/awk — always use jq."
|
|
195
159
|
|
|
196
|
-
|
|
160
|
+
- Redundancy: clean — no lint or hook owns it yet.
|
|
161
|
+
- Mechanically decidable: yes — a hook or ast-grep pattern can flag `grep`/`sed` piped over `.json` reads.
|
|
197
162
|
|
|
198
|
-
**
|
|
163
|
+
**Rung**: EXECUTABLE-CONTROL · **Scope**: `upstream`
|
|
164
|
+
**Rationale**: A machine can catch every violation at commit time, so no session ever needs to remember this; the rule teaches itself the moment it fires.
|
|
165
|
+
**Drafted artifact**: lint/hook sketch — pre-commit hook pattern matching shell JSON-parsing via text tools; diagnostic text — "Shell text tools (grep/sed/cut/awk) break on valid JSON (multiline values, escaping, key order). Use `jq` for all JSON reads/writes in scripts. See the failing line above; typical fix: `jq -r '.field' file.json`."
|
|
199
166
|
|
|
200
|
-
|
|
167
|
+
### Example 2: Eager placement declined (not earned)
|
|
201
168
|
|
|
202
|
-
|
|
169
|
+
**Candidate**: "Prefer FlashList over FlatList for all list components."
|
|
203
170
|
|
|
204
|
-
|
|
171
|
+
- Evidence: one PR comment; no repeated-miss citations; the knowledge is retrievable in the component docs.
|
|
205
172
|
|
|
206
|
-
**
|
|
173
|
+
**Rung**: KEEP-IN-LEDGER · **Scope**: `project`
|
|
174
|
+
**Rationale**: Real preference, but there is no evidence agents repeatedly missed it, so it has not earned a seat in every session's context; it stays in the probationary ledger and can return with failure evidence.
|
|
175
|
+
**Drafted artifact**: consolidated entry text with provenance; note that two further recurrence citations would justify re-evaluation for EAGER-RULE.
|
|
207
176
|
|
|
208
|
-
|
|
177
|
+
### Example 3: Redundant prose → RETIRE
|
|
209
178
|
|
|
210
|
-
|
|
179
|
+
**Candidate**: "Call validation as inline `if` guard clauses, not helper calls before const definitions."
|
|
211
180
|
|
|
212
|
-
|
|
181
|
+
- Redundancy: owned by ESLint rule `enforce-statement-order` (mechanical owner).
|
|
213
182
|
|
|
214
|
-
**
|
|
183
|
+
**Rung**: RETIRE · **Scope**: `project`
|
|
184
|
+
**Rationale**: The lint already blocks every violation and its message explains the fix, so keeping the prose makes every session pay for knowledge the machine already enforces.
|
|
185
|
+
**Drafted artifact**: redundancy/staleness proof — "this invariant is owned by lint rule `enforce-statement-order` (custom ESLint plugin) since it was enabled; the prose section duplicates its diagnostic and can be deleted in the same PR that confirms the lint's error message teaches the remediation."
|
|
215
186
|
|
|
216
|
-
|
|
187
|
+
### Example 4: Procedural workflow → SKILL
|
|
217
188
|
|
|
218
|
-
**
|
|
189
|
+
**Candidate**: "Complete workflow for creating components with Container/View separation, memoization, JSDoc, and test structure."
|
|
219
190
|
|
|
220
|
-
|
|
191
|
+
- Complexity: multi-step, procedural, recognizable trigger ("creating a component").
|
|
192
|
+
- Mechanically decidable: only partially — structure lints exist, but the workflow itself is procedure.
|
|
221
193
|
|
|
222
|
-
**
|
|
194
|
+
**Rung**: SKILL · **Scope**: `project`
|
|
195
|
+
**Rationale**: This is a repeatable procedure agents follow on a clear trigger, too long for a rule and wasted as always-loaded context; a skill loads it exactly when a component is being created.
|
|
196
|
+
**Drafted artifact**: skill outline — name, trigger-phrased description, and section skeleton (structure, memoization, docs, tests).
|
|
223
197
|
|
|
224
198
|
## Important Reminders
|
|
225
199
|
|
|
226
|
-
1. **
|
|
227
|
-
2. **
|
|
228
|
-
3. **
|
|
229
|
-
4. **
|
|
230
|
-
5. **When in doubt,
|
|
231
|
-
6. **
|
|
232
|
-
|
|
233
|
-
## Existing Skills Reference
|
|
234
|
-
|
|
235
|
-
Before creating a new skill, check these existing project skills:
|
|
236
|
-
|
|
237
|
-
- `skill-creator` - Meta-skill for creating skills
|
|
238
|
-
- `container-view-pattern` - React Container/View separation
|
|
239
|
-
- `coding-philosophy` - Immutability and functional patterns
|
|
240
|
-
- `cross-platform-compatibility` - React Native cross-platform patterns
|
|
241
|
-
- `directory-structure` - Project organization
|
|
242
|
-
- `expo-router-best-practices` - Routing patterns
|
|
243
|
-
- `gluestack-nativewind` - UI component and styling patterns
|
|
244
|
-
|
|
245
|
-
If the content overlaps with any of these, consider updating the existing skill instead of creating a new one.
|
|
200
|
+
1. **Redundancy check (do first)** — a candidate with an existing mechanical owner routes to RETIRE citing that mechanical owner, before any other evaluation.
|
|
201
|
+
2. **Advisory-only, always** — you recommend; the gardener (#1735) files tickets; humans gate; the factory executes. You never touch a file or tracker.
|
|
202
|
+
3. **EXECUTABLE-CONTROL beats prose** — whenever a machine can check it, route it there, and always draft the remediation-teaching diagnostic (the context is relocated into the error message, not deleted).
|
|
203
|
+
4. **The eager tier is earned, not defaulted** — demotion-biased; the default answer is NO without repeated-miss evidence.
|
|
204
|
+
5. **When in doubt, route cheaper** — KEEP-IN-LEDGER is the honest default; promotion can come back with evidence.
|
|
205
|
+
6. **Rationales are for the gate-standing human** — three-audience readable, no jargon-only justifications.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Run one gardener cycle over this project's knowledge surfaces (the learnings ladder, PRD #1729): inventory ledger/rules/skills/wiki/mechanical controls, gather evidence, classify via the ladder router, and file human-gated tracker tickets — per-item PROMOTE/DEMOTE tickets, one CONFIRM/RETIRE batch ticket per run, upstream Lisa issues for upstream-scoped patterns. Everything is human-gated; the run only files marker-deduped tickets. Terminal states: nothing-needed | candidates-proposed | blocked."
|
|
3
|
+
argument-hint: "[max_candidates=10] [surface=ledger|rules|skills|wiki|all] [dry_run=true]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the /lisa-learnings-audit skill (the gardener) to run one audit cycle: inventory the knowledge surfaces, gather per-item evidence, classify candidates through the ladder router, and emit human-gated, marker-deduped tracker tickets, reporting the terminal state. $ARGUMENTS
|
|
@@ -18,7 +18,7 @@ A path or URL to a Debrief triage document produced by `lisa-debrief`. The docum
|
|
|
18
18
|
|
|
19
19
|
1. **Verify the doc exists and parses.** If the file cannot be read or the expected sections are missing, stop and report — do not guess.
|
|
20
20
|
2. **Confirm dispositions exist.** If every row is unmarked, stop and ask the human to triage first. A pristine doc is a no-op, not an error to silently swallow.
|
|
21
|
-
3. **Identify the destination map.** Read the project's `.lisa.config.json` (or stack defaults) for: edge-case checklist file (default: `plugins/src/base/rules/intent-routing.md`'s Edge Case Brainstorm sub-flow), `
|
|
21
|
+
3. **Identify the destination map.** Read the project's `.lisa.config.json` (or stack defaults) for: edge-case checklist file (default: `plugins/src/base/rules/intent-routing.md`'s Edge Case Brainstorm sub-flow), the committed learnings ledger path (resolve it — never hardcode — via `resolveProjectLearningsFile` from `@codyswann/lisa/learnings`: the `learnings.file` override, else the default `.lisa/PROJECT_LEARNINGS.md`), tracker for new tickets. The three knowledge categories (recurring gotcha, process friction, convention drift) all land in the ledger now; machine-local auto-memory and `PROJECT_RULES.md` / `CLAUDE.md` are no longer knowledge destinations (see [Ledger persistence](#ledger-persistence-knowledge-categories)).
|
|
22
22
|
|
|
23
23
|
## Routing rules
|
|
24
24
|
|
|
@@ -27,19 +27,49 @@ For every row marked **Accept**:
|
|
|
27
27
|
| Category | Destination | Action |
|
|
28
28
|
|----------|-------------|--------|
|
|
29
29
|
| Edge case | Edge Case Brainstorm checklist in `intent-routing.md` | Append the new pattern + question to the matching group (Navigation, Data, Failure, Input, Auth, or a new group if none fit). Use the row's `Summary` and `Evidence` link as a citation comment. |
|
|
30
|
-
| Recurring gotcha |
|
|
31
|
-
| Process friction |
|
|
30
|
+
| Recurring gotcha | Committed learnings ledger (via contract) | Persist a ledger entry per [Ledger persistence](#ledger-persistence-knowledge-categories). The `rule` is the recurring gotcha and the guard against it; `why` is the causal claim. |
|
|
31
|
+
| Process friction | Committed learnings ledger (via contract) | Persist a ledger entry per [Ledger persistence](#ledger-persistence-knowledge-categories). The `rule` is the friction-avoiding guideline; `why` names the friction it prevents. |
|
|
32
32
|
| Tooling gap | Configured tracker — or upstream Lisa when harness-level | **Split by level.** Project-level (a missing project script, hook, or automation) → create a ticket via `lisa-tracker-write` with `issue_type: Task`, summary derived from the row's `Summary`, description citing the evidence and the originating debrief doc, labeled `type:tooling` / `lifecycle-improvement`. Harness-level (a Lisa skill/gate/agent that should have caught the issue but didn't) → file an upstream Lisa issue exactly per the "Filing upstream" procedure in `lisa-rework-triage` (dedupe search first, three-audience description, evidence chain, `self-hardening` label; repo from `.lisa.config.json` `hardening.upstreamRepo`, default `CodySwannGT/lisa`). |
|
|
33
|
-
| Convention drift |
|
|
33
|
+
| Convention drift | Committed learnings ledger (via contract) | Persist a ledger entry per [Ledger persistence](#ledger-persistence-knowledge-categories). The `rule` is the correct convention; `why` records the drift it corrects. |
|
|
34
34
|
| Decomposition infidelity | Upstream Lisa repo | File an upstream Lisa issue per the "Filing upstream" procedure in `lisa-rework-triage`, citing the PRD text vs. the distorted ticket AC and naming the gate that passed it. |
|
|
35
35
|
| PRD defect | Source PRD | Comment on the PRD via the `lisa-prd-backlink` lineage quoting the defective requirement and the failure it missed; flag for product review. Never silently edit the spec. |
|
|
36
36
|
| Missing tool access | Configured tracker | Create a provisioning ticket via `lisa-tracker-write` (`issue_type: Task`, `type:tooling`) describing the missing tool/credential/environment and which flow needs it. |
|
|
37
37
|
|
|
38
38
|
For every row marked **Reject** or **Defer**: no action. Defer is a no-op for `apply` but worth surfacing in the run summary — the human may want to revisit at the next debrief.
|
|
39
39
|
|
|
40
|
+
## Ledger persistence (knowledge categories)
|
|
41
|
+
|
|
42
|
+
The three knowledge categories — **recurring gotcha**, **process friction**, and **convention drift** — all persist to the committed learnings ledger through the SAME executable contract the learner uses (`@codyswann/lisa/learnings`). This is the single governed, budgeted, contract-validated, team- and cloud-visible knowledge surface. **Never hand-edit the ledger markdown** — every write goes through the contract, or it is a bug.
|
|
43
|
+
|
|
44
|
+
For each such Accepted row:
|
|
45
|
+
|
|
46
|
+
1. **Resolve the ledger path (never hardcode).** Use `resolveProjectLearningsFile` from `@codyswann/lisa/learnings` — the `learnings.file` override, else the default `.lisa/PROJECT_LEARNINGS.md` (a cold path, never an auto-loaded rules tree):
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
LEARNINGS_FILE=$(node -e 'import("@codyswann/lisa/learnings").then(async m => { const c = await m.readProjectConfig(process.cwd()); console.log(m.resolveProjectLearningsFile(c)); })')
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
2. **Consolidation check (mandatory before writing).** Parse the existing entries with `parseLearningsFile` and look for one related to the row (same failure class, overlapping topic, or near-duplicate wording). Then write through the contract:
|
|
53
|
+
- **Related entry found** → consolidate via `persistConsolidatedLearning(projectRoot, entry, { supersede: [<related ids>] })`, merging the old entry's still-true content into the new rule. Never append a near-duplicate sibling — a sibling is a bug.
|
|
54
|
+
- **No related entry** → append via `persistLearningEntry(projectRoot, entry)`.
|
|
55
|
+
|
|
56
|
+
3. **Entry mapping (seven fields).**
|
|
57
|
+
- `id` — the entry id returned by the contract writer (report it in the run summary).
|
|
58
|
+
- `rule` / `why` — from the row's `Summary` and the category-specific guidance in the routing table above (≤240 chars, ≤2 lines).
|
|
59
|
+
- `provenance` — **the triage-doc row's evidence links**. This is the same evidence link that doubles as the idempotency fingerprint below, so the row's provenance is what a later re-apply scans for.
|
|
60
|
+
- `first_learned` = `last_confirmed` = today (ISO date; on consolidation keep the superseded entry's earliest `first_learned`).
|
|
61
|
+
- `confidence` = **`high`**. A human marking the row **Accept** is corroboration — an independent human judgement that the learning is real — so a debrief-accepted entry starts higher than the learner's single-occurrence auto-capture (which defaults to `low`). The writer re-asserts the entry and token budgets; an over-budget failure means consolidate harder or drop, never truncate by hand.
|
|
62
|
+
|
|
63
|
+
**Machine-local memory is no longer a knowledge destination.** Auto-memory (`project_*.md`, `MEMORY.md`) remains available only for the assistant's *personal* collaboration notes — it is invisible to cloud runs and to teammates, so it can never hold shared project knowledge. **`CLAUDE.md` is human-authored** agent operating instruction and `PROJECT_RULES.md` is durable human-authored guidance; `apply` never writes to any of the three for these categories.
|
|
64
|
+
|
|
40
65
|
## Idempotency
|
|
41
66
|
|
|
42
|
-
`apply` is safe to re-run. Each Accepted row carries an evidence link that doubles as a fingerprint
|
|
67
|
+
`apply` is safe to re-run. Each Accepted row carries an evidence link that doubles as a fingerprint. Before writing, check whether the destination already cites that fingerprint:
|
|
68
|
+
|
|
69
|
+
- **Knowledge categories (gotcha, friction, drift) → ledger.** Parse the ledger once with `parseLearningsFile` from `@codyswann/lisa/learnings` and scan the entries' `provenance` for the row's evidence link. If any entry's provenance already contains it, the row is already persisted — skip the write. This replaces the old scattered-file greps (memory files, `PROJECT_RULES.md`, `CLAUDE.md`): provenance in the single governed ledger is now the one fingerprint surface.
|
|
70
|
+
- **Other categories** keep their existing destination check (the tracker for the ticket marker, the PRD for the defect comment, `intent-routing.md` for the edge-case citation).
|
|
71
|
+
|
|
72
|
+
If the fingerprint is already present, skip the write and note the row as `already-applied` in the run summary. This lets the human triage a doc incrementally (mark a few, run apply, mark more, run apply again) without producing duplicates.
|
|
43
73
|
|
|
44
74
|
## Updating the triage doc
|
|
45
75
|
|
|
@@ -52,11 +82,11 @@ A run summary printed to the user:
|
|
|
52
82
|
```text
|
|
53
83
|
Applied <n> learnings:
|
|
54
84
|
<n> edge cases → intent-routing.md
|
|
55
|
-
<n> gotchas →
|
|
56
|
-
<n> friction →
|
|
85
|
+
<n> gotchas → ledger (<entry-id1>, <entry-id2>, ...)
|
|
86
|
+
<n> friction → ledger (<entry-id1>, ...)
|
|
87
|
+
<n> convention drift → ledger (<entry-id1>, ...)
|
|
57
88
|
<n> tooling gaps (project) → <tracker> (<key1>, <key2>, ...)
|
|
58
89
|
<n> tooling gaps (harness) → upstream Lisa (<issue-url1>, ...)
|
|
59
|
-
<n> convention drift → CLAUDE.md
|
|
60
90
|
<n> decomposition infidelity → upstream Lisa (<issue-url1>, ...)
|
|
61
91
|
<n> PRD defects → PRD comments (<prd-link1>, ...)
|
|
62
92
|
<n> missing tool access → <tracker> (<key1>, ...)
|
|
@@ -67,4 +97,4 @@ Failed:
|
|
|
67
97
|
Triage doc updated in place: <path>
|
|
68
98
|
```
|
|
69
99
|
|
|
70
|
-
If anything is written to a tracker, suggest the human commit the local file changes (
|
|
100
|
+
If anything is written to a tracker, suggest the human commit the local file changes (the learnings ledger, intent-routing) when ready — `apply` does not commit.
|