@codyswann/lisa 3.2.0 → 3.4.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/dist/cli/doctor-lisa-owned-artifacts.d.ts.map +1 -1
- package/dist/cli/doctor-lisa-owned-artifacts.js +41 -2
- package/dist/cli/doctor-lisa-owned-artifacts.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +90 -16
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/create-only/.github/workflows/nightly-e2e-health.yml +21 -2
- 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-implement/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/SKILL.md +7 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-local/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/SKILL.md +1 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/SKILL.md +2 -0
- package/plugins/lisa/rules/eager/design-source-of-truth.md +38 -0
- package/plugins/lisa/rules/eager/do-it-now.md +11 -0
- package/plugins/lisa/rules/eager/empirical-inquiry.md +1 -0
- package/plugins/lisa/rules/eager/falsifiable-checks.md +2 -0
- package/plugins/lisa/rules/eager/integration-access-layer.md +5 -0
- package/plugins/lisa/rules/eager/learnings-ladder.md +18 -0
- package/plugins/lisa/rules/eager/local-ci-first.md +15 -0
- package/plugins/lisa/rules/eager/not-blocked-just-waiting.md +13 -0
- package/plugins/lisa/rules/eager/session-status-updates.md +19 -0
- package/plugins/lisa/rules/eager/wiki-knowledge-source.md +6 -11
- package/plugins/lisa/rules/reference/design-source-of-truth.md +195 -0
- package/plugins/lisa/rules/reference/do-it-now.md +37 -0
- package/plugins/lisa/rules/reference/empirical-inquiry.md +1 -0
- package/plugins/lisa/rules/reference/falsifiable-checks.md +24 -2
- package/plugins/lisa/rules/reference/integration-access-layer.md +8 -0
- package/plugins/lisa/rules/reference/learnings-ladder.md +41 -0
- package/plugins/lisa/rules/reference/local-ci-first.md +34 -0
- package/plugins/lisa/rules/reference/not-blocked-just-waiting.md +41 -0
- package/plugins/lisa/rules/reference/session-status-updates.md +60 -0
- package/plugins/lisa/rules/reference/wiki-knowledge-source.md +21 -5
- package/plugins/lisa/scripts/design-source-gate.mjs +530 -0
- package/plugins/lisa/skills/lisa-implement/SKILL.md +3 -1
- package/plugins/lisa/skills/lisa-quality-review/SKILL.md +7 -0
- package/plugins/lisa/skills/lisa-review-local/SKILL.md +27 -0
- package/plugins/lisa/skills/lisa-tdd-implementation/SKILL.md +1 -0
- package/plugins/lisa/skills/lisa-tracker-source-artifacts/SKILL.md +2 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/design-source-gate.mjs +530 -0
- package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +3 -1
- package/plugins/lisa-agy/skills/lisa-quality-review/SKILL.md +7 -0
- package/plugins/lisa-agy/skills/lisa-review-local/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/lisa-tdd-implementation/SKILL.md +1 -0
- package/plugins/lisa-agy/skills/lisa-tracker-source-artifacts/SKILL.md +2 -0
- 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/eager/design-source-of-truth.md +38 -0
- package/plugins/lisa-copilot/rules/eager/do-it-now.md +11 -0
- package/plugins/lisa-copilot/rules/eager/empirical-inquiry.md +1 -0
- package/plugins/lisa-copilot/rules/eager/falsifiable-checks.md +2 -0
- package/plugins/lisa-copilot/rules/eager/integration-access-layer.md +5 -0
- package/plugins/lisa-copilot/rules/eager/learnings-ladder.md +18 -0
- package/plugins/lisa-copilot/rules/eager/local-ci-first.md +15 -0
- package/plugins/lisa-copilot/rules/eager/not-blocked-just-waiting.md +13 -0
- package/plugins/lisa-copilot/rules/eager/session-status-updates.md +19 -0
- package/plugins/lisa-copilot/rules/eager/wiki-knowledge-source.md +6 -11
- package/plugins/lisa-copilot/rules/reference/design-source-of-truth.md +195 -0
- package/plugins/lisa-copilot/rules/reference/do-it-now.md +37 -0
- package/plugins/lisa-copilot/rules/reference/empirical-inquiry.md +1 -0
- package/plugins/lisa-copilot/rules/reference/falsifiable-checks.md +24 -2
- package/plugins/lisa-copilot/rules/reference/integration-access-layer.md +8 -0
- package/plugins/lisa-copilot/rules/reference/learnings-ladder.md +41 -0
- package/plugins/lisa-copilot/rules/reference/local-ci-first.md +34 -0
- package/plugins/lisa-copilot/rules/reference/not-blocked-just-waiting.md +41 -0
- package/plugins/lisa-copilot/rules/reference/session-status-updates.md +60 -0
- package/plugins/lisa-copilot/rules/reference/wiki-knowledge-source.md +21 -5
- package/plugins/lisa-copilot/scripts/design-source-gate.mjs +530 -0
- package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +3 -1
- package/plugins/lisa-copilot/skills/lisa-quality-review/SKILL.md +7 -0
- package/plugins/lisa-copilot/skills/lisa-review-local/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/lisa-tdd-implementation/SKILL.md +1 -0
- package/plugins/lisa-copilot/skills/lisa-tracker-source-artifacts/SKILL.md +2 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/design-source-of-truth-reference.mdc +200 -0
- package/plugins/lisa-cursor/rules/design-source-of-truth.mdc +43 -0
- package/plugins/lisa-cursor/rules/do-it-now-reference.mdc +42 -0
- package/plugins/lisa-cursor/rules/do-it-now.mdc +16 -0
- package/plugins/lisa-cursor/rules/empirical-inquiry-reference.mdc +1 -0
- package/plugins/lisa-cursor/rules/empirical-inquiry.mdc +1 -0
- package/plugins/lisa-cursor/rules/falsifiable-checks-reference.mdc +24 -2
- package/plugins/lisa-cursor/rules/falsifiable-checks.mdc +2 -0
- package/plugins/lisa-cursor/rules/integration-access-layer-reference.mdc +8 -0
- package/plugins/lisa-cursor/rules/integration-access-layer.mdc +5 -0
- package/plugins/lisa-cursor/rules/learnings-ladder-reference.mdc +46 -0
- package/plugins/lisa-cursor/rules/learnings-ladder.mdc +23 -0
- package/plugins/lisa-cursor/rules/local-ci-first-reference.mdc +39 -0
- package/plugins/lisa-cursor/rules/local-ci-first.mdc +20 -0
- package/plugins/lisa-cursor/rules/not-blocked-just-waiting-reference.mdc +46 -0
- package/plugins/lisa-cursor/rules/not-blocked-just-waiting.mdc +18 -0
- package/plugins/lisa-cursor/rules/session-status-updates-reference.mdc +65 -0
- package/plugins/lisa-cursor/rules/session-status-updates.mdc +24 -0
- package/plugins/lisa-cursor/rules/wiki-knowledge-source-reference.mdc +21 -5
- package/plugins/lisa-cursor/rules/wiki-knowledge-source.mdc +7 -12
- package/plugins/lisa-cursor/scripts/design-source-gate.mjs +530 -0
- package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +3 -1
- package/plugins/lisa-cursor/skills/lisa-quality-review/SKILL.md +7 -0
- package/plugins/lisa-cursor/skills/lisa-review-local/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/lisa-tdd-implementation/SKILL.md +1 -0
- package/plugins/lisa-cursor/skills/lisa-tracker-source-artifacts/SKILL.md +2 -0
- 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/eager/design-source-of-truth.md +38 -0
- package/plugins/src/base/rules/eager/do-it-now.md +11 -0
- package/plugins/src/base/rules/eager/empirical-inquiry.md +1 -0
- package/plugins/src/base/rules/eager/falsifiable-checks.md +2 -0
- package/plugins/src/base/rules/eager/integration-access-layer.md +5 -0
- package/plugins/src/base/rules/eager/learnings-ladder.md +18 -0
- package/plugins/src/base/rules/eager/local-ci-first.md +15 -0
- package/plugins/src/base/rules/eager/not-blocked-just-waiting.md +13 -0
- package/plugins/src/base/rules/eager/session-status-updates.md +19 -0
- package/plugins/src/base/rules/eager/wiki-knowledge-source.md +6 -11
- package/plugins/src/base/rules/reference/design-source-of-truth.md +195 -0
- package/plugins/src/base/rules/reference/do-it-now.md +37 -0
- package/plugins/src/base/rules/reference/empirical-inquiry.md +1 -0
- package/plugins/src/base/rules/reference/falsifiable-checks.md +24 -2
- package/plugins/src/base/rules/reference/integration-access-layer.md +8 -0
- package/plugins/src/base/rules/reference/learnings-ladder.md +41 -0
- package/plugins/src/base/rules/reference/local-ci-first.md +34 -0
- package/plugins/src/base/rules/reference/not-blocked-just-waiting.md +41 -0
- package/plugins/src/base/rules/reference/session-status-updates.md +60 -0
- package/plugins/src/base/rules/reference/wiki-knowledge-source.md +21 -5
- package/plugins/src/base/scripts/design-source-gate.mjs +530 -0
- package/plugins/src/base/skills/lisa-implement/SKILL.md +3 -1
- package/plugins/src/base/skills/lisa-quality-review/SKILL.md +7 -0
- package/plugins/src/base/skills/lisa-review-local/SKILL.md +27 -0
- package/plugins/src/base/skills/lisa-tdd-implementation/SKILL.md +1 -0
- package/plugins/src/base/skills/lisa-tracker-source-artifacts/SKILL.md +2 -0
- package/typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs +173 -8
- package/typescript/copy-overwrite/scripts/nightly-e2e-suites.schema.json +12 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Waiting Is Not Blocked"
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Waiting Is Not Blocked
|
|
7
|
+
|
|
8
|
+
Three failure modes share one root: a session that stops producing while still consuming the human's clock and attention. Each was observed directly.
|
|
9
|
+
|
|
10
|
+
## 1. Poll; do not wait for a message
|
|
11
|
+
|
|
12
|
+
An agent dispatches a subagent, a CI run, a deploy, or a long build — and then waits for a notification that never arrives, or arrives long after it mattered. Callbacks are best-effort. Notification channels drop. A background process can exit without anything telling you.
|
|
13
|
+
|
|
14
|
+
**While the session is active, go and check.** Roughly every five minutes, run the command that answers the question: `gh run list`, `gh pr checks`, a status query, a log tail, a file existence check. Polling is cheap; an idle session is not.
|
|
15
|
+
|
|
16
|
+
This is not an instruction to busy-wait. It is the opposite: between polls you should be doing other work (see rule 3). The poll is a periodic check, not an occupation.
|
|
17
|
+
|
|
18
|
+
Two corollaries:
|
|
19
|
+
|
|
20
|
+
- **An absent result is information.** If a subagent has produced nothing after several polls, investigate whether it is running at all rather than assuming it needs more time.
|
|
21
|
+
- **Never claim an outcome you have not observed.** "The tests are probably green by now" is a fabrication; go look. See `falsifiable-checks` and `claim-evidence-mapping`.
|
|
22
|
+
|
|
23
|
+
## 2. Blocked means you physically cannot proceed
|
|
24
|
+
|
|
25
|
+
The word is load-bearing and it gets diluted. **Blocked** means there is no action available to you: a credential you cannot obtain, an API that rejects you, a decision whose answer changes what you would build, a dependency that does not exist yet.
|
|
26
|
+
|
|
27
|
+
These are **not** blocked:
|
|
28
|
+
|
|
29
|
+
- Waiting for a review, a CI run, a deploy, or a build.
|
|
30
|
+
- Waiting for a human to confirm something you could reasonably proceed on and correct later.
|
|
31
|
+
- Waiting for a subagent you dispatched.
|
|
32
|
+
- Not yet having done the work.
|
|
33
|
+
|
|
34
|
+
Report those as **waiting**, and say what you are doing in the meantime. Reporting them as blocked misinforms the human twice: it suggests they must act when they need not, and it devalues the word for the times you genuinely cannot proceed.
|
|
35
|
+
|
|
36
|
+
## 3. Plan phases are parallel unless stated otherwise
|
|
37
|
+
|
|
38
|
+
A numbered plan is a decomposition, not a dependency graph. Unless a phase's input is another phase's output — or the user said the order matters — the phases run concurrently. An agent that serializes a plan because it is written as a list turns a parallel workload into a queue and multiplies the wall-clock cost by the number of steps.
|
|
39
|
+
|
|
40
|
+
Practically: when you would otherwise idle waiting on rule 1, start the next independent phase. When you dispatch subagents, dispatch every independent one in the same breath rather than one at a time.
|
|
41
|
+
|
|
42
|
+
Where a real dependency exists, name it — "phase 3 needs the schema from phase 2" — so the human can see why the order is what it is.
|
|
43
|
+
|
|
44
|
+
## Scope: sessions, not the tracker
|
|
45
|
+
|
|
46
|
+
This rule governs **session** stuckness. It does not touch the factory's tracker lifecycle vocabulary — the `blocked` role and the `human_needed` outcome used by `lisa-implement`, `lisa-repair-intake`, and the intake flows. That vocabulary is stricter and deliberately so: an item marked `human_needed` is one an adversarial gate decided a person must resolve, and nothing in this rule permits a session to re-classify it. If you are unsure which vocabulary you are in, ask whether you are describing your own next five minutes (this rule) or the state of a tracked work item (the factory contract).
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Waiting Is Not Blocked (load-bearing)"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Waiting Is Not Blocked (load-bearing)
|
|
7
|
+
|
|
8
|
+
Three rules that keep an active session from stalling:
|
|
9
|
+
|
|
10
|
+
1. **Poll, don't wait.** While the session is active, go check status yourself — roughly every 5 minutes. Never sit idle waiting for a subagent callback, a CI notification, or any automated message to arrive. If a result matters, go look for it.
|
|
11
|
+
2. **Blocked means you physically cannot proceed.** Waiting on a confirmation, a review, a running job, or someone's opinion is *waiting*, not blocked. Report it as waiting — and keep working on everything that does not depend on it.
|
|
12
|
+
3. **Plan phases are not sequential unless the user said so.** Absent a stated dependency, run them in parallel.
|
|
13
|
+
|
|
14
|
+
Idling is the expensive failure here: a session that waits produces nothing while still costing the human their attention and their clock.
|
|
15
|
+
|
|
16
|
+
This governs **session** stuckness only. The factory's tracker vocabulary — `human_needed` and the `blocked` lifecycle role used by `lisa-implement` and `lisa-repair-intake` — is stricter, unchanged, and not reclassified by this rule.
|
|
17
|
+
|
|
18
|
+
Full prose: [reference/not-blocked-just-waiting.md](not-blocked-just-waiting-reference.mdc).
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Session Status Updates — Plain Language, and Always Say If It's Safe to Close"
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Session Status Updates — Plain Language, and Always Say If It's Safe to Close
|
|
7
|
+
|
|
8
|
+
## Why this is a rule and not a style preference
|
|
9
|
+
|
|
10
|
+
Lisa's premise is that a non-technical person can direct software work by describing outcomes. That premise already binds everything crossing a gate outward — intake rejections, clarifying questions, ticket descriptions, verification reports — because a non-technical operator is standing at the gate.
|
|
11
|
+
|
|
12
|
+
In-session conversation was never held to the same bar, and the result was a split personality: careful, plain-language ticket prose and simultaneously a stream of chat messages full of file paths, rule slugs, and reasoning narrative. The human reading both is the same human. This rule closes the split.
|
|
13
|
+
|
|
14
|
+
## The three-part shape
|
|
15
|
+
|
|
16
|
+
Every update answers, in this order:
|
|
17
|
+
|
|
18
|
+
1. **What changed** — what is different in the world now that was not before. Shipped, fixed, filed, deployed.
|
|
19
|
+
2. **What's blocked** — using the strict meaning from `not-blocked-just-waiting`. If nothing is blocked, say so; "waiting on the CI run" belongs here labelled as waiting.
|
|
20
|
+
3. **What needs a decision** — see below.
|
|
21
|
+
|
|
22
|
+
What is deliberately excluded: how you found it. The files you read, the searches you ran, the hypotheses you discarded, the dead ends. That is your working memory, not their update. If they want it they will ask, and the offer to elaborate costs one clause.
|
|
23
|
+
|
|
24
|
+
## Voice
|
|
25
|
+
|
|
26
|
+
Write the way you would speak to a competent colleague who does not work on this system.
|
|
27
|
+
|
|
28
|
+
- Prefer the user-visible name of a thing over its implementation name. "The login page broke" beats "the auth guard regressed at the controller boundary."
|
|
29
|
+
- Do not use Lisa vocabulary (rung, gate, leaf, intake, ratchet) with someone who has not asked for it.
|
|
30
|
+
- Do not use a file path where a description works. Paths are for when the human will open the file.
|
|
31
|
+
- Short sentences. No preamble about what you are about to say.
|
|
32
|
+
|
|
33
|
+
Two lines the user themselves offered as the target: *"just tell me what's going on and what my options are"* and *"give me the summary, I'll ask for detail if I want it."*
|
|
34
|
+
|
|
35
|
+
## Decisions
|
|
36
|
+
|
|
37
|
+
A decision presented as a paragraph of context is a decision the human has to excavate. State it as a decision:
|
|
38
|
+
|
|
39
|
+
- **The decision** — one sentence naming the choice to be made.
|
|
40
|
+
- **Your recommendation** — you have more context than they do; do not withhold it. Recommending is not deciding.
|
|
41
|
+
- **The ramifications of each option** — one line apiece, in terms of consequences they care about (time, cost, risk, what breaks, what it forecloses), not in terms of implementation.
|
|
42
|
+
|
|
43
|
+
An option you consider unacceptable is still listed, with the reason it is unacceptable. Presenting one option as if it were the only one is a decision you made on their behalf without saying so.
|
|
44
|
+
|
|
45
|
+
## The close line
|
|
46
|
+
|
|
47
|
+
Every update ends with exactly:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Safe to close: yes/no — <reason>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`yes` means killing the session right now loses nothing: work is committed and pushed, tickets are in the state they should be in, nothing is running that will not finish on its own.
|
|
54
|
+
|
|
55
|
+
`no` names the specific in-flight thing that would be lost. Real examples: a local dev server or test run still going; a ticket filed but not yet flipped to ready, so nothing will pick it up; a commit that exists only in the working tree; a PR whose checks nobody is watching; a deploy mid-flight.
|
|
56
|
+
|
|
57
|
+
The line exists because the human's most common question — asked or unasked — is "can I close this?" Making them ask it costs a round trip; making them guess costs them work.
|
|
58
|
+
|
|
59
|
+
## Relationship to the other communication rules
|
|
60
|
+
|
|
61
|
+
- `report-actionability` governs **completeness**: the denominator, every item accounted for, who acts on each. It is about what a report must contain.
|
|
62
|
+
- `automation-runbook-contract` governs the **outcome line** a terminating flow opens with.
|
|
63
|
+
- This rule governs the **voice** of a session update, its three-part shape, and the close line.
|
|
64
|
+
|
|
65
|
+
None of the three is relaxed by the others. An update can satisfy all three at once and usually should: outcome line first, denominator stated, plain language throughout, close line last.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Session Status Updates — Plain Language, and Always Say If It's Safe to Close (load-bearing)"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Session Status Updates — Plain Language, and Always Say If It's Safe to Close (load-bearing)
|
|
7
|
+
|
|
8
|
+
Every update you give a human answers three things: **what changed, what's blocked, and what needs a decision.** Not how you found it, not what you searched, not the story of your reasoning. They will ask for detail if they want it.
|
|
9
|
+
|
|
10
|
+
Assume the reader is **non-technical** — the same obligation Lisa already places on everything crossing a gate outward (intake rejections, ticket descriptions, verification reports). Session chat is held to that bar, so factory output and conversation sound alike.
|
|
11
|
+
|
|
12
|
+
## Mandatory
|
|
13
|
+
|
|
14
|
+
- **Plain, conversational language.** No jargon, no Lisa vocabulary, no tool or file names the reader has no use for. Say "the login page broke", not "the auth guard regressed at the controller boundary".
|
|
15
|
+
- **A decision is presented as a decision** — never buried in a status paragraph the reader has to mine. State the choice, give **your recommendation**, and name the **ramifications** of each option in one line apiece.
|
|
16
|
+
- **End every update with a close line**, exactly this shape:
|
|
17
|
+
|
|
18
|
+
`Safe to close: yes/no — <reason>`
|
|
19
|
+
|
|
20
|
+
`no` names the in-flight thing that would be lost: a local process still running, a ticket not yet flipped to ready, an unpushed commit, a PR nobody is watching. A human must be able to glance at your last message and know whether killing the session costs them work.
|
|
21
|
+
|
|
22
|
+
This is the *voice* rule. `report-actionability` governs what a report must account for, and `automation-runbook-contract` governs the outcome line a terminating flow opens with; neither is relaxed here.
|
|
23
|
+
|
|
24
|
+
Full prose: [reference/session-status-updates.md](session-status-updates-reference.mdc).
|
|
@@ -14,13 +14,29 @@ A project has a wiki in one of two shapes:
|
|
|
14
14
|
|
|
15
15
|
Either way, freshness is not your concern. The query and ingest skills run `scripts/ensure-wiki.mjs` as their own first step, which resolves the wiki root and — for a remote wiki — clones the mirror if missing and fast-forwards it when stale (subject to a short TTL, and tolerant of being offline: it proceeds with the existing mirror and warns rather than blocking). The freshness guarantee lives in the tool, not in the caller's discipline. Do **not** add a separate "make sure the wiki is current" step to your own workflow — calling the skill already does it.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
## Load posture: on demand, not at session start
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
The wiki is **not** read during session bootstrap, and no flow may add a "load the wiki" step to its startup. This is a deliberate reversal of the rule's earlier "consult the wiki first" posture, recorded in `wiki/decisions/2026-08-12-agent-neutral-host-rules-path.md` section 6 (decision D3). The reasoning is context budget: the wiki is deep declarative knowledge, which is the WIKI rung of the learnings ladder precisely *because* it should be paid for only when routed to. Loading it unconditionally converts an on-demand rung into an eager one and charges every session — including the large majority that never ask a knowledge question — for knowledge they do not use.
|
|
20
|
+
|
|
21
|
+
What survives the softening is discoverability. An agent must **know the wiki exists and know how to query it**, so that a question needing depth goes to the curated answer instead of a fresh scrape of the codebase. What is dropped is the obligation to consult it before every piece of research, and the framing of the wiki as the authority that outranks primary sources.
|
|
22
|
+
|
|
23
|
+
When you do need project depth:
|
|
24
|
+
|
|
25
|
+
1. Call the wiki query skill (`/lisa-wiki-query`, or the runtime's equivalent), which resolves the wiki root for you. For a local wiki you may also start from `wiki/index.md` and follow links.
|
|
26
|
+
2. Prefer what the wiki says over re-deriving the same answer from raw sources — that is what it is curated for.
|
|
27
|
+
3. Fall back to primary sources (code, tickets, commit history, external docs) when the wiki is silent, ambiguous, or contradicted by what you observe in the code.
|
|
22
28
|
4. If you find the wiki is wrong, stale, or missing knowledge that belongs there, surface the gap — and where the project's workflow supports it, capture the correction back into the wiki via its ingestion path (`/lisa-wiki-ingest` or equivalent) rather than leaving the knowledge only in this session.
|
|
23
29
|
|
|
24
30
|
The wiki documents knowledge; it does not override executable behavior. When the wiki and the running code disagree about what the system actually does, trust the code and treat the wiki as out of date. See the `documentation-source-paths` rule for how source-material directories relate to the wiki.
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
## Applicability is the plugin gate, not just the wiki content
|
|
33
|
+
|
|
34
|
+
This rule ships in the **base** plugin, but the skill it directs you to (`lisa-wiki-query`) ships in the **wiki** plugin. Those are gated differently, and for a period a base-only project received this rule pointing at a skill it did not have — a rule with a dangling instruction, which teaches an agent to distrust its rules.
|
|
35
|
+
|
|
36
|
+
The applicability condition is therefore stated as the *installation* gate rather than as "does a `wiki/` folder exist". The `lisa-wiki` plugin is selected when `wiki/lisa-wiki.config.json` exists **or** `.lisa.config.json` declares a top-level `wiki` key (`src/core/lisa-plugin-selection.ts`); on Claude Code it is additionally gated by `enabledPlugins["lisa-wiki@lisa"]` in `.claude/settings.json`. When that gate is not satisfied:
|
|
37
|
+
|
|
38
|
+
- This rule does not apply. There is no wiki to query and no query skill to call.
|
|
39
|
+
- The recovery path is `/lisa-wiki-install`, the bootstrap skill that **base** ships precisely so a project that never enabled the wiki plugin can still discover it. Naming a base-shipped skill is what keeps the instruction reachable in every install.
|
|
40
|
+
- **Never block on the absent skill.** Degrade to primary sources and continue, per the same degrade-never-block posture `readiness-rubric` and `rejection-detection` use for surfaces that may not be installed.
|
|
41
|
+
|
|
42
|
+
A remote-only wiki declared through `wiki.source` is covered by the `wiki` config key, so the pointer form satisfies the same gate.
|
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Wiki as Knowledge Source (load-bearing)"
|
|
2
|
+
description: "Wiki as Knowledge Source — Query It on Demand (load-bearing)"
|
|
3
3
|
alwaysApply: true
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Wiki as Knowledge Source (load-bearing)
|
|
6
|
+
# Wiki as Knowledge Source — Query It on Demand (load-bearing)
|
|
7
7
|
|
|
8
|
-
If the project has an LLM Wiki,
|
|
8
|
+
If the project has an LLM Wiki, it is the curated store of durable project knowledge: background, conventions, ownership, architecture, glossary, "how and why does X work here". Documentation rolls UP into that wiki; individual repos are not expected to carry their own prose docs beyond inline code comments.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
**Do not load the wiki at session start.** It is deep knowledge, and paying for it on every session is exactly the cost the on-demand rungs of the `learnings-ladder` exist to avoid. Know it is there; go get it when you actually need depth.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
When you do need it, call `/lisa-wiki-query`. You never have to fetch or freshness-check the wiki yourself — the query and ingest skills resolve the wiki root and guarantee it is current (`scripts/ensure-wiki.mjs`) as their own first step: a local wiki resolves instantly, a remote wiki is mirrored and refreshed transparently. Prefer what the wiki says over re-deriving it from raw sources, and fall back to code, tickets, and history when it is silent, ambiguous, or contradicted by what you observe.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
2. **Use what the wiki says** as the authoritative answer when it covers the question — do not re-derive it from raw sources.
|
|
16
|
-
3. **Fall back to primary sources** (code, tickets, commit history, external docs) only when the wiki is silent, ambiguous, or contradicted by what you observe.
|
|
17
|
-
4. **Surface gaps.** If the wiki is wrong, stale, or missing knowledge that belongs there, flag it — and where the workflow supports it, capture the correction via `/lisa-wiki-ingest`.
|
|
14
|
+
If the wiki is wrong, stale, or missing knowledge that belongs there, capture the correction via `/lisa-wiki-ingest` rather than leaving it in this session. The wiki documents knowledge; it does NOT override executable behavior — when wiki and running code disagree about what the system does, trust the code.
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
If the project has neither a local `wiki/` nor a `wiki.source` pointer, this rule does not apply.
|
|
16
|
+
**Applicability.** This rule applies only when the `lisa-wiki` plugin is installed, which is gated on `wiki/lisa-wiki.config.json` existing or `.lisa.config.json` declaring a `wiki` key. Without that, the query skill is not present and this rule does not apply — run `/lisa-wiki-install` (shipped in base) to enable the wiki. Never treat the absent skill as a blocker.
|
|
22
17
|
|
|
23
18
|
Full prose: [reference/wiki-knowledge-source.md](wiki-knowledge-source-reference.mdc).
|