@codyswann/lisa 2.245.1 → 2.246.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/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/rules/reference/project-learnings.md +7 -7
- package/plugins/lisa/skills/lisa-debrief-apply/SKILL.md +39 -9
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-debrief-apply/SKILL.md +39 -9
- 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/rules/reference/project-learnings.md +7 -7
- package/plugins/lisa-copilot/skills/lisa-debrief-apply/SKILL.md +39 -9
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/project-learnings-reference.mdc +7 -7
- package/plugins/lisa-cursor/skills/lisa-debrief-apply/SKILL.md +39 -9
- 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/rules/reference/project-learnings.md +7 -7
- package/plugins/src/base/skills/lisa-debrief-apply/SKILL.md +39 -9
package/package.json
CHANGED
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"form-data": ">=4.0.6"
|
|
103
103
|
},
|
|
104
104
|
"name": "@codyswann/lisa",
|
|
105
|
-
"version": "2.
|
|
105
|
+
"version": "2.246.0",
|
|
106
106
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
107
107
|
"main": "dist/index.js",
|
|
108
108
|
"exports": {
|
|
@@ -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.
|
|
@@ -36,16 +36,16 @@ Each persisted entry has seven fields:
|
|
|
36
36
|
(`persistLearningEntry` / `persistConsolidatedLearning`) from task learnings.
|
|
37
37
|
It is capture-only: it never appends to `PROJECT_RULES.md`, creates skills, or
|
|
38
38
|
files upstream issues — promotion is the gardener's ticket-gated job.
|
|
39
|
+
- **`lisa-debrief-apply`** routes accepted debrief findings in the three
|
|
40
|
+
knowledge categories — recurring gotcha, process friction, convention drift —
|
|
41
|
+
to the ledger through the same contract (`persistLearningEntry` /
|
|
42
|
+
`persistConsolidatedLearning`, with consolidation-at-write), provenance drawn
|
|
43
|
+
from the triage row's evidence links and a `high` starting confidence because
|
|
44
|
+
a human Accept is corroboration. It no longer writes to machine-local memory,
|
|
45
|
+
`PROJECT_RULES.md`, or `CLAUDE.md` for these categories.
|
|
39
46
|
- The **build-intake flows** advance `last_confirmed` at claim time
|
|
40
47
|
(`confirmLearningEntry`, below).
|
|
41
48
|
|
|
42
|
-
**Legacy writer (NOT contract-mediated, pending #1733)**:
|
|
43
|
-
|
|
44
|
-
- **`lisa-debrief-apply`** still routes debrief findings to machine-local
|
|
45
|
-
memory and `PROJECT_RULES.md`, entirely outside the contract. It becomes a
|
|
46
|
-
contract-mediated ledger writer only when #1733 ships its reroute — until
|
|
47
|
-
then, never treat its output as budgeted/validated ledger content.
|
|
48
|
-
|
|
49
49
|
Promotion to a higher rung (skill, eager rule, executable control, upstream
|
|
50
50
|
ticket) is never a writer here — it is the gardener's job, gated by a human
|
|
51
51
|
flipping a tracker ticket to `status:ready`.
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -36,16 +36,16 @@ Each persisted entry has seven fields:
|
|
|
36
36
|
(`persistLearningEntry` / `persistConsolidatedLearning`) from task learnings.
|
|
37
37
|
It is capture-only: it never appends to `PROJECT_RULES.md`, creates skills, or
|
|
38
38
|
files upstream issues — promotion is the gardener's ticket-gated job.
|
|
39
|
+
- **`lisa-debrief-apply`** routes accepted debrief findings in the three
|
|
40
|
+
knowledge categories — recurring gotcha, process friction, convention drift —
|
|
41
|
+
to the ledger through the same contract (`persistLearningEntry` /
|
|
42
|
+
`persistConsolidatedLearning`, with consolidation-at-write), provenance drawn
|
|
43
|
+
from the triage row's evidence links and a `high` starting confidence because
|
|
44
|
+
a human Accept is corroboration. It no longer writes to machine-local memory,
|
|
45
|
+
`PROJECT_RULES.md`, or `CLAUDE.md` for these categories.
|
|
39
46
|
- The **build-intake flows** advance `last_confirmed` at claim time
|
|
40
47
|
(`confirmLearningEntry`, below).
|
|
41
48
|
|
|
42
|
-
**Legacy writer (NOT contract-mediated, pending #1733)**:
|
|
43
|
-
|
|
44
|
-
- **`lisa-debrief-apply`** still routes debrief findings to machine-local
|
|
45
|
-
memory and `PROJECT_RULES.md`, entirely outside the contract. It becomes a
|
|
46
|
-
contract-mediated ledger writer only when #1733 ships its reroute — until
|
|
47
|
-
then, never treat its output as budgeted/validated ledger content.
|
|
48
|
-
|
|
49
49
|
Promotion to a higher rung (skill, eager rule, executable control, upstream
|
|
50
50
|
ticket) is never a writer here — it is the gardener's job, gated by a human
|
|
51
51
|
flipping a tracker ticket to `status:ready`.
|
|
@@ -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.
|
|
@@ -41,16 +41,16 @@ Each persisted entry has seven fields:
|
|
|
41
41
|
(`persistLearningEntry` / `persistConsolidatedLearning`) from task learnings.
|
|
42
42
|
It is capture-only: it never appends to `PROJECT_RULES.md`, creates skills, or
|
|
43
43
|
files upstream issues — promotion is the gardener's ticket-gated job.
|
|
44
|
+
- **`lisa-debrief-apply`** routes accepted debrief findings in the three
|
|
45
|
+
knowledge categories — recurring gotcha, process friction, convention drift —
|
|
46
|
+
to the ledger through the same contract (`persistLearningEntry` /
|
|
47
|
+
`persistConsolidatedLearning`, with consolidation-at-write), provenance drawn
|
|
48
|
+
from the triage row's evidence links and a `high` starting confidence because
|
|
49
|
+
a human Accept is corroboration. It no longer writes to machine-local memory,
|
|
50
|
+
`PROJECT_RULES.md`, or `CLAUDE.md` for these categories.
|
|
44
51
|
- The **build-intake flows** advance `last_confirmed` at claim time
|
|
45
52
|
(`confirmLearningEntry`, below).
|
|
46
53
|
|
|
47
|
-
**Legacy writer (NOT contract-mediated, pending #1733)**:
|
|
48
|
-
|
|
49
|
-
- **`lisa-debrief-apply`** still routes debrief findings to machine-local
|
|
50
|
-
memory and `PROJECT_RULES.md`, entirely outside the contract. It becomes a
|
|
51
|
-
contract-mediated ledger writer only when #1733 ships its reroute — until
|
|
52
|
-
then, never treat its output as budgeted/validated ledger content.
|
|
53
|
-
|
|
54
54
|
Promotion to a higher rung (skill, eager rule, executable control, upstream
|
|
55
55
|
ticket) is never a writer here — it is the gardener's job, gated by a human
|
|
56
56
|
flipping a tracker ticket to `status:ready`.
|