@rmrdeveloper/sideroom-pi 7.0.1 → 7.1.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 CHANGED
@@ -1,162 +1,182 @@
1
- # Sideroom Pi
1
+ # Sideroom Pi — the side room your agent was missing
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@rmrdeveloper/sideroom-pi?label=npm&logo=npm)](https://www.npmjs.com/package/@rmrdeveloper/sideroom-pi)
4
4
  [![npm monthly downloads](https://img.shields.io/npm/dm/@rmrdeveloper/sideroom-pi?label=downloads&logo=npm)](https://www.npmjs.com/package/@rmrdeveloper/sideroom-pi)
5
5
  [![npm license](https://img.shields.io/npm/l/@rmrdeveloper/sideroom-pi?label=license)](https://www.npmjs.com/package/@rmrdeveloper/sideroom-pi)
6
6
 
7
- Sideroom Pi is a global [Pi package](https://pi.dev/docs/latest/packages). It
8
- registers two parent-agent tools: `sideroom_ask`, a TUI questionnaire for
9
- clarifying decisions, and `sideroom_todo`, a live work board shown above the
10
- editor. It also shows a session-scoped list of files successfully edited by Pi,
11
- and steers write/edit toward packaged coding guidelines. It writes no `.pi`
12
- configuration, task graph, or other Sideroom files into the repository you are
13
- working in.
7
+ > Coding agents fail in predictable ways: they guess instead of asking, they
8
+ > bury progress in chat scroll, they litter your repo with `TODO.md` files,
9
+ > and every session writes code in a slightly different style.
10
+ >
11
+ > **Sideroom fixes all four — without touching your repository.**
12
+
13
+ Sideroom Pi is a global [Pi package](https://pi.dev/docs/latest/packages)
14
+ that gives the parent agent a *side room* next to your code: a place to ask
15
+ sharp questions, show live progress, track what changed, and stay honest
16
+ about code quality. The room lives in the Pi session, not in your repo. No
17
+ `.pi` config, no task graph, no Sideroom files left behind.
18
+
19
+ ## Why Sideroom exists
20
+
21
+ Every long agent session drifts toward the same failure modes:
22
+
23
+ 1. **Silent guessing.** The agent hits an ambiguous decision and picks
24
+ something instead of asking — because asking in plain chat is awkward
25
+ and easy to ignore.
26
+ 2. **Invisible work.** "What is it doing? Which step is it on? Did it skip
27
+ something?" Progress disappears into thousands of lines of transcript.
28
+ 3. **Repo pollution.** Workarounds appear as `todos.json`, scratch notes,
29
+ and half-abandoned plans committed next to real code.
30
+ 4. **Style drift.** Each session reinvents conventions: nesting depth, error
31
+ handling, naming, validation. Review becomes cleanup.
32
+
33
+ Sideroom answers each one with a small, opinionated surface:
34
+
35
+ | Failure | Sideroom answer |
36
+ | --- | --- |
37
+ | Silent guessing | `sideroom_ask` — questions with an opinion, one batch at a time |
38
+ | Invisible work | `sideroom_todo` — a live board above the editor, always one step in focus |
39
+ | Repo pollution | Session-branch state — the board and history die with the session, never with a commit |
40
+ | Style drift | A one-line reminder + the on-demand `sideroom-guidelines` skill |
41
+ | Vague plans | `sideroom-grill` — an interview that settles the words before the work |
42
+
43
+ ## What it feels like
44
+
45
+ You ask the agent for something non-trivial. Instead of vanishing into a
46
+ wall of tool calls, it:
47
+
48
+ - **Asks like a senior would.** A clean TUI questionnaire appears — tabs for
49
+ several questions, a simple list for one. Every question carries a
50
+ recommendation, you can always answer *Out of scope* or write your own,
51
+ and everything is written in your language. Escape cancels the whole
52
+ batch. No guessing, no twenty follow-up clarifications in chat.
53
+ - **Works in the open.** A compact board sits above the editor:
54
+ `pending → in_progress → completed`. Exactly one step is active at a
55
+ time; the agent completes the current step and starts the next one in the
56
+ same move, so skipped steps become structurally hard. The board survives
57
+ reload, tree navigation, and compaction.
58
+ - **Shows its traces.** Below the board, the last edited files appear as
59
+ clickable `file://` links. `F8` opens the full session history; `R` clears
60
+ it. Only successful Pi `write`/`edit` calls are tracked — no guesses from
61
+ shell output, Git, or subagents.
62
+ - **Writes code that reads the same every time.** Before every edit, the
63
+ agent is nudged toward one shared checklist: guard clauses, braced
64
+ conditionals, fail fast, one responsibility per unit, no speculative
65
+ layers. Language-specific deltas for Java, PHP/Laravel, TypeScript,
66
+ Python, Go, and Rust load on demand — never dumped into the prompt.
67
+
68
+ ## What's inside
69
+
70
+ ### `sideroom_ask` — decisions, not interrogations
71
+
72
+ One call is one 1–N question batch. Each question needs an `id`, a `prompt`,
73
+ at least two `{ value, label }` options, and a `recommendationIndex` pointing
74
+ at the recommended option. The UI adds the rest: the recommended mark, the
75
+ always-on *Out of scope* row, and a custom answer.
76
+
77
+ TUI-only by design. In print, JSON, or RPC modes it fails fast with
78
+ `UI not available` instead of hanging.
79
+
80
+ ### `sideroom_todo` — a board, not a bureaucracy
81
+
82
+ A display-only, ordered work board. The agent maintains it; you steer through
83
+ chat. It never creates a repository task file or a `/todos` command.
84
+
85
+ - `propose` replaces the full board (interactive TUI only).
86
+ - `update` patches `{ id, status?, content? }` items and works everywhere,
87
+ including headless modes.
88
+ - Invariant: while anything is pending, exactly one item is `in_progress`.
89
+
90
+ ### Edited files — proof, not promises
91
+
92
+ Automatic tracking of successful `write` and `edit` results for the active
93
+ session. The compact view shows at most five recent paths below an active
94
+ board; the extended `F8` view scrolls through everything. Paths outside the
95
+ project are labelled `external`. A new session starts clean.
96
+
97
+ ### Grill — settle the words first
98
+
99
+ An on-demand skill for fuzzy plans. It interviews you in `sideroom_ask`
100
+ rounds — reading the codebase first so it never asks what the code already
101
+ says — until you share one understanding. Resolved terms land in
102
+ `CONTEXT.md` the moment they resolve; hard decisions land as ADRs under
103
+ `docs/adr/`. Everything else stays in the conversation, ready to become a
104
+ spec or an implementation. Vocabulary sharpening during the rounds follows
105
+ the companion `sideroom-domain-modeling` skill, which also runs on its own
106
+ whenever the words — not the plan — are the problem. And when there is no
107
+ one to interview at all, `sideroom-domain-scaffold` reads the central
108
+ domain code as source of truth, builds or completes `CONTEXT.md` on its
109
+ own, and grills the conflicting terms once, at the end.
110
+
111
+ ### Guidelines — a nudge, not a novel
112
+
113
+ A short system-prompt reminder points at the packaged
114
+ `sideroom-guidelines` skill. The skill body holds the shared Do/Don't table;
115
+ one matching file under `skills/sideroom-guidelines/references/languages/`
116
+ covers the language being edited. The canonical seed,
117
+ `assets/artifacts/GUIDELINES_TEMPLATE.md`, is never pasted into the prompt.
14
118
 
15
119
  ## Quick path
16
120
 
17
- 1. Install globally from npm. Pi writes this installation to your user
18
- settings, so do not use `-l`.
121
+ 1. Install globally from npm. Pi records this in your user settings, so do
122
+ not use `-l`.
19
123
 
20
124
  ```bash
21
125
  pi install npm:@rmrdeveloper/sideroom-pi
22
126
  ```
23
127
 
24
128
  2. Start Pi in the repository you want to work in.
25
- 3. Ask the parent agent a question that needs a decision or a visible work
26
- board. It can call `sideroom_ask` or `sideroom_todo` in the TUI.
129
+ 3. Ask the parent agent something that needs a decision or a visible plan.
130
+ It calls `sideroom_ask` or `sideroom_todo` in the TUI.
27
131
 
28
- For a reproducible environment, pin a release. A pinned version does not move
29
- when you run Pi's package update command.
132
+ Pin for reproducibility — a pinned version does not move on Pi's package
133
+ update:
30
134
 
31
135
  ```bash
32
136
  pi install npm:@rmrdeveloper/sideroom-pi@7.0.0
33
137
  ```
34
138
 
35
- To update an unpinned installation:
139
+ Update an unpinned installation with:
36
140
 
37
141
  ```bash
38
142
  pi update --extension npm:@rmrdeveloper/sideroom-pi
39
143
  ```
40
144
 
41
- ## Details
145
+ ## Reference
42
146
 
43
- | Topic | Decision |
44
- | --- | --- |
45
- | Surface | Two LLM-callable tools: `sideroom_ask` and `sideroom_todo`. No `/sideroom` command. |
46
- | Questionnaire | One `sideroom_ask` call is one 1–N question batch; every question has `recommendationIndex`. |
47
- | Always-on rows | The questionnaire UI adds Out of scope and a custom answer. Do not send those options. |
48
- | Work board | `sideroom_todo propose` replaces a visible board; `update` patches items by id. |
49
- | Headless | `sideroom_todo update` works in print, JSON, and RPC. `propose` and `sideroom_ask` return `Error: UI not available` there. |
50
- | Edited files | Successful `write` and `edit` results appear below an active work board; `F8` opens the full list. |
51
- | Session state | The work board and edited-file history live in the Pi session branch, not in the target repository. |
52
- | Coding guidelines | A short system-prompt reminder points at the `sideroom-guidelines` skill. Language deltas load on demand. |
53
- | Seed artifact | `assets/artifacts/GUIDELINES_TEMPLATE.md` is the canonical seed; it is not dumped into the prompt. |
54
-
55
- ## Tool
56
-
57
- `sideroom_ask` follows Pi's questionnaire UI: a simple list for one question,
58
- tabs plus Submit for several. Write prompts, tab labels, and option copy in
59
- the language the user is speaking; ids, option values, and TUI chrome stay
60
- English. Each question needs:
61
-
62
- - `id`
63
- - `prompt`
64
- - at least two `{ value, label, description? }` options
65
- - `recommendationIndex` pointing at the recommended option
66
- - optional `label` for the tab bar (defaults to `Q1`, `Q2`, …)
67
-
68
- The recommended option is marked in the list. Escape cancels the batch.
69
-
70
- ## Work board
71
-
72
- `sideroom_todo` keeps an ordered, display-only board above the editor. The
73
- agent maintains it and the user steers through chat. It never creates a
74
- repository task file or a `/todos` command.
75
-
76
- - `propose` replaces the full board and is available only in the interactive
77
- TUI.
78
- - `update` applies one or more `{ id, status?, content? }` patches and works in
79
- every Pi mode.
80
- - Items have stable string ids, short content, and one of `pending`,
81
- `in_progress`, `completed`, or `cancelled`.
82
- - While items are pending, exactly one item must be `in_progress`. Complete the
83
- current item and start the next one in the same update.
84
- - Snapshots are stored in the active session branch. The board is rebuilt after
85
- session navigation and compaction.
86
-
87
- ## Edited files
88
-
89
- The package automatically records successful Pi `write` and `edit` calls for
90
- the active session. It does not infer filesystem changes from shell commands,
91
- Git, people, or subagents. The compact list is shown below the work board when
92
- one is active and contains at most five recent paths.
93
-
94
- - `F8` opens or closes the extended, scrollable list; press `R` there
95
- to clear the current session's history.
96
- - Every path is an OSC 8 `file://` link. Your terminal determines whether that
97
- is a click, Ctrl+click, or another modifier-assisted action.
98
- - Paths outside the active project are labelled `external`.
99
- - A new session starts with a new list; the current session's history survives
100
- reload, tree navigation, and compaction.
147
+ ### Questionnaire contract
101
148
 
102
- ## Coding guidelines
149
+ Write prompts, tab labels, and option copy in the language the user is
150
+ speaking; keep ids, option values, and TUI chrome in English. Do not send
151
+ *Out of scope* or custom-answer rows yourself — the UI always adds them.
103
152
 
104
- Before `write` or `edit`, the parent agent is reminded to read the packaged
105
- `sideroom-guidelines` skill. That skill holds the shared Do/Don't table. For
106
- `.java`, `.php`, `.ts`/`.tsx`, `.py`, `.go`, and `.rs`, the agent also reads one
107
- matching file under `skills/sideroom-guidelines/references/languages/`. Other
108
- languages follow the shared table only.
153
+ ### Board contract
109
154
 
110
- ## Development
155
+ Items have stable string ids, short content, and one of `pending`,
156
+ `in_progress`, `completed`, or `cancelled`. Complete the current item and
157
+ start the next one in the same `update` call. Snapshots live in the active
158
+ session branch and are rebuilt after navigation and compaction.
111
159
 
112
- ```bash
113
- npm install
114
- npm run check
115
- ```
160
+ ### Edited-files contract
116
161
 
117
- Biome is the sole formatter and linter. Pi loads TypeScript from `extensions/`
118
- directly; do not bundle. Pi provides `@earendil-works/pi-coding-agent`,
119
- `@earendil-works/pi-tui`, and `typebox` as peer dependencies.
162
+ - Trigger: only successful Pi `write`/`edit` results.
163
+ - Compact widget: max five paths, reapplied below the board.
164
+ - Extended view: `F8` toggles, `R` clears session history.
165
+ - Links: OSC 8 `file://` — click behavior depends on your terminal.
120
166
 
121
- ## Releases and commits
167
+ ### Guidelines contract
122
168
 
123
- Commit messages must follow the Conventional Commits format. The existing
124
- Husky `commit-msg` hook validates each local commit with Commitlint, for
125
- example `feat: mark the recommended sideroom_ask option`.
169
+ Read the skill before `write`/`edit`. Read at most one language delta per
170
+ change — the one matching the path. Other languages follow the shared table
171
+ only.
126
172
 
127
- Every user-visible package change needs a Changeset. Create one with:
173
+ ### Grill contract
128
174
 
129
- ```bash
130
- npm run changeset
131
- ```
175
+ Load the skill at the start of a change with a fuzzy plan.
176
+ Single-session scope only. Files are created lazily: nothing exists until
177
+ the first term or decision crystallises. A session with a sharper glossary
178
+ and zero ADRs is working as designed.
132
179
 
133
- Review pending release work with `npm run changeset:status`. When Changesets
134
- are merged to `main`, the `Release` workflow creates or updates a reviewable
135
- Changesets version PR. That PR contains the generated `package.json`,
136
- `package-lock.json`, and `CHANGELOG.md` updates. Merge the version PR only after
137
- review; its merge runs `npm ci` and `npm run check`, then uses
138
- npm 11.5.1 and npm Trusted Publishing (GitHub OIDC) to publish. Changesets then
139
- pushes the release Git tag and creates the GitHub Release automatically.
140
-
141
- Never run `npm publish`, create release tags, or create GitHub Releases locally.
142
- Publishing is allowed only through the merged Changesets version PR and the
143
- `Release` workflow. The npm package's Trusted Publisher must be configured for
144
- this GitHub repository, the workflow filename `release.yml` (not its path),
145
- and the `npm` environment; configure the matching GitHub `npm` environment
146
- before the first release.
147
-
148
- ## Layout
149
-
150
- ```text
151
- extensions/
152
- ask/ sideroom_ask (index.ts, execute.ts, model.ts, ui.ts)
153
- todo/ sideroom_todo (index.ts, execute.ts, session.ts,
154
- guards.ts, model.ts, ui.ts)
155
- modified-files/ session-backed edited-file tracker and view
156
- guidelines/ short write/edit reminder
157
- skills/sideroom-guidelines/ on-demand checklist and language deltas
158
- assets/artifacts/ GUIDELINES_TEMPLATE.md seed
159
- ```
180
+ ## License
160
181
 
161
- Add another tool as `extensions/<name>/index.ts`. Pi discovers
162
- `extensions/*/index.ts`; helpers in that folder are not loaded as extensions.
182
+ MIT.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rmrdeveloper/sideroom-pi",
3
- "version": "7.0.1",
3
+ "version": "7.1.0",
4
4
  "description": "A global Pi package with a questionnaire, work board, edited-file view, and coding guidelines for parent agents.",
5
5
  "type": "module",
6
6
  "files": [
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: sideroom-domain-modeling
3
+ description: "Trigger: ubiquitous language, domain term, CONTEXT.md, ADR, vague word, naming conflict. Sharpen the project's domain language while designing: challenge vague terms, split overloaded ones, and write the settled vocabulary into the repo."
4
+ license: MIT
5
+ metadata:
6
+ author: RMRdeveloper
7
+ version: "1.0"
8
+ ---
9
+
10
+ # Sideroom domain modeling
11
+
12
+ ## Activation Contract
13
+
14
+ Load this skill when the _words_ are the problem: two people mean different
15
+ things by one term, one term is doing several jobs, or a statement about the
16
+ domain needs to survive longer than the conversation. This is the active
17
+ discipline — changing the model — not the passive habit of reading
18
+ `CONTEXT.md` to borrow a word. That read needs no skill; it is one line.
19
+
20
+ It runs underneath `sideroom-grill` through a grilling session, and it also
21
+ runs on its own when you want the discipline without the interview.
22
+
23
+ ## Hard Rules
24
+
25
+ - Interrupt. When a term conflicts with the glossary, stop and ask which of
26
+ the two things is meant instead of picking one and moving on. When a vague
27
+ word appears where a precise one exists, force the precise word.
28
+ - Stress-test relationships with a concrete scenario until the boundaries
29
+ are exact.
30
+ - Cross-check statements against the code. When the code and the sentence
31
+ disagree, quote the code back and settle which one is right out loud,
32
+ before changing either.
33
+ - A resolved term lands in `CONTEXT.md` the moment it resolves, inline, in
34
+ the middle of the conversation. One or two sentences saying what the thing
35
+ **is**, plus rejected synonyms under `_Avoid_`.
36
+ - `CONTEXT.md` is a glossary and nothing else. Never persist implementation
37
+ details, spec prose, scratch notes, or general programming concepts there.
38
+ Refuse the write and say why.
39
+ - An ADR under `docs/adr/` is offered, never assumed, and only when all
40
+ three gates pass at once: hard to reverse, surprising without context, and
41
+ the result of a real trade-off. When refusing, say which test failed.
42
+ - Create files lazily. Nothing exists until the first term or decision
43
+ crystallises. In a repo with a `CONTEXT-MAP.md` at the root, terms go into
44
+ the per-context `CONTEXT.md` the map points at instead.
45
+ - Keep the glossary lean. It gets shorter as often as it gets longer: split
46
+ an overloaded term, drop a dead one, and when the file has absorbed detail
47
+ that was never glossary material, offer to condense it.
48
+
49
+ ## Decision Gates
50
+
51
+ | Situation | Move |
52
+ | --- | --- |
53
+ | Two meanings for one term | Pick the canonical term, list the other under `_Avoid_` |
54
+ | One term doing several jobs | Split it (e.g. `Account` into `Customer` and `User`) |
55
+ | A vague term became canonical | Write it to `CONTEXT.md` now |
56
+ | A hard-to-reverse choice clearing all three ADR gates | Offer an ADR under `docs/adr/` |
57
+ | The module's shape is the problem, not its words | This skill does not apply; that is module design |
58
+ | The whole plan needs interrogating before building | `sideroom-grill`, which drives this skill underneath |
59
+ | A term only needs looking up, not changing | Read `CONTEXT.md`. It is a file |
60
+
61
+ ## Execution Steps
62
+
63
+ 1. Read `CONTEXT.md` (and the ADRs, if any) before touching the model.
64
+ 2. As terms settle, write each one inline with its `_Avoid_` list.
65
+ 3. As hard choices surface, offer an ADR or refuse one with the failed
66
+ test named.
67
+ 4. Before finishing, re-read the touched entries: each defines what a thing
68
+ is, in one or two sentences, with no implementation detail.
69
+
70
+ ## Output Contract
71
+
72
+ The repo holds the shared vocabulary and the hard decisions, each entry
73
+ short enough to re-read. The glossary never becomes a running spec.
74
+
75
+ ## References
76
+
77
+ - Driven by `sideroom-grill` during grilling sessions.
78
+ - Entry rules reused by `sideroom-domain-scaffold` for code-first
79
+ scaffolding without interviews.
80
+ - Based on the `domain-modeling` discipline described at
81
+ `https://www.aihero.dev/skills-domain-modeling`.
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: sideroom-domain-scaffold
3
+ description: "Trigger: document my repo, scaffold CONTEXT.md, brownfield glossary, survey domain. Read the central domain code as source of truth and build or complete CONTEXT.md without interviewing anyone; conflicting terms are collected and grilled once, at the end."
4
+ license: MIT
5
+ metadata:
6
+ author: RMRdeveloper
7
+ version: "1.0"
8
+ ---
9
+
10
+ # Sideroom domain scaffold
11
+
12
+ ## Activation Contract
13
+
14
+ Load this skill on explicit request ("document my repo", "scaffold the
15
+ glossary") over a codebase whose domain language is missing or thin. The
16
+ code is the source of truth. Nobody is interviewed while the modeling runs.
17
+
18
+ ## Hard Rules
19
+
20
+ - Zero interviews during the scan. Every irreconcilable conflict goes onto
21
+ a conflict list; modeling continues. The happy path is never interrupted.
22
+ - Scope is the central business domain: its modules, types, enums, and
23
+ statuses. Ignore infrastructure, tooling, and utilities. Domain tests are
24
+ witnesses of the language, never sources of new terms.
25
+ - Reconcile by prevalence and centrality: the dominant, core-module usage
26
+ wins. Record each such call as an assumption for later review.
27
+ - Merge, never rebuild. An existing `CONTEXT.md` is curated truth: add and
28
+ sharpen only. A contradiction between the code and an existing entry is
29
+ not overwritten; it joins the conflict list.
30
+ - Entry format, glossary purity, lazy file creation, and multi-context
31
+ routing all follow `sideroom-domain-modeling`. This skill owns the scan;
32
+ that one owns the writing.
33
+ - No ADRs. Trade-offs cannot be validated without humans; hard choices found
34
+ in the code are reported, not recorded.
35
+ - Grill once, at the end. When modeling is complete, launch
36
+ `sideroom-grill` scoped exactly to the conflict list so a human bounds
37
+ each confused term correctly. With an empty list there is no grill: close
38
+ with the glossary and the assumptions.
39
+
40
+ ## Decision Gates
41
+
42
+ | Situation | Move |
43
+ | --- | --- |
44
+ | Same term, two meanings, no dominant use | Conflict list; grilled at the end |
45
+ | Code contradicts an existing glossary entry | Conflict list; the entry stands until grilled |
46
+ | Term belongs to infra, tooling, or utils | Skip it; out of scope |
47
+ | Whole plan needs interrogating, not just terms | `sideroom-grill` instead of this skill |
48
+
49
+ ## Execution Steps
50
+
51
+ 1. Read `CONTEXT.md` (and `CONTEXT-MAP.md`, if any) before touching the
52
+ model.
53
+ 2. Survey the central domain code and collect candidate terms.
54
+ 3. Group synonyms, split overloaded terms, reconcile by prevalence.
55
+ 4. Write each settled term inline, merged with what exists.
56
+ 5. Collect conflicts and assumptions without stopping.
57
+ 6. Close: report the glossary and the assumptions, then either launch the
58
+ end-of-run `sideroom-grill` on the conflict list or state that the model
59
+ came out clean.
60
+
61
+ ## Output Contract
62
+
63
+ A merged `CONTEXT.md` the code already agrees with, a reviewable list of
64
+ assumptions, and — only when the code disagreed with itself — one bounded
65
+ grilling at the end. No interview ever interrupts the scan.
66
+
67
+ ## References
68
+
69
+ - Entry rules come from `sideroom-domain-modeling`.
70
+ - Conflicts are handed to `sideroom-grill`, once, at the end of the run.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: sideroom-grill
3
+ description: "Trigger: fuzzy plan, design review, grilling, CONTEXT.md, ADR, domain language. Interview the user in rounds until you share one understanding, then write the vocabulary and the hard decisions into the repo."
4
+ license: MIT
5
+ metadata:
6
+ author: RMRdeveloper
7
+ version: "1.0"
8
+ ---
9
+
10
+ # Sideroom grill
11
+
12
+ ## Activation Contract
13
+
14
+ Load this skill at the start of a change, in a repo, when the plan is still
15
+ fuzzy and the words for the thing are not settled yet. Single-session scope:
16
+ if the effort is too big to hold in one session, say so and stop.
17
+
18
+ ## Hard Rules
19
+
20
+ - Interview in rounds. One `sideroom_ask` call is one round; wait for its
21
+ answers before the next round.
22
+ - Every question carries a recommendation (`recommendationIndex`). Write
23
+ prompts and option copy in the language the user is speaking; keep ids and
24
+ option values in English.
25
+ - Never ask the user what the codebase can answer. Read the code first; ask
26
+ only what the code cannot settle.
27
+ - An *Out of scope* answer closes that thread. Do not re-ask it.
28
+ - Everything a round settles is recorded through `sideroom-domain-modeling`:
29
+ inline glossary entries, the ADR three-gate offer, lazy file creation.
30
+ This skill owns the interview; that one owns the writing.
31
+ - Everything that is neither glossary nor ADR lives in the conversation
32
+ only. Do not clear the session after grilling; hand it to a spec or
33
+ straight to implementation instead.
34
+
35
+ ## Execution Steps
36
+
37
+ 1. Read the code around the change. Settle from the codebase everything the
38
+ codebase settles.
39
+ 2. Run one `sideroom_ask` round on what remains genuinely open: terms first,
40
+ then decisions.
41
+ 3. After each round, write resolved terms to `CONTEXT.md` and qualifying
42
+ decisions to `docs/adr/`.
43
+ 4. Repeat until no open term or hard decision remains, or the user cancels.
44
+ 5. Close by stating the settled glossary, the ADRs written (if any), and the
45
+ suggested next step: a spec for anything non-trivial, implementation for
46
+ what is small enough to build now.
47
+
48
+ ## Output Contract
49
+
50
+ The repo holds the shared vocabulary and the hard decisions; the
51
+ conversation holds everything else. The user can re-read `CONTEXT.md` and
52
+ the ADRs and find exactly what was agreed, nothing softened.
53
+
54
+ ## References
55
+
56
+ - Drives `sideroom-domain-modeling` underneath: vocabulary sharpening
57
+ during the rounds follows that skill.
58
+ - Closes `sideroom-domain-scaffold` runs: terms a scan could not reconcile
59
+ are grilled here, once, at the end.
60
+ - Based on the `grill-with-docs` discipline described at
61
+ `https://www.aihero.dev/skills-grill-with-docs`.