@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 +110 -92
- package/SOURCES.md +8 -8
- package/extensions/developer.ts +1689 -1441
- package/extensions/machine.ts +418 -286
- package/extensions/references/behavior-preserving-structural-change.md +14 -13
- package/extensions/state.ts +463 -419
- package/extensions/tool-policy.ts +70 -64
- package/extensions/tui.ts +1666 -910
- package/package.json +1 -1
- package/skills/sketch/references/responsibility-and-variation.md +1 -1
package/README.md
CHANGED
|
@@ -24,61 +24,51 @@ pi -e npm:@hobin/developer
|
|
|
24
24
|
|
|
25
25
|
## Quick start
|
|
26
26
|
|
|
27
|
-
Start Pi,
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
|
51
|
-
| `/develop on` | Enable adaptive routing
|
|
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
|
-
|
|
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
|
|
63
|
-
flag:
|
|
54
|
+
Start a non-interactive or preconfigured session with Developer enabled:
|
|
64
55
|
|
|
65
56
|
```sh
|
|
66
|
-
pi --develop
|
|
67
|
-
pi --develop-mode strict
|
|
57
|
+
pi --develop
|
|
68
58
|
```
|
|
69
59
|
|
|
70
|
-
##
|
|
60
|
+
## Activation and tool policy
|
|
71
61
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
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
|
|
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 `
|
|
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;
|
|
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
|
|
101
|
-
|
|
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
|
|
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
|
|
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
|
|
133
|
-
|
|
134
|
-
|
|
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
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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` |
|
|
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
|
|
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-
|
|
174
|
+
- `gate`: `none`, `before-implementation`, or `before-completion`;
|
|
181
175
|
- `resolutionCriteria`: the observable evidence or answer that closes it;
|
|
182
|
-
-
|
|
183
|
-
|
|
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
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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-
|
|
207
|
-
routes and Pi built-in
|
|
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
|
|
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
|
-
|
|
281
|
-
stored in tool-result details. Developer replays the current branch through
|
|
282
|
-
XState v5 machine on startup and tree navigation, so a fork inherits only the
|
|
283
|
-
events on its branch. Parallel machine regions keep
|
|
284
|
-
framing debt, and verification debt explicit; transition guards reject
|
|
285
|
-
route while a `before-
|
|
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
|
-
├──
|
|
290
|
-
├── route: idle | judgment |
|
|
284
|
+
├── activation: disabled | enabled
|
|
285
|
+
├── route: idle | judgment | implementation
|
|
291
286
|
├── questions: clear | open
|
|
292
|
-
├──
|
|
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,
|
|
300
|
-
`mutate`, and question/debt regions expose blocking tags. Every
|
|
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
|
|
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/
|
|
306
|
-
|
|
307
|
-
|
|
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/ #
|
|
350
|
-
├── state.ts # developer/
|
|
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
|
|
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
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
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
|
-
|
|
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-
|
|
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, `
|
|
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
|
|
415
|
-
landing and an agent-owned before-
|
|
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
|
|
6
|
-
|
|
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 `
|
|
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` | `
|
|
55
|
-
| *99 Bottles of OOP*, ch. 4-5 | stable landings, responsibility-derived names, argument and data movement | `abstraction-review`, `naming-judgment` | `
|
|
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 `
|
|
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` | `
|
|
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
|
|
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
|
```
|