@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
|
[](https://www.npmjs.com/package/@rmrdeveloper/sideroom-pi)
|
|
4
4
|
[](https://www.npmjs.com/package/@rmrdeveloper/sideroom-pi)
|
|
5
5
|
[](https://www.npmjs.com/package/@rmrdeveloper/sideroom-pi)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
18
|
-
|
|
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
|
|
26
|
-
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
145
|
+
## Reference
|
|
42
146
|
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
113
|
-
npm install
|
|
114
|
-
npm run check
|
|
115
|
-
```
|
|
160
|
+
### Edited-files contract
|
|
116
161
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
|
|
167
|
+
### Guidelines contract
|
|
122
168
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
173
|
+
### Grill contract
|
|
128
174
|
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
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
|
-
|
|
162
|
-
`extensions/*/index.ts`; helpers in that folder are not loaded as extensions.
|
|
182
|
+
MIT.
|
package/package.json
CHANGED
|
@@ -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`.
|