@hobin/developer 0.1.6 → 0.1.7

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
@@ -24,61 +24,51 @@ pi -e npm:@hobin/developer
24
24
 
25
25
  ## Quick start
26
26
 
27
- Start Pi, enable adaptive mode, and describe the product task normally:
27
+ Start Pi, turn Developer on, and describe the product task normally:
28
28
 
29
29
  ```text
30
30
  /develop on
31
31
  The selected payment method disappears after navigating back to checkout. Find the cause and fix it.
32
32
  ```
33
33
 
34
- Most users should begin with `on`. Developer decides whether the next concrete
35
- question would benefit from a focused skill or is already justified as direct action. You
36
- do not need to call its internal protocol tools yourself.
37
-
38
- For a risky refactor where Pi should justify mutation before using its built-in
39
- edit, write, or shell tools:
40
-
41
- ```text
42
- /develop strict
43
- Unify the duplicate schedule types and conversion logic without changing existing behavior.
44
- ```
34
+ Developer decides whether the next concrete question would benefit from a focused
35
+ skill or is already justified as implementation action. You do not need to call
36
+ its internal protocol tools yourself. While Developer is on, Pi's built-in shell
37
+ and artifact tools follow the active route.
45
38
 
46
39
  ## Commands
47
40
 
48
41
  | Command | Effect |
49
42
  | --- | --- |
50
- | `/develop` | Open the interactive Developer control menu |
51
- | `/develop on` | Enable adaptive routing; tools stay active unless a `before-direct` question gate is open |
52
- | `/develop strict` | Gate shell execution behind an active route and structured artifact mutation behind a direct route |
43
+ | `/develop` | Open the non-overlay Developer settings surface |
44
+ | `/develop on` | Enable adaptive routing and route-bound access to Pi built-in `bash`, `edit`, and `write` |
53
45
  | `/develop status` | Inspect current branch state in a read-only panel |
54
46
  | `/develop questions` | Choose an unresolved question, answer it or request investigation, and submit it to Pi |
55
47
  | `/develop off` | Disable the protocol and clear current protocol state |
56
48
 
57
49
  Explicit command arguments participate in Pi's completion UI. In interactive
58
- mode, turning Developer off while a route or unresolved question exists requires
50
+ use, turning Developer off while a route or unresolved question exists requires
59
51
  confirmation. The historical session entries remain; only current protocol
60
52
  state is cleared.
61
53
 
62
- Start a non-interactive or preconfigured session in a mode with the extension
63
- flag:
54
+ Start a non-interactive or preconfigured session with Developer enabled:
64
55
 
65
56
  ```sh
66
- pi --develop-mode on
67
- pi --develop-mode strict
57
+ pi --develop
68
58
  ```
69
59
 
70
- ## Modes
60
+ ## Activation and tool policy
71
61
 
72
- | Mode | Routing | Built-in mutation tools | Best fit |
73
- | --- | --- | --- | --- |
74
- | `on` | Adaptive | Unchanged except while a `before-direct` question gate is open | Normal product development |
75
- | `strict` | Adaptive | `bash` is available during skill/direct routes; Pi built-in `edit` and `write` require an active `direct` route and no `before-direct` gate | High-risk changes and workflow-discipline experiments |
76
- | `off` | Disabled | Developer makes no changes to the active set | Normal Pi behavior without the protocol |
62
+ Developer has one boolean setting: on or off. When on, adaptive routing and the
63
+ route-bound tool policy always apply. Pi built-in `bash` is available during
64
+ skill and implementation routes; built-in `edit` and `write` require an active
65
+ `implementation` route and no `before-implementation` gate. When off, Developer
66
+ clears current protocol state and restores only tools that it withheld.
77
67
 
78
- Strict mode and question gates are workflow-integrity controls, not a security
68
+ The tool policy and question gates are workflow-integrity controls, not a security
79
69
  sandbox. A skill route receives the shell execution lane needed for repository
80
70
  inspection and verifier execution, while structured `edit`/`write` mutation
81
- remains direct-only. Shell commands are not parsed as a security language; skill
71
+ remains implementation-only. Shell commands are not parsed as a security language; skill
82
72
  contracts prohibit artifact mutation, and adversarial evaluation checks the
83
73
  workspace boundary. Developer recognizes Pi built-ins from their provenance,
84
74
  preserves unrelated active tools, and does not force-enable tools the user
@@ -89,16 +79,16 @@ disabled.
89
79
  Developer adds two model-facing protocol tools:
90
80
 
91
81
  1. `developer_route_question` opens one route for one concrete question.
92
- 2. The route target is `direct` or one currently available Developer skill.
82
+ 2. The route target is `implementation` or one currently available Developer skill.
93
83
  3. A skill route returns the exact Pi-discovered `SKILL.md` instructions and canonical
94
- path; a direct route declares one movement, its stable landing, and its narrow
84
+ path; an implementation route declares one movement, its stable landing, and its narrow
95
85
  verification. A behavior-preserving structural route also loads the focused
96
86
  execution profile based on flocking-style movement and small tidyings.
97
87
  4. `developer_record_judgment` closes the route with a status, result, evidence,
98
88
  artifacts, and any newly opened questions. Developer then routes again from
99
89
  the stable landing before another movement.
100
- 5. Consecutive direct routes remain valid. To prevent routing by momentum, a
101
- direct route that follows a direct judgment must cite the previous landing
90
+ 5. Consecutive implementation routes remain valid. To prevent routing by momentum, a
91
+ implementation route that follows an implementation judgment must cite the previous landing
102
92
  evidence and record the plausible skill routes reconsidered plus why they add
103
93
  no useful judgment at that point.
104
94
 
@@ -107,7 +97,7 @@ The conditional default topology is:
107
97
  ```text
108
98
  clarify when needed → model consequential cases
109
99
  → sketch the first feature implementation surface OR signal existing-code movement
110
- → one direct green-to-green movement → re-route from evidence
100
+ → one implementation green-to-green movement → re-route from evidence
111
101
  → verify before completion
112
102
  ```
113
103
 
@@ -127,27 +117,31 @@ Each new route is chosen from the current question and evidence.
127
117
 
128
118
  Developer uses different Pi surfaces for different information:
129
119
 
130
- - The footer contains only global mode, protocol state, and current route target.
120
+ - The footer contains only activation, protocol state, and current route target.
131
121
  - A compact widget appears only while a route or unresolved question exists.
132
- - `/develop` uses a `SelectList` action menu that exposes pending questions directly instead of hiding them behind a second question menu.
133
- - `/develop status` opens a branch-grounded, read-only status panel with recent
134
- route/judgment history and the alternatives recorded for consecutive direct work.
122
+ - `/develop` uses Pi's `SettingsList` semantics: the `Developer` row shows
123
+ and toggles the current On/Off value, `Status` opens branch details,
124
+ `History · N` opens complete route/judgment records when present, and
125
+ `Open questions · N` appears only when unresolved questions exist.
126
+ - `/develop status` opens a non-overlay, branch-grounded, read-only status panel
127
+ with recent route/judgment history and the alternatives recorded for
128
+ consecutive implementation work.
135
129
  - `/develop questions` uses stable internal question IDs. A sole question opens
136
- directly; multiple questions use one selector before the answer/evidence editor.
137
- Editor Escape returns to the previous root or multi-question selector; a sole
138
- direct editor closes because it has no parent selector. Cancelling leaves
139
- protocol state unchanged, while submitting sends the resolution request to Pi.
140
- - A newly opened, answerable user question that gates direct work is pushed to the
141
- TUI immediately. The user can answer now or leave it open. When the question
142
- supplies a `choice-form` `responseSpec`, Answer now renders every required
143
- decision as an individual option control, collects option-specific detail, and
144
- provides a review/edit step before submission. The answer still requires a
145
- focused judgment and explicit `question_updates` resolution.
146
- - Selection and status overlays use most of the terminal, keep a stable rendered
147
- height while navigating or scrolling, and remain bounded on small terminals.
148
- They support mouse-wheel/trackpad scrolling, arrow keys, Page Up/Down, and
149
- Home/End. Terminal mouse reporting is enabled only while the overlay is open
150
- and is released when it closes.
130
+ directly; multiple questions use one selector. Every open question, regardless
131
+ of owner or gate, first shows a complete non-overlay decision brief: context is
132
+ rendered as Markdown, then blocked work, gate, resolution criteria, and every
133
+ structured field/option appear before Continue or Leave open controls.
134
+ Cancelling the first field or editor returns to that brief; leaving the brief
135
+ returns to the parent without changing protocol state.
136
+ - A newly opened, answerable user question that gates implementation work is pushed
137
+ to the same explanation-first brief before the judgment tool returns. The user
138
+ may continue only after reviewing the explanation or leave it open. Structured
139
+ responses then collect each option/detail and provide review/edit before submission.
140
+ The answer still requires a focused judgment and explicit `question_updates`.
141
+ - Developer custom surfaces leave mouse ownership with the terminal: wheel/trackpad
142
+ scrolls normal-buffer content, drag selects text, and Cmd+C copies it. Wheel input
143
+ never changes the selected control; arrow keys do. Potentially long surfaces render
144
+ complete content rather than hiding it behind an application-owned viewport.
151
145
  - Protocol tool rows show compact status by default and higher-contrast evidence
152
146
  details when expanded with the user's configured Pi keybinding. They render
153
147
  without Pi's default full tool-row background.
@@ -163,9 +157,9 @@ terminal components.
163
157
  | `needs-judgment` | One route is active and must be closed with a judgment |
164
158
  | `needs-evidence` | At least one agent- or environment-owned evidence question remains open |
165
159
  | `needs-answer` | At least one user-owned answer or decision remains open |
166
- | `needs-routing` | A direct stable landing must be re-observed and routed again |
160
+ | `needs-routing` | An implementation stable landing must be re-observed and routed again |
167
161
  | `needs-verification` | Changed artifacts still need a resolved verify judgment |
168
- | `blocked` | A question is unavailable or explicitly gates direct work |
162
+ | `blocked` | A question is unavailable or explicitly gates implementation work |
169
163
 
170
164
  These are routing states, not product-completion claims. In particular:
171
165
 
@@ -177,10 +171,11 @@ Pending questions receive stable internal IDs, but users do not type them. Each
177
171
  question records:
178
172
 
179
173
  - `resolutionOwner`: `agent`, `user`, or `environment`;
180
- - `gate`: `none`, `before-direct`, or `before-completion`;
174
+ - `gate`: `none`, `before-implementation`, or `before-completion`;
181
175
  - `resolutionCriteria`: the observable evidence or answer that closes it;
182
- - optional `context`: detailed Markdown choices, examples, or constraints shown
183
- when the question is revisited without repeating that detail in every protocol prompt;
176
+ - `context`: Markdown explanation rendered before answer controls for every open
177
+ question; required for user-owned `before-implementation` and `before-completion`
178
+ questions, optional for other and legacy questions;
184
179
  - optional user-owned `responseSpec`: a bounded `choice-form` with required
185
180
  single-choice fields and optional per-option detail prompts.
186
181
 
@@ -190,10 +185,10 @@ infer controls by parsing Markdown. Options such as A3 or G3 that need additiona
190
185
  input declare `detail_prompt`. Missing or malformed replay data falls back to the
191
186
  freeform editor without dropping the pending question.
192
187
 
193
- Selecting `/develop questions` opens structured controls when a valid user
194
- `responseSpec` exists. Otherwise it opens the owner-specific editor: user
195
- questions ask for the required decision, agent questions ask Pi to investigate,
196
- and environment questions request access or an external observation. Submitting
188
+ Selecting `/develop questions` always opens the explanation brief before any
189
+ structured control or owner-specific editor. User questions then ask for the
190
+ required decision, agent questions ask Pi to investigate, and environment
191
+ questions request access or an external observation. Submitting
197
192
  focuses the question in branch state; an explicit ID, focus, or exact question
198
193
  match associates the next route. Selection alone never closes it.
199
194
 
@@ -203,8 +198,8 @@ environment observation naturally supplies its criteria. A focused question
203
198
  must receive an explicit update: resolve or dismiss it with concrete basis,
204
199
  retain it as open or blocked, or close the broad parent while opening narrower
205
200
  children. Resolved and not-applicable updates remove the question with recorded
206
- basis; open or blocked updates preserve its identity. A `before-direct` question blocks both direct
207
- routes and Pi built-in mutation tools even in adaptive mode. A
201
+ basis; open or blocked updates preserve its identity. A `before-implementation` question blocks both implementation
202
+ routes and Pi built-in artifact tools while Developer is on. A
208
203
  `before-completion` question allows investigation and implementation but keeps
209
204
  the protocol non-idle and prevents verification debt from being cleared as a
210
205
  completion claim.
@@ -259,7 +254,7 @@ instructions say when each reference is worth reading and resolve it relative to
259
254
  the skill directory. A reference may synthesize several sources because the
260
255
  leaf's question, not a book title, owns the capability. Each source-derived
261
256
  reference includes a source trace, and [SOURCES.md](./SOURCES.md) maps the full
262
- book coverage across leaves and the direct path. Small, settled judgments do not
257
+ book coverage across leaves and the implementation path. Small, settled judgments do not
263
258
  need the extra context.
264
259
 
265
260
  Primary references retain the capability's core insight and one complete case.
@@ -277,35 +272,34 @@ disabled, or replaced through resource configuration.
277
272
 
278
273
  ## State, branches, and compaction
279
274
 
280
- Mode changes are stored as Pi custom session entries. Routes and judgments are
281
- stored in tool-result details. Developer replays the current branch through an
282
- XState v5 machine on startup and tree navigation, so a fork inherits only the
283
- events on its branch. Parallel machine regions keep mode, route, question gates,
284
- framing debt, and verification debt explicit; transition guards reject a direct
285
- route while a `before-direct` question remains.
275
+ Activation changes are stored as Pi custom session entries. Routes and judgments
276
+ are stored in tool-result details. Developer replays the current branch through
277
+ an XState v5 machine on startup and tree navigation, so a fork inherits only the
278
+ events on its branch. Parallel machine regions keep activation, route, question gates,
279
+ framing debt, and verification debt explicit; transition guards reject an implementation
280
+ route while a `before-implementation` question remains.
286
281
 
287
282
  ```text
288
283
  developerMachine (parallel)
289
- ├── mode: off | on | strict
290
- ├── route: idle | judgment | direct
284
+ ├── activation: disabled | enabled
285
+ ├── route: idle | judgment | implementation
291
286
  ├── questions: clear | open
292
- ├── directGate: clear | blocked
287
+ ├── implementationGate: clear | blocked
293
288
  ├── completionGate: clear | blocked
294
289
  ├── checkpoint: ready | required
295
290
  ├── framing: clear | required
296
291
  └── verification: current | required
297
292
  ```
298
293
 
299
- Judgment routes carry the `execute` tag, direct routes carry `execute` and
300
- `mutate`, and question/debt regions expose blocking tags. Every direct judgment
294
+ Judgment routes carry the `execute` tag, implementation routes carry `execute` and
295
+ `mutate`, and question/debt regions expose blocking tags. Every implementation judgment
301
296
  moves the checkpoint to `required`; the next accepted route returns it to
302
- `ready`. Tool availability, runtime call guards, status, and direct-transition
297
+ `ready`. Tool availability, runtime call guards, status, and implementation-transition
303
298
  eligibility are derived from the same machine snapshot.
304
299
 
305
- The current event contract is `developer/v4`. Legacy `developer/v1` through
306
- `developer/v3` routing history can be replayed. Legacy questions receive
307
- conservative owner, gate, and resolution-criteria defaults rather than guessed
308
- product decisions.
300
+ The current event contract is `developer/v5`. Earlier protocol entries are not
301
+ replayed; this breaking contract uses `target`, `implementation`, and
302
+ `before-implementation` consistently across tools, events, and machine state.
309
303
 
310
304
  Developer deliberately leaves compaction ownership to Pi. It does not trigger,
311
305
  cancel, or replace threshold/overflow compaction, so it cannot override the
@@ -346,8 +340,8 @@ pinning, and security behavior.
346
340
  extensions/
347
341
  ├── developer.ts # command, protocol tools, events, and Pi integration
348
342
  ├── machine.ts # XState v5 parallel regions, guards, transitions, and tags
349
- ├── references/ # direct execution profiles loaded through tool results
350
- ├── state.ts # developer/v4 event normalization and branch replay
343
+ ├── references/ # implementation profiles loaded through tool results
344
+ ├── state.ts # developer/v5 event normalization and branch replay
351
345
  ├── skills.ts # loaded-skill filtering and instruction rendering
352
346
  ├── tool-policy.ts # machine-derived execution and mutation access policy
353
347
  └── tui.ts # selectors, widget, status panel, and prompt preparation
@@ -373,26 +367,50 @@ Load the workspace package into Pi without installing it:
373
367
  pi -e ./packages/developer
374
368
  ```
375
369
 
376
- Launch the isolated modal fixture in a new Ghostty window for visual QA:
370
+ Launch the isolated surface fixture in a new Ghostty window for visual QA:
377
371
 
378
372
  ```sh
379
373
  ./packages/developer/scripts/ghostty-tui-qa.sh
380
374
  ```
381
375
 
382
- Choose **Inspect status** or **Revisit an open question**, then resize the window
383
- while the modal is open. The fixture disables discovered extensions, skills,
384
- tools, sessions, and network startup so it cannot mutate Developer state or call
385
- a model.
376
+ Choose each independent scenario from the QA menu:
377
+
378
+ 1. **Activation + confirm/cancel** toggle Off/On on the same Settings surface;
379
+ cancel destructive Off and verify the row stays On, then confirm it and verify
380
+ the route/questions clear before toggling On again.
381
+ 2. **Settings / Status / History / Questions** — open a History judgment,
382
+ drag-select detail text and paste it elsewhere, then verify one-level Escape
383
+ from detail → History → Settings → scenario menu with parent focus restored.
384
+ 3. **Custom answer + Korean IME** — choose **Write another answer…**, then check
385
+ composition, validation, review/edit, and preset/custom provenance.
386
+ 4. **Resize / scroll / mouse cleanup** — repeatedly resize long Status and
387
+ History detail surfaces between wide and narrow layouts; check native mouse
388
+ wheel scrolling, border alignment, drag selection, Cmd+C, and paste elsewhere.
389
+ 5. **Unicode + compact overlay footprint** — inspect `◆`, `→`, `↑↓`, `·`, `…`,
390
+ and Korean glyph alignment, untouched background, and content-bounded overlays.
391
+
392
+ Across Developer surfaces, Ghostty owns the mouse: the wheel scrolls terminal
393
+ scrollback, ordinary drag selects text, and `Cmd+C` copies it. Wheel movement
394
+ never changes the selected list target; use `↑`/`↓` for selection. Potentially
395
+ long lists render every row as non-overlay surfaces, while complete two-choice
396
+ interruptions remain compact overlays.
397
+
398
+ Each scenario creates a fresh in-memory model. Activation events use the same
399
+ `applyDeveloperEvent` reducer and `DeveloperSettingsBinding` contract as the
400
+ production surface; no state is shared between scenario runs. The fixture does
401
+ not append entries, submit answers, register tools, mutate active tools, restore
402
+ sessions, start network work, or send model messages. Prepared answers are shown
403
+ only as a character count.
386
404
 
387
405
  `check` validates package structure and deterministic behavior. `eval` launches
388
406
  the real Pi RPC surface without a model and covers package resources, commands,
389
- mode state, and strict tool gating. These are release-gating checks.
407
+ activation state, and route-bound tool gating. These are release-gating checks.
390
408
 
391
409
  Model-dependent runs are probabilistic evaluations rather than binary tests:
392
410
 
393
411
  ```sh
394
412
  PI_CODING_AGENT_DIR=~/.pi/agent \
395
- DEVELOPER_EVAL_FIXTURE=agent-before-direct-evidence-gate \
413
+ DEVELOPER_EVAL_FIXTURE=agent-before-implementation-evidence-gate \
396
414
  DEVELOPER_EVAL_TRIALS=5 \
397
415
  pnpm --filter @hobin/developer eval:live
398
416
  ```
@@ -401,7 +419,7 @@ Use `eval:live:json` for the JSON transport. Each report separates the hard
401
419
  admissibility envelope from routing quality: structurally valid runs must use an
402
420
  admissible route, preserve mutation/question/completion invariants, satisfy
403
421
  hidden artifact checks, include required semantic terms, and end in a declared
404
- outcome. Among accepted runs, `preferredFirstOwners` measures better versus
422
+ outcome. Among accepted runs, `preferredFirstTargets` measures better versus
405
423
  merely admissible routing. Reports include acceptance and preference rates,
406
424
  95% Wilson intervals, inadmissible results, rejected protocol attempts, budget
407
425
  exhaustion, and environment failures. Any accepted inadmissible result makes the
@@ -411,8 +429,8 @@ rate. A single model sample is not release evidence.
411
429
  Live fixtures classify terminal outcomes as `settled-unchanged`, `pending`,
412
430
  `changed-paused`, or `changed-verified`. An eval-only observer compares
413
431
  product-file snapshots around bash/edit/write calls and rejects artifact changes
414
- outside a direct route. Dedicated fixtures sample a deliberately paused direct
415
- landing and an agent-owned before-direct question resolved through a non-direct
432
+ outside an implementation route. Dedicated fixtures sample a deliberately paused implementation
433
+ landing and an agent-owned before-implementation question resolved through a non-implementation
416
434
  bash evidence route; their structural guarantees also have deterministic machine,
417
435
  extension, trace, filesystem, and outcome tests. RPC and JSON runners share
418
436
  route, tool-call, tool-error, wall-clock, and no-progress budgets and preserve a
package/SOURCES.md CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  Developer is organized around questions the agent must answer, not around books.
4
4
  This maintainer document records how source material is decomposed across leaf
5
- skills and the direct execution path. It is not a Pi runtime resource or a
6
- required workflow.
5
+ skills and the implementation path. It is not a Pi runtime resource or a required
6
+ workflow.
7
7
 
8
8
  ## Ownership Rule
9
9
 
@@ -17,7 +17,7 @@ A source idea belongs where its observable job is performed:
17
17
  - timing goes to `schedule`;
18
18
  - names go to `naming-judgment`;
19
19
  - claim-to-evidence judgment goes to `verify`;
20
- - already-justified mutation goes to the `direct` route.
20
+ - already-justified mutation goes to the `implementation` route.
21
21
 
22
22
  No source implies a mandatory route order. Several leaves may use different
23
23
  parts of the same source because they answer different questions.
@@ -51,8 +51,8 @@ capability boundary.
51
51
  | Source | Capability extracted | Primary owner | Supporting owner or execution path |
52
52
  | --- | --- | --- | --- |
53
53
  | *99 Bottles of OOP*, ch. 1-2 | simple concrete baseline, Shameless Green, cost-effective and intention-revealing tests | `verify` | `signal`, `schedule` |
54
- | *99 Bottles of OOP*, ch. 3-4 | real change pressure, point of attack, closest pair, smallest difference, horizontal movement | `signal` | `direct` behavior-preserving protocol |
55
- | *99 Bottles of OOP*, ch. 4-5 | stable landings, responsibility-derived names, argument and data movement | `abstraction-review`, `naming-judgment` | `direct` behavior-preserving protocol |
54
+ | *99 Bottles of OOP*, ch. 3-4 | real change pressure, point of attack, closest pair, smallest difference, horizontal movement | `signal` | `implementation` behavior-preserving protocol |
55
+ | *99 Bottles of OOP*, ch. 4-5 | stable landings, responsibility-derived names, argument and data movement | `abstraction-review`, `naming-judgment` | `implementation` behavior-preserving protocol |
56
56
  | *99 Bottles of OOP*, ch. 5-8 | responsibility separation, messages, type transitions, polymorphism, dependency direction, object creation at the edge, factory tradeoffs | `sketch`, `abstraction-review` | `model`, `schedule` |
57
57
  | *99 Bottles of OOP*, ch. 9 | unit boundaries, context independence, role verification, obsolete-test removal | `verify` | `sketch` |
58
58
  | *How to Design Programs* | information analysis, data definitions, examples, templates, structural and generative recursion, accumulators, iterative refinement | `sketch` | `model`, `verify`, `signal`, `abstraction-review` |
@@ -63,10 +63,10 @@ capability boundary.
63
63
  | *Logic for Programmers*, ch. 4-6 | partial specifications, properties, contracts, replacement, proof limits | `model`, `verify` | `abstraction-review` |
64
64
  | *Logic for Programmers*, ch. 7-12 | relational constraints, decision tables, domain/time/system models, solvers, logic programming | `model` | `verify` |
65
65
  | *Elements of Clojure*: Names | narrow and consistent sense, honest effects and scope crossing | `naming-judgment` | `model` |
66
- | *Elements of Clojure*: Idioms | language-specific conventions and explicit operational semantics | project conventions or `direct` | generalized only when the semantic lesson survives the language |
66
+ | *Elements of Clojure*: Idioms | language-specific conventions and explicit operational semantics | project conventions or `implementation` | generalized only when the semantic lesson survives the language |
67
67
  | *Elements of Clojure*: Indirection | abstraction cost, module environment/model/interface/assumptions, principled versus adaptable systems | `sketch`, `abstraction-review` | `schedule` |
68
68
  | *Elements of Clojure*: Composition | units of computation and pull-transform-push process boundaries | `sketch` | `naming-judgment`, `verify` |
69
- | *Tidy First?* | separate behavior from structure, small tidyings, optionality, reversibility, first/after/later/never | `schedule` | `direct` behavior-preserving protocol, `signal` |
69
+ | *Tidy First?* | separate behavior from structure, small tidyings, optionality, reversibility, first/after/later/never | `schedule` | `implementation` behavior-preserving protocol, `signal` |
70
70
 
71
71
  ## Intentionally Not Imported As Universal Rules
72
72
 
@@ -94,7 +94,7 @@ When adding or revising a source-derived reference, record:
94
94
  ```text
95
95
  Source location: book, edition/version, chapter or section
96
96
  Capability: the question or action the idea improves
97
- Owner: one leaf or the direct path
97
+ Owner: one leaf or the implementation path
98
98
  Boundary: what the owner must not absorb
99
99
  Observable effect: the artifact, decision, or safer execution behavior expected
100
100
  ```