@gtrabanco/pi-agentic-workflow 0.26.0 → 0.31.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/README.md +82 -0
- package/dist/config/defaults.js +3 -0
- package/dist/config/merge.js +5 -0
- package/dist/config/schema.d.ts +0 -5
- package/dist/config/schema.js +31 -1
- package/dist/config/types.d.ts +15 -0
- package/dist/extension/engram.d.ts +119 -0
- package/dist/extension/engram.js +187 -0
- package/dist/extension/factory.d.ts +6 -0
- package/dist/extension/factory.js +9 -0
- package/dist/extension/index.js +86 -1
- package/dist/routing/serena-readiness.d.ts +77 -0
- package/dist/routing/serena-readiness.js +142 -0
- package/dist/routing/state.d.ts +32 -0
- package/dist/routing/state.js +51 -0
- package/dist/settings/console.js +68 -22
- package/package.json +5 -3
- package/skills/execute-phase/SKILL.md +11 -2
- package/skills/init-workspace/SKILL.md +30 -11
- package/skills/init-workspace/references/BOOTSTRAP_DISCOVERY.md +6 -0
- package/skills/init-workspace/references/BOOTSTRAP_WRITE.md +21 -12
- package/skills/init-workspace/references/ENGRAM.md +107 -0
- package/skills/init-workspace/references/SERENA.md +92 -6
- package/skills/init-workspace/references/UPGRADE.md +9 -7
- package/skills/log-session/SKILL.md +17 -1
- package/skills/unit-lane/SKILL.md +17 -1
- package/skills/unit-lane/references/MEMORY.md +179 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: init-workspace
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 4.0
|
|
4
|
+
version: 4.2.0
|
|
5
5
|
argument-hint: <target-dir>
|
|
6
6
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -26,7 +26,8 @@ raw placeholders.
|
|
|
26
26
|
three-tier dispatch and stops with the dispatcher's `open-questions@1` block
|
|
27
27
|
— against a scratch unit folder when no unit exists yet (§Consent).
|
|
28
28
|
✓ The adapted scaffold and repository-state ledger are written (or the merge/abort decision was asked) and remaining placeholders are listed
|
|
29
|
-
✓ Nothing was installed or overwritten
|
|
29
|
+
✓ Nothing was installed, registered (MCP) or overwritten — including the global
|
|
30
|
+
Serena config — without an explicit yes
|
|
30
31
|
✓ Artifact language: explicit user instruction > the project's declared docs language > English. The CONVERSATION language never decides — a Spanish prompt still produces English PRs/issues/commits/SPECs unless one of the first two says otherwise
|
|
31
32
|
✓ The closing `→ Next:` block is printed as the ABSOLUTE last output
|
|
32
33
|
```
|
|
@@ -77,7 +78,7 @@ Inspect the target dir (`[target-dir]`, default cwd) before touching anything:
|
|
|
77
78
|
|
|
78
79
|
## Progressive loading — bootstrap or upgrade, never both
|
|
79
80
|
|
|
80
|
-
The reference allowlist is exactly the
|
|
81
|
+
The reference allowlist is exactly the six linked paths below. Never invent or
|
|
81
82
|
read another `references/` path. Step 0 selects exactly one route:
|
|
82
83
|
|
|
83
84
|
**Hard rule for an existing Claude Code, Cursor, Copilot, or OpenCode
|
|
@@ -94,6 +95,10 @@ or portability unless the runtime platform has no named adapter at all.
|
|
|
94
95
|
only. Its additive-only rule is absolute; do not replay bootstrap.
|
|
95
96
|
The upgrade route loads [SERENA language servers](references/SERENA.md)
|
|
96
97
|
for the additive provisioning step.
|
|
98
|
+
- Provisioning Engram on a host with no pi package: read
|
|
99
|
+
[Engram provisioning](references/ENGRAM.md) — detect, ask, register or
|
|
100
|
+
instruct, report. Loaded by the bootstrap write route only (the pi package
|
|
101
|
+
provisions itself, feature 66).
|
|
97
102
|
- No named adapter exists for the detected runtime platform: add
|
|
98
103
|
[portability](references/PORTABILITY.md) only for that fallback. Claude Code,
|
|
99
104
|
Cursor, Copilot, and OpenCode are named supported adapters; a missing adapter
|
|
@@ -122,12 +127,23 @@ loads exactly upgrade and skips bootstrap plus portability.
|
|
|
122
127
|
on its own. **The urgency label seeding is additive-only the same way:**
|
|
123
128
|
create a missing `urgent`/`fix-next` label, never touch one that already
|
|
124
129
|
exists (name, color, or description a project already customized).
|
|
125
|
-
- **Serena convention.** `.serena/project.yml`
|
|
126
|
-
and `cache` stay local. Never write
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
- **Serena convention — tool and config, one consent question.** `.serena/project.yml`
|
|
131
|
+
is committed; `project.local.yml` and `cache` stay local. Never write
|
|
132
|
+
`.serena/` config, install the tool, register an MCP server or touch the
|
|
133
|
+
global `serena_config.yml` (`trusted_project_path_patterns`) without an
|
|
134
|
+
explicit yes — [SERENA](references/SERENA.md) owns the single question and
|
|
135
|
+
the fixed provisioning report. LSP never verifies documents — false positives
|
|
136
|
+
happen when a file type's server is not listed (markdown/yaml/json are never
|
|
137
|
+
auto-detected), a listed server that fails to start must be removed (one
|
|
138
|
+
failure disables every server in the project), and LSP evidence stays
|
|
139
|
+
TypeScript/JavaScript-only. Document verification is a script's job.
|
|
140
|
+
- **Engram provisioning is ask-first, never assumed (feature 66).** Detect the
|
|
141
|
+
`engram` binary, ask before writing any host MCP config, write the absolute
|
|
142
|
+
path with the exact `mcp --tools=agent` argv, and report exactly what was
|
|
143
|
+
written. An existing `engram` declaration is never overwritten, and an absent
|
|
144
|
+
binary is a recorded residual — the documented install route is
|
|
145
|
+
`pi install npm:gentle-engram@latest`, never the CLI's own setup subcommand,
|
|
146
|
+
which keeps serving whatever version ran it until it is re-run.
|
|
131
147
|
- **Retrieval index scaffold and git hooks are consent-gated (AC22).** The
|
|
132
148
|
index surface — the committed `.agentic-workflow/index.json` config plus the
|
|
133
149
|
three freshness hooks (`post-merge`, `post-checkout`, `post-rewrite`, all
|
|
@@ -217,8 +233,11 @@ OpenCode adapter does not load this fallback.
|
|
|
217
233
|
listed as a residual when its hook API/dependency was unavailable.
|
|
218
234
|
The adaptive lane conventions (unit document, triage, catalog steps, guards,
|
|
219
235
|
evidence, commit formats) are written into AGENTS.md.
|
|
220
|
-
-
|
|
221
|
-
reason,
|
|
236
|
+
- Serena is provisioned and reported: the one consent question was asked, the
|
|
237
|
+
project config written (or skipped with its reason), the tool installed and its
|
|
238
|
+
MCP server registered for the detected platform — or each refused/absent item
|
|
239
|
+
recorded as a residual with its reason — and the fixed provisioning report
|
|
240
|
+
states the health check per listed server. The run completes either way.
|
|
222
241
|
- **The closing `→ Next:` block is printed** (plus the offer to install the skills):
|
|
223
242
|
|
|
224
243
|
```
|
|
@@ -69,3 +69,9 @@
|
|
|
69
69
|
website itself.
|
|
70
70
|
- **Naming conventions**, **MCP servers**, and **Serena language servers** (see
|
|
71
71
|
[SERENA](SERENA.md) for the mapping), if any.
|
|
72
|
+
- **Serena footprint** — the platform whose MCP config is the one to register
|
|
73
|
+
(Claude Code, Cursor, VS Code/Copilot, Codex, JetBrains), the installers
|
|
74
|
+
actually present (`uv --version`, `pipx --version`), and whether the global
|
|
75
|
+
`serena_config.yml` already covers this project root under
|
|
76
|
+
`trusted_project_path_patterns`. The write step offers **one** consent
|
|
77
|
+
question from these three facts; it never asks a second time.
|
|
@@ -24,14 +24,23 @@
|
|
|
24
24
|
7. **Propagate the unit doc template.** Ensure
|
|
25
25
|
`docs/features/_TEMPLATE/SPEC.md` exists with all 14 sections sections.
|
|
26
26
|
This is the template used when creating new unit documents.
|
|
27
|
-
8. **Provision
|
|
28
|
-
[SERENA](SERENA.md)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
8. **Provision Serena — one consented question, then write.** Load
|
|
28
|
+
[SERENA](SERENA.md) and ask its single consent question; one yes covers the
|
|
29
|
+
tool install, the detected platform's MCP registration and the global trust
|
|
30
|
+
append, and a refusal installs, registers and writes **nothing**. On yes:
|
|
31
|
+
(a) append the `.gitignore` block additively (skip when already present);
|
|
32
|
+
(b) write `.serena/project.yml` with the `language_servers` list for every
|
|
33
|
+
detected language (never overwrite an existing file — report it); (c) run the
|
|
34
|
+
health check and render the fixed provisioning report. When no installer is
|
|
35
|
+
available, offer only what the machine can perform and record the residual
|
|
36
|
+
with its reason — the run completes either way.
|
|
37
|
+
9. **Offer Engram provisioning.** Load [ENGRAM](ENGRAM.md), detect the binary
|
|
38
|
+
and ask consent: register the `engram` MCP server (absolute path, exact
|
|
39
|
+
`mcp --tools=agent` argv) when the host has one, leave an existing
|
|
40
|
+
declaration untouched, and report exactly what was written. An absent binary
|
|
41
|
+
becomes a residual with the documented install route — never a failed run.
|
|
42
|
+
Skip this step when the pi package provisions the host itself.
|
|
43
|
+
10. **Install accepted agent safety hooks.** Keep the canonical policy and
|
|
35
44
|
fullauto wrapper at `.agentic-workflow/hooks/`. Seed the shipped
|
|
36
45
|
path-protection policy at `.agentic-workflow/path-policy.json` and its doc
|
|
37
46
|
page at `.agentic-workflow/path-protection.md`, beside the hooks — the
|
|
@@ -44,10 +53,10 @@
|
|
|
44
53
|
an unknown payload, or an existing customized hook file becomes a residual,
|
|
45
54
|
never a silent overwrite. Direct merges remain blocked; do not create a
|
|
46
55
|
`.automerge` exception.
|
|
47
|
-
|
|
56
|
+
11. **Offer the workflow skills.** Propose installing them:
|
|
48
57
|
`npx skills add gtrabanco/agentic-workflow` (note the SSH/local-path variant if
|
|
49
58
|
the source is private). Don't install without a yes.
|
|
50
|
-
|
|
59
|
+
12. **State that reviews are self-contained; offer optional extras.** The
|
|
51
60
|
workflow ships its **own internal review pack** (`review-code`,
|
|
52
61
|
`review-security`, `review-verify`, `review-debt`, `review-design`,
|
|
53
62
|
`review-a11y`, `review-brand`, `review-perf`, `review-seo`) — it installs
|
|
@@ -57,7 +66,7 @@
|
|
|
57
66
|
under a short "Optional review extras" note so `review-change` and
|
|
58
67
|
`product-audit` run them **in addition** — never as a dependency. Don't
|
|
59
68
|
install anything without a yes.
|
|
60
|
-
|
|
69
|
+
13. **Seed the urgency labels (feature 15, injection-safe urgency).** Create the
|
|
61
70
|
two capability-gated GitHub labels `triage-issue` owns and applies
|
|
62
71
|
(`skills/triage-issue/SKILL.md` is the sole owner of the name/color
|
|
63
72
|
vocabulary — this step only seeds it, never redefines it):
|
|
@@ -70,7 +79,7 @@
|
|
|
70
79
|
forge is unavailable or the user declines forge setup, skip this step and
|
|
71
80
|
list the two labels as a residual for the user to create manually later
|
|
72
81
|
(never fail the whole scaffold on it).
|
|
73
|
-
|
|
82
|
+
14. **Report.** List what was created, which placeholders still need human input,
|
|
74
83
|
the companion skills recorded/installed, the urgency labels seeded (or
|
|
75
84
|
skipped, with reason), and the next step:
|
|
76
85
|
`discover-repository-state` → `/unit-lane` (or `workflow-status`) → catalog
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
## Why this step exists
|
|
2
|
+
|
|
3
|
+
The workflow's units save what they learned into Engram, the cross-session
|
|
4
|
+
memory layer its memory protocol documents. On a host whose agent has no `pi`
|
|
5
|
+
package to provision it (the pi package registers the server itself, feature
|
|
6
|
+
66 P4), the target project has no memory layer at all unless this step offers
|
|
7
|
+
one — so Engram provisioning is a **parity obligation**, not an optional extra:
|
|
8
|
+
feature 66's approval is that the pi path registers it and every other host is
|
|
9
|
+
offered the same thing ask-first.
|
|
10
|
+
|
|
11
|
+
## What this file owns
|
|
12
|
+
|
|
13
|
+
The **non-pi** half of Engram provisioning. It owns exactly four moves —
|
|
14
|
+
detect, ask, provision-or-instruct, report — and nothing else. The workflow-side
|
|
15
|
+
protocol (when units save, the recall order, the degraded path) is **not** here;
|
|
16
|
+
it lives in `unit-lane`'s memory reference, which the skills that run units
|
|
17
|
+
already load.
|
|
18
|
+
|
|
19
|
+
## 1. Detect
|
|
20
|
+
|
|
21
|
+
Look for the `engram` binary on `PATH` (`command -v engram`) and read its
|
|
22
|
+
version (`engram --version`). Two outcomes matter:
|
|
23
|
+
|
|
24
|
+
- **Present** — record the resolved path and the version fingerprint.
|
|
25
|
+
- **Absent** — record it as a residual, and go to step 2 with the install
|
|
26
|
+
guidance below rather than silently skipping the step.
|
|
27
|
+
|
|
28
|
+
Never write an MCP registration file for a binary that does not resolve: a
|
|
29
|
+
registered-but-unstartable server fails every session after it, which is a worse
|
|
30
|
+
default than an honest gap.
|
|
31
|
+
|
|
32
|
+
## 2. Ask, then do exactly what was agreed
|
|
33
|
+
|
|
34
|
+
This is a **consent-gated install** like every other in this skill. Ask one
|
|
35
|
+
question — "register Engram as the project's memory layer?" — and act on the
|
|
36
|
+
answer:
|
|
37
|
+
|
|
38
|
+
| Answer | What you do |
|
|
39
|
+
|---|---|
|
|
40
|
+
| yes | write the MCP registration named in step 3 and report it verbatim |
|
|
41
|
+
| no | write nothing, record it as a residual, finish the run normally |
|
|
42
|
+
| not installed | offer the install route below, and provision **only** if the user then says yes |
|
|
43
|
+
|
|
44
|
+
**The install route is `pi install npm:gentle-engram@latest`.** The CLI's own
|
|
45
|
+
setup subcommand is **not** the documented route and must never be printed as an
|
|
46
|
+
instruction: it pins whatever version ran it and keeps serving that version
|
|
47
|
+
until it is re-run, so an updated binary can sit unused behind a stale
|
|
48
|
+
registration (decision D3, 2026-10-21).
|
|
49
|
+
|
|
50
|
+
## 3. What "register" means on a non-pi host
|
|
51
|
+
|
|
52
|
+
There is no `pi.registerMcpServer` here, so the registration is a **declared
|
|
53
|
+
file** the host agent reads. Write the server into that host's own MCP config
|
|
54
|
+
(the agent's documented MCP surface), never into a file the host does not read:
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"mcpServers": {
|
|
59
|
+
"engram": { "command": "<absolute path to engram>", "args": ["mcp", "--tools=agent"] }
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Rules:**
|
|
65
|
+
|
|
66
|
+
- **Absolute path, never a bare name** — the host's `PATH` at load time is not
|
|
67
|
+
the shell's.
|
|
68
|
+
- **Args are exactly** `mcp` `--tools=agent`. A different argv changes which
|
|
69
|
+
tools the server exposes.
|
|
70
|
+
- **Never overwrite a server the user already declared** under the name
|
|
71
|
+
`engram` — a declared server wins over anything this step would add. Report
|
|
72
|
+
that you found it and left it alone.
|
|
73
|
+
- **Additive and idempotent** — a second run with the same content writes
|
|
74
|
+
nothing and says so.
|
|
75
|
+
|
|
76
|
+
## 4. Report exactly what was written
|
|
77
|
+
|
|
78
|
+
Every outcome ends in a report the user can read back:
|
|
79
|
+
|
|
80
|
+
- **Registered** — the file path, the server name, and the exact `command` +
|
|
81
|
+
`args` written.
|
|
82
|
+
- **Declined** — that nothing was written, and that the run continued.
|
|
83
|
+
- **Binary missing** — that nothing was written, the install route verbatim, and
|
|
84
|
+
that it is recorded as a residual.
|
|
85
|
+
- **Already declared** — the file that already carries it, and that it was left
|
|
86
|
+
untouched.
|
|
87
|
+
|
|
88
|
+
"Report exactly what was written" is the same contract the Serena step follows;
|
|
89
|
+
a provisioning step the user cannot read back is one they cannot trust.
|
|
90
|
+
|
|
91
|
+
## Checklist (pass only if)
|
|
92
|
+
|
|
93
|
+
- [ ] `engram` presence **and** version were detected (or absence recorded)
|
|
94
|
+
- [ ] Consent was asked before any file was written — never assumed
|
|
95
|
+
- [ ] The written server uses the absolute binary path and the exact argv
|
|
96
|
+
- [ ] An existing `engram` declaration was left untouched and reported
|
|
97
|
+
- [ ] A second run is a no-op
|
|
98
|
+
- [ ] The closing report states what was written — or that nothing was
|
|
99
|
+
|
|
100
|
+
## Forbidden
|
|
101
|
+
|
|
102
|
+
- Never print the CLI's own setup subcommand as the install route
|
|
103
|
+
- Never write an MCP config for an unresolved binary
|
|
104
|
+
- Never overwrite an operator's existing `engram` declaration
|
|
105
|
+
- Never let a memory gap fail the run — record it as a residual and continue
|
|
106
|
+
- Never restate the unit-boundary save/recall protocol here; that is the lane's
|
|
107
|
+
memory reference
|
|
@@ -93,6 +93,12 @@ check names the offending entry. Removing a failing entry (per the startup
|
|
|
93
93
|
rule below) is the correct remediation — never leave a dead entry in the file.
|
|
94
94
|
**Never claim LSP evidence for a run whose server never started.**
|
|
95
95
|
|
|
96
|
+
The report's `health:` line carries one entry per listed server. When the check
|
|
97
|
+
cannot run at all — no tool, no installer, or a refused consent, including a
|
|
98
|
+
refused **trust** append (§Trust) — it says so once, on that line, with the
|
|
99
|
+
reason, instead of reporting a pass: an absent check is a residual, never a
|
|
100
|
+
silent pass.
|
|
101
|
+
|
|
96
102
|
### Startup rule (critical)
|
|
97
103
|
|
|
98
104
|
> **A server that fails to start must not stay listed.** One failing entry
|
|
@@ -121,13 +127,93 @@ deterministic script's job regardless — LSP serves navigation and diagnostics,
|
|
|
121
127
|
not our document grammar. `node`+`npm` are required for json/yaml; `libicu` is
|
|
122
128
|
required for marksman.
|
|
123
129
|
|
|
124
|
-
##
|
|
130
|
+
## Provisioning the tool — one consented question
|
|
131
|
+
|
|
132
|
+
This file owns the **project config** *and* the tool that reads it. The install
|
|
133
|
+
half (`#219`) lands here as one step, never a second interview.
|
|
134
|
+
|
|
135
|
+
**Order inside the step (fixed):**
|
|
136
|
+
|
|
137
|
+
1. **Detect what can be performed** — `uv --version` first, then `pipx
|
|
138
|
+
--version`. Never offer a route the machine cannot run.
|
|
139
|
+
2. **Ask ONCE**, with the whole set in the question: the tool install, the MCP
|
|
140
|
+
registration for **the detected platform only**, and the global trust append
|
|
141
|
+
when the project root is not covered. One yes covers the set the question
|
|
142
|
+
names; a narrower yes narrows the set.
|
|
143
|
+
3. **On yes** — install, register, append trust, then report exactly what
|
|
144
|
+
happened (§Report).
|
|
145
|
+
4. **On no** — install nothing, register nothing, write nothing. Record the
|
|
146
|
+
absence as a residual with its reason and finish; the run still completes.
|
|
147
|
+
|
|
148
|
+
**Install routes, in the order tried:**
|
|
149
|
+
|
|
150
|
+
| Route | Command | When |
|
|
151
|
+
|---|---|---|
|
|
152
|
+
| preferred | `uv tool install -p 3.13 serena-agent`, then `serena init` | `uv` is on PATH |
|
|
153
|
+
| fallback | `pipx install serena-agent`, then `serena init` | `uv` absent, `pipx` present — **MCP path only** |
|
|
154
|
+
|
|
155
|
+
`serena init` creates the global `serena_config.yml` when absent and never
|
|
156
|
+
rewrites an existing one. `serena -V` prints `Serena <version>`: that is the
|
|
157
|
+
health reader, and the only proof the tool runs.
|
|
158
|
+
|
|
159
|
+
### MCP registration — the detected platform, its own shape
|
|
160
|
+
|
|
161
|
+
Register **one** server named `serena`, in the config file of the platform
|
|
162
|
+
Step 0 detected. Never write a cross-platform blob, and never write a second
|
|
163
|
+
platform's file "to be safe". A per-workspace file (`.vscode/mcp.json`,
|
|
164
|
+
`.cursor/mcp.json`) needs the same consent as the rest; a global one
|
|
165
|
+
(`~/.codex/config.toml`, the JetBrains `mcp.json`) is append-only — the one
|
|
166
|
+
entry, never another line.
|
|
167
|
+
|
|
168
|
+
| Detected | Where | Entry |
|
|
169
|
+
|---|---|---|
|
|
170
|
+
| Claude Code | `claude mcp add serena -- serena start-mcp-server --context claude-code --project "$(pwd)"` (user scope: `--scope user`, `--project-from-cwd`) | command `serena` |
|
|
171
|
+
| Copilot / VS Code | `.vscode/mcp.json` → `servers.serena` | `{"type":"stdio","command":"serena","args":["start-mcp-server","--context=vscode","--project","${workspaceFolder}"]}` |
|
|
172
|
+
| Cursor | `.cursor/mcp.json` → `mcpServers.serena` | `{"command":"serena","args":["start-mcp-server","--context=ide"]}` |
|
|
173
|
+
| JetBrains Copilot | the global `mcp.json` Copilot opens | `{"type":"stdio","command":"serena","args":["start-mcp-server","--context=jb-copilot-plugin"]}` |
|
|
174
|
+
| Codex | `~/.codex/config.toml` → `[mcp_servers.serena]` | `command = "serena"`, `args = ["start-mcp-server","--project-from-cwd","--context=codex"]` |
|
|
175
|
+
|
|
176
|
+
### Trust — the fresh clone (global config, consent-gated)
|
|
177
|
+
|
|
178
|
+
`trusted_project_path_patterns` lives in the user's **global** `serena_config.yml`,
|
|
179
|
+
not the project's `.serena/project.yml`, and a fresh config defaults it to `[]`.
|
|
180
|
+
A project root no pattern covers starts no language server, so the health check
|
|
181
|
+
fails with nothing in the project to blame.
|
|
182
|
+
|
|
183
|
+
- **Detect** — read the global config, test this project root against the
|
|
184
|
+
patterns.
|
|
185
|
+
- **Offer the append inside the same consented question.** This file is shared by
|
|
186
|
+
every project on the machine, so it is never written implicitly.
|
|
187
|
+
- **On yes** — append **one pattern naming this project root**. Never rewrite,
|
|
188
|
+
reorder or reformat any other line; an append is the only permitted edit.
|
|
189
|
+
- **On no** — record the untrusted state as the health-check residual. It is a
|
|
190
|
+
residual, not an error, and it never blocks the run.
|
|
191
|
+
|
|
192
|
+
### Report — exactly what happened
|
|
193
|
+
|
|
194
|
+
Close the step with this fixed block. "Installed" is never assumed and never
|
|
195
|
+
reported from the intent to install:
|
|
125
196
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
197
|
+
```text
|
|
198
|
+
SERENA PROVISIONING
|
|
199
|
+
tool: <installed | already present | refused | no installer | failed: <reason>>
|
|
200
|
+
version: <serena -V output, or n/a>
|
|
201
|
+
mcp: <registered <platform> -> <path> | already present | refused | failed: <reason>>
|
|
202
|
+
trust: <appended <pattern> | already covered | refused - untrusted | n/a>
|
|
203
|
+
config: <written .serena/project.yml | already present | skipped: <reason>>
|
|
204
|
+
health: <one line per listed server, see below>
|
|
205
|
+
residual: <none | the reason this run is degraded>
|
|
206
|
+
```
|
|
129
207
|
|
|
130
208
|
## Degraded path
|
|
131
209
|
|
|
132
|
-
Serena unavailable
|
|
133
|
-
|
|
210
|
+
Serena unavailable — no tool, no installer (`uv`, `pipx`), or a refused consent —
|
|
211
|
+
→ warn once, continue, and record the absence with its reason in the unit's
|
|
212
|
+
evidence. **Never block a run on it**, and never let a degraded run read as a
|
|
213
|
+
healthy one: the report says which line is missing and why.
|
|
214
|
+
|
|
215
|
+
LSP evidence itself stays confined to **TypeScript/JavaScript**: a diagnostic
|
|
216
|
+
from any other listed server is navigation aid, never verification evidence, and
|
|
217
|
+
no claim may cite it. Document verification (schema rules, required sections,
|
|
218
|
+
column counts) stays a **deterministic script's** job regardless — LSP serves
|
|
219
|
+
navigation, not our document grammar.
|
|
@@ -92,13 +92,15 @@ lacks**. Nine ordered steps:
|
|
|
92
92
|
rule as the doc blocks; a pre-existing `urgent`/`fix-next` label the
|
|
93
93
|
project recolored or redescribed is left exactly as-is).
|
|
94
94
|
|
|
95
|
-
8. **Provision
|
|
96
|
-
[SERENA](SERENA.md)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
8. **Provision Serena, additively only (Refs #219).** Load
|
|
96
|
+
[SERENA](SERENA.md) and ask its single consent question — the tool install,
|
|
97
|
+
the detected platform's MCP registration and the global trust append all ride
|
|
98
|
+
on that one yes, and a refusal writes nothing. Then append the `.gitignore`
|
|
99
|
+
block only if the target lacks it, and write `.serena/project.yml` only if it
|
|
100
|
+
is absent — never touch an existing one. Report what was skipped and why, run
|
|
101
|
+
the health check, and render the fixed provisioning report. This step is
|
|
102
|
+
additive-only; it never rewrites or deletes, consistent with upgrade mode's
|
|
103
|
+
rule.
|
|
102
104
|
9. **Report + hand off.** Summarize blocks added, filled, and skipped
|
|
103
105
|
(residuals), the legacy `CLAUDE.md` outcome (folded items and removed, or kept
|
|
104
106
|
with the reason), the urgency labels seeded (or already present), then print the
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: log-session
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.3.0
|
|
5
5
|
argument-hint: "[note to prepend to the entry]"
|
|
6
6
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -124,6 +124,22 @@ the HEAD sha and start time at session open.
|
|
|
124
124
|
open a PR just for a log entry, and never `git add -A` here — a concurrent
|
|
125
125
|
conversation's work must not be swept into a log commit.
|
|
126
126
|
|
|
127
|
+
## The canonical split — this skill's half (feature 66, D2)
|
|
128
|
+
|
|
129
|
+
Two writers exist on purpose; neither mirrors the other:
|
|
130
|
+
|
|
131
|
+
- **`docs/LOGS.md` (this skill)** is the **human/team journal** — what a session
|
|
132
|
+
set out to do, what it decided, where to resume. It travels with git, so a
|
|
133
|
+
teammate or a fresh clone reads it with no local state.
|
|
134
|
+
- **Engram (`mem_session_summary`, and the lane's `unit/<NN-slug>/doc` topic)**
|
|
135
|
+
is **local decision and gotcha recall keyed by unit id**, written by
|
|
136
|
+
`unit-lane` and `execute-phase` at unit boundaries. It stays on the machine.
|
|
137
|
+
|
|
138
|
+
Engram never mirrors this log, and this log never mirrors Engram: team memory
|
|
139
|
+
travels with git, agent recall stays local. Write the journal half here; the
|
|
140
|
+
protocol half (boundaries, recall order, degradation) lives in the lane's
|
|
141
|
+
memory reference, `../unit-lane/references/MEMORY.md`.
|
|
142
|
+
|
|
127
143
|
## Guardrails
|
|
128
144
|
|
|
129
145
|
- **Never use an expensive model for this.** It's summarization; `qwen3.6`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: unit-lane
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.4.1
|
|
5
5
|
argument-hint: <NN-slug | "<idea>"> [--retriage] | --fix <issue-number> | --from-issue <issue-number>
|
|
6
6
|
description: >
|
|
7
7
|
One-shot lane conductor for a delivery unit: triage, implement, evidence, and
|
|
@@ -39,6 +39,8 @@ done:
|
|
|
39
39
|
on BREACH: re-triage or record exception, never shrink the diff
|
|
40
40
|
✓ Unit doc's Evidence rows updated (command → exit/digest → output → verified-by)
|
|
41
41
|
and Progress log updated (dated entry) before every commit
|
|
42
|
+
✓ Memory boundaries ran — probe verdict once, saves at unit start / each phase
|
|
43
|
+
transition / close under `unit/<NN-slug>/doc`, degradation recorded as pending
|
|
42
44
|
✓ → Next: block printed as the absolute last output
|
|
43
45
|
```
|
|
44
46
|
|
|
@@ -167,6 +169,20 @@ Before every commit:
|
|
|
167
169
|
- **Progress log**: `YYYY-MM-DD HH:MM — <what was done> → <commit sha> — next:
|
|
168
170
|
<what is next>`
|
|
169
171
|
|
|
172
|
+
### 5b. Memory boundaries
|
|
173
|
+
|
|
174
|
+
Engram is the required memory substrate; a down layer never blocks a unit —
|
|
175
|
+
follow [the memory protocol](references/MEMORY.md).
|
|
176
|
+
|
|
177
|
+
- **Probe once**, before the first memory read: `agentic-workflow memory probe`
|
|
178
|
+
→ paste the verdict into Evidence; `degraded` is recorded and said once.
|
|
179
|
+
- **Save at unit start, each phase transition, and close** under
|
|
180
|
+
`topic_key: "unit/<NN-slug>/doc"`, with explicit `project` and explicit
|
|
181
|
+
session attribution (§5 names what carries it on each write surface).
|
|
182
|
+
- **Recall** `mem_context` → scoped search → one explicit `all_projects: true`
|
|
183
|
+
retry → `mem_get_observation` → the unit doc wins. A miss is keyword-bound,
|
|
184
|
+
never proof nothing was saved; an unavailable mirror is marked pending.
|
|
185
|
+
|
|
170
186
|
### 6. Close the unit — the close-out ladder
|
|
171
187
|
|
|
172
188
|
When all triaged steps are done, in order:
|