@albinocrabs/feynman 0.2.2 → 0.2.5
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/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +67 -1
- package/CONTRIBUTING.md +1 -0
- package/README.md +260 -22
- package/SECURITY.md +11 -0
- package/bin/feynman.js +419 -36
- package/docs/architecture.md +27 -17
- package/docs/launch.md +10 -2
- package/docs/object-passport.md +91 -0
- package/docs/release.md +162 -0
- package/examples/activity-sequence.md +105 -0
- package/examples/api-flow.md +32 -3
- package/examples/bug-isolation.md +89 -0
- package/examples/c4-platform-diagramming.md +112 -0
- package/examples/context-splitting.md +77 -0
- package/examples/feature-planning.md +107 -0
- package/examples/incident-response.md +77 -0
- package/examples/release-readiness.md +73 -0
- package/examples/service-migration.md +72 -0
- package/hooks/feynman-activate.js +11 -4
- package/hooks/feynman-session-start.js +79 -0
- package/hooks/hooks.json +12 -2
- package/hooks.json +13 -2
- package/package.json +5 -3
- package/rules/feynman-activate.md +5 -7
- package/skills/feynman/SKILL.md +11 -9
package/CHANGELOG.md
CHANGED
|
@@ -2,9 +2,75 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented here.
|
|
4
4
|
|
|
5
|
-
## 0.2.
|
|
5
|
+
## 0.2.5 - 2026-05-08
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- add SessionStart hook priming alongside UserPromptSubmit reinforcement
|
|
10
|
+
- keep full diagram rules enabled by default for Claude Code and Codex
|
|
11
|
+
|
|
12
|
+
### Fixes
|
|
13
|
+
|
|
14
|
+
- preserve explicit /feynman off behavior with silent hooks
|
|
15
|
+
- keep feynman hooks quiet by omitting status messages
|
|
16
|
+
|
|
17
|
+
### Maintenance
|
|
18
|
+
|
|
19
|
+
- bump package and plugin manifest versions to 0.2.5
|
|
20
|
+
- expand tests for SessionStart registration and runtime behavior
|
|
21
|
+
|
|
22
|
+
## 0.2.4 - 2026-05-07
|
|
23
|
+
|
|
24
|
+
Changes since v0.2.2.
|
|
25
|
+
|
|
26
|
+
### Fixes
|
|
27
|
+
|
|
28
|
+
- normalize hook bypass docs and lint-safe examples
|
|
29
|
+
|
|
30
|
+
### CI/CD
|
|
31
|
+
|
|
32
|
+
- make coverage badge commit non-blocking on protected branch
|
|
33
|
+
- stabilize release note extraction by version section
|
|
34
|
+
- auto-update release notes and add npm publish verification
|
|
35
|
+
|
|
36
|
+
### Documentation
|
|
37
|
+
|
|
38
|
+
- expand examples gallery and add activity sequence
|
|
39
|
+
- update changelog for v0.2.3
|
|
40
|
+
- add advanced before-after examples
|
|
6
41
|
|
|
7
42
|
### Maintenance
|
|
8
43
|
|
|
44
|
+
- v0.2.4
|
|
45
|
+
- regenerate changelog for 0.2.3 updates
|
|
46
|
+
- auto-merge #2
|
|
47
|
+
- finalize launch docs, examples and PR auto-merge wiring
|
|
48
|
+
- complete v0.2.0 milestone audit docs
|
|
9
49
|
- sync plugin manifest versions for 0.2.2
|
|
10
50
|
|
|
51
|
+
## 0.2.3 - 2026-05-07
|
|
52
|
+
|
|
53
|
+
Changes since v0.2.2.
|
|
54
|
+
|
|
55
|
+
### Fixes
|
|
56
|
+
|
|
57
|
+
- normalize hook bypass docs and lint-safe examples
|
|
58
|
+
|
|
59
|
+
### CI/CD
|
|
60
|
+
|
|
61
|
+
- make coverage badge commit non-blocking on protected branch
|
|
62
|
+
- stabilize release note extraction by version section
|
|
63
|
+
- auto-update release notes and add npm publish verification
|
|
64
|
+
|
|
65
|
+
### Documentation
|
|
66
|
+
|
|
67
|
+
- expand examples gallery and add activity sequence
|
|
68
|
+
- update changelog for v0.2.3
|
|
69
|
+
- add advanced before-after examples
|
|
70
|
+
|
|
71
|
+
### Maintenance
|
|
72
|
+
|
|
73
|
+
- auto-merge #2
|
|
74
|
+
- finalize launch docs, examples and PR auto-merge wiring
|
|
75
|
+
- complete v0.2.0 milestone audit docs
|
|
76
|
+
- sync plugin manifest versions for 0.2.2
|
package/CONTRIBUTING.md
CHANGED
|
@@ -47,6 +47,7 @@ Before opening a pull request:
|
|
|
47
47
|
- [ ] `README.md` updated if a user-facing feature changed
|
|
48
48
|
- [ ] Commit message follows the format: `type(scope): description`
|
|
49
49
|
(types: `feat`, `fix`, `test`, `docs`, `refactor`, `chore`)
|
|
50
|
+
- [ ] Add labels `auto-merge` and `status:ready` when the PR is fully reviewed and safe to merge automatically
|
|
50
51
|
|
|
51
52
|
---
|
|
52
53
|
|
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
<p align="center">
|
|
21
21
|
<a href="#why-feynman">Why</a> •
|
|
22
|
+
<a href="docs/object-passport.md">Passport</a> •
|
|
22
23
|
<a href="#before--after">Before/After</a> •
|
|
23
24
|
<a href="#install">Install</a> •
|
|
24
25
|
<a href="#intensity-levels">Levels</a> •
|
|
@@ -35,7 +36,7 @@ plugin that automatically injects ASCII diagram rules into every prompt via the
|
|
|
35
36
|
`UserPromptSubmit` hook.
|
|
36
37
|
|
|
37
38
|
```bash
|
|
38
|
-
npx -y @albinocrabs/feynman@latest install --target
|
|
39
|
+
npx -y @albinocrabs/feynman@latest install --target all
|
|
39
40
|
npx -y @albinocrabs/feynman@latest doctor --target codex
|
|
40
41
|
```
|
|
41
42
|
|
|
@@ -47,6 +48,15 @@ Code or Codex prompt and injects rules that turn flows into arrows,
|
|
|
47
48
|
hierarchies into trees, comparisons into columns, and status into frames. The
|
|
48
49
|
structure is visible before you have to think about it.
|
|
49
50
|
|
|
51
|
+
Conceptually, feynman is inspired by prompt-compression ideas from the Caveman
|
|
52
|
+
agent style: smaller prompts, clearer intent, and explicit diagram-first thinking.
|
|
53
|
+
|
|
54
|
+
## Governance docs
|
|
55
|
+
|
|
56
|
+
- `AGENTS.md` — project execution contract for Codex-aware tooling.
|
|
57
|
+
- `CLAUDE.md` — canonical project memory, stack, and architecture constraints.
|
|
58
|
+
- Global instructions are loaded from user-level runtime configuration before repo-specific overrides.
|
|
59
|
+
|
|
50
60
|
## Before / After
|
|
51
61
|
|
|
52
62
|
<table>
|
|
@@ -136,10 +146,10 @@ free | free | $$$
|
|
|
136
146
|
|
|
137
147
|
## Install
|
|
138
148
|
|
|
139
|
-
**
|
|
149
|
+
**Install to Codex by default (when --target is omitted):**
|
|
140
150
|
|
|
141
151
|
```bash
|
|
142
|
-
npx @albinocrabs/feynman install
|
|
152
|
+
npx @albinocrabs/feynman install
|
|
143
153
|
```
|
|
144
154
|
|
|
145
155
|
**Codex via npx:**
|
|
@@ -151,7 +161,7 @@ npx @albinocrabs/feynman install --target codex
|
|
|
151
161
|
**Both clients:**
|
|
152
162
|
|
|
153
163
|
```bash
|
|
154
|
-
npx @albinocrabs/feynman install --target
|
|
164
|
+
npx @albinocrabs/feynman install --target all
|
|
155
165
|
```
|
|
156
166
|
|
|
157
167
|
The install command is idempotent: running it again updates the existing
|
|
@@ -167,7 +177,7 @@ Restart Claude Code or Codex. Done.
|
|
|
167
177
|
|
|
168
178
|
**Verify:** `npx @albinocrabs/feynman doctor --target claude` or `npx @albinocrabs/feynman doctor --target codex`
|
|
169
179
|
|
|
170
|
-
**Uninstall:** `npx @albinocrabs/feynman uninstall --target claude|codex|both
|
|
180
|
+
**Uninstall:** `npx @albinocrabs/feynman uninstall --target claude|codex|both|all|*`
|
|
171
181
|
|
|
172
182
|
**Plugin manifests:** this repo also ships `.claude-plugin/plugin.json`,
|
|
173
183
|
`hooks/hooks.json`, `.codex-plugin/plugin.json`, and `hooks.json` so plugin
|
|
@@ -189,8 +199,7 @@ Add to `~/.claude/settings.json` — use the absolute path, not `~/`
|
|
|
189
199
|
{
|
|
190
200
|
"type": "command",
|
|
191
201
|
"command": "node \"/absolute/path/to/feynman/hooks/feynman-activate.js\"",
|
|
192
|
-
"timeout": 5
|
|
193
|
-
"statusMessage": "Injecting diagram rules..."
|
|
202
|
+
"timeout": 5
|
|
194
203
|
}
|
|
195
204
|
]
|
|
196
205
|
}
|
|
@@ -211,8 +220,7 @@ For Codex, add the same shape to `~/.codex/hooks.json` and set
|
|
|
211
220
|
{
|
|
212
221
|
"type": "command",
|
|
213
222
|
"command": "FEYNMAN_HOME=\"$HOME/.codex\" node \"/absolute/path/to/feynman/hooks/feynman-activate.js\"",
|
|
214
|
-
"timeout": 5
|
|
215
|
-
"statusMessage": "Injecting diagram rules..."
|
|
223
|
+
"timeout": 5
|
|
216
224
|
}
|
|
217
225
|
]
|
|
218
226
|
}
|
|
@@ -222,6 +230,10 @@ For Codex, add the same shape to `~/.codex/hooks.json` and set
|
|
|
222
230
|
```
|
|
223
231
|
</details>
|
|
224
232
|
|
|
233
|
+
After install, feynman starts in `full` mode by default. Disable or change it
|
|
234
|
+
explicitly with `/feynman off`, `/feynman lite`, `/feynman full`, or
|
|
235
|
+
`/feynman ultra`.
|
|
236
|
+
|
|
225
237
|
## Intensity Levels
|
|
226
238
|
|
|
227
239
|
| Level | What draws | Use when |
|
|
@@ -253,24 +265,229 @@ npx @albinocrabs/feynman lint response.md
|
|
|
253
265
|
|
|
254
266
|
See [docs/lint-rules.md](docs/lint-rules.md) for the full L01-L08 reference.
|
|
255
267
|
|
|
268
|
+
### Quick hard-disable / re-enable (testing and emergency)
|
|
269
|
+
|
|
270
|
+
For temporary global disable in Codex (for smoke tests or troubleshooting), use:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
touch ~/.codex/.feynman-disable-global # hard OFF
|
|
274
|
+
rm ~/.codex/.feynman-disable-global # hard ON
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
This bypasses `~/.codex/hooks.json` hook execution entirely.
|
|
278
|
+
Regular `/feynman off` and `/feynman on` continue to use normal profile state
|
|
279
|
+
files (`~/.codex/.feynman-active`, `~/.codex/.feynman/state.json`).
|
|
280
|
+
|
|
281
|
+
## CLI examples
|
|
282
|
+
|
|
283
|
+
Quickly discover and view repository prompt templates:
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
feynman examples
|
|
287
|
+
feynman examples --name feature-planning
|
|
288
|
+
feynman examples --name incident-response
|
|
289
|
+
feynman examples --random
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Export a ready-to-distribute local package (examples, rules, plugins, and skill):
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
feynman bootstrap
|
|
296
|
+
feynman bootstrap --out ./feynman-package
|
|
297
|
+
feynman bootstrap --out ./feynman-package --force
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
This is useful for disconnected/air-gapped installs where you want to copy one
|
|
301
|
+
folder with all `Feynman` assets instead of depending on `npm`.
|
|
302
|
+
|
|
303
|
+
Slash command aliases (inside Claude/Codex):
|
|
304
|
+
|
|
305
|
+
```text
|
|
306
|
+
/feynman on | off
|
|
307
|
+
/feynman start | stop
|
|
308
|
+
/feynman lite | full | ultra
|
|
309
|
+
/feynman status
|
|
310
|
+
```
|
|
311
|
+
|
|
256
312
|
## Examples
|
|
257
313
|
|
|
258
|
-
|
|
314
|
+
Run a concrete example in the needed style:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
feynman examples --name <example-name>
|
|
318
|
+
```
|
|
259
319
|
|
|
260
|
-
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
320
|
+
> Tip: all examples are ready-to-run templates in `examples/*.md`, can be copied into prompts or docs, and rendered as a compact ASCII layout with `feynman examples --name ...`.
|
|
321
|
+
|
|
322
|
+
```text
|
|
323
|
+
[Flow] [Architecture] [API] [Decisions]
|
|
324
|
+
| | | |
|
|
325
|
+
v v v v
|
|
326
|
+
[Action] [System] [Lifecycle] [Reasoning]
|
|
327
|
+
↓ ↓ ↓ ↓
|
|
328
|
+
[Outcome] [Design] [Change] [Choice]
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
## Visual example gallery
|
|
332
|
+
|
|
333
|
+
### Flow and actioning
|
|
334
|
+
|
|
335
|
+
#### Incident-ready action playbooks
|
|
336
|
+
|
|
337
|
+
- [Activity sequence](examples/activity-sequence.md) — incident action plans with rollback gates
|
|
338
|
+
```
|
|
339
|
+
[Incident] --> [Triage] --> [Contain] --> [Mitigate] --> [Review]
|
|
340
|
+
| no |
|
|
341
|
+
v |
|
|
342
|
+
[Rollback] <----+
|
|
343
|
+
```
|
|
344
|
+
- [Incident response](examples/incident-response.md) — triage and containment sequence
|
|
345
|
+
```
|
|
346
|
+
[Detect] --> [Classify] --> [Isolate] --> [Communicate]
|
|
347
|
+
|
|
|
348
|
+
+--> [Recover]
|
|
349
|
+
```
|
|
350
|
+
- [Bug isolation](examples/bug-isolation.md) — stateful diagnostic flow with priorities
|
|
351
|
+
```
|
|
352
|
+
▲ high
|
|
353
|
+
high-likelihood
|
|
354
|
+
▼ low
|
|
355
|
+
narrow scope
|
|
356
|
+
documentation
|
|
357
|
+
```
|
|
358
|
+
- [Release readiness](examples/release-readiness.md) — staged launch gates and recovery triggers
|
|
359
|
+
```
|
|
360
|
+
[Build] --> [QA] --> [Dark launch] --> [General]
|
|
361
|
+
| no | yes
|
|
362
|
+
v v
|
|
363
|
+
[Rollback] [Monitor]
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Architecture and design
|
|
367
|
+
|
|
368
|
+
- [Architecture review](examples/architecture-review.md) — auth system decomposition
|
|
369
|
+
```
|
|
370
|
+
Auth
|
|
371
|
+
├── Service
|
|
372
|
+
│ ├── Redis rate limits
|
|
373
|
+
│ └── Postgres users
|
|
374
|
+
└── Observability
|
|
375
|
+
└── Events
|
|
376
|
+
```
|
|
377
|
+
- [C4 platform design](examples/c4-platform-diagramming.md) — context → container → component
|
|
378
|
+
```
|
|
379
|
+
[User] --> [Web] --> [API] --> [DB]
|
|
380
|
+
```
|
|
381
|
+
- [Context splitting](examples/context-splitting.md) — decomposing complex initiatives
|
|
382
|
+
```
|
|
383
|
+
Initiative
|
|
384
|
+
├── Domain A
|
|
385
|
+
├── Domain B
|
|
386
|
+
└── Domain C
|
|
387
|
+
```
|
|
388
|
+
- [Database schema](examples/db-schema.md) — entity model as structured tree
|
|
389
|
+
```
|
|
390
|
+
Report
|
|
391
|
+
├── Metadata
|
|
392
|
+
├── Sections
|
|
393
|
+
└── History
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### API and migration
|
|
397
|
+
|
|
398
|
+
- [API flow](examples/api-flow.md) — request lifecycle with branch diagnostics
|
|
399
|
+
```
|
|
400
|
+
[Client] --> [Auth] --> [Service] --> [DB]
|
|
401
|
+
| yes |
|
|
402
|
+
+-->[Cache] ---+
|
|
403
|
+
```
|
|
404
|
+
- [Deploy pipeline](examples/deploy-pipeline.md) — CI/CD action chain
|
|
405
|
+
```
|
|
406
|
+
[Source] --> [Build] --> [Test] --> [Canary] --> [Scale]
|
|
407
|
+
| |
|
|
408
|
+
v +--> [Rollback]
|
|
409
|
+
```
|
|
410
|
+
- [Service migration](examples/service-migration.md) — cutover with risk controls
|
|
411
|
+
```
|
|
412
|
+
[Old service] --> [Dual write] --> [Read compare] --> [Cut over]
|
|
413
|
+
| mismatch
|
|
414
|
+
v
|
|
415
|
+
[Stop migration]
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Decisions and methods
|
|
419
|
+
|
|
420
|
+
- [Feature planning](examples/feature-planning.md) — decision matrix + phased rollout
|
|
421
|
+
```
|
|
422
|
+
[Need] --> [Plan] --> [Run experiment] --> [Scale]
|
|
423
|
+
| |
|
|
424
|
+
+--> [Kill-switch]
|
|
425
|
+
```
|
|
426
|
+
- [Algorithm walkthrough](examples/algorithm-explain.md) — rate-limiter logic as explainable sequence
|
|
427
|
+
```
|
|
428
|
+
[Need decision?] --> [Compute score] --> [Allow / Deny]
|
|
429
|
+
```
|
|
430
|
+
- [Code review](examples/code-review.md) — issue prioritization and evidence matrix
|
|
431
|
+
```
|
|
432
|
+
▲ must-fix [security]
|
|
433
|
+
▲ medium [performance]
|
|
434
|
+
▼ low [docs]
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### One-command pack test
|
|
438
|
+
|
|
439
|
+
```bash
|
|
440
|
+
feynman examples --name activity-sequence && \
|
|
441
|
+
feynman examples --name incident-response && \
|
|
442
|
+
feynman examples --name c4-platform-diagramming
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
## Visual gallery (before → after)
|
|
446
|
+
|
|
447
|
+
If you want to quickly see how diagram-first responses evolve, this is the core pattern:
|
|
448
|
+
|
|
449
|
+
Without feynman:
|
|
450
|
+
|
|
451
|
+
`We need to choose between shipping fast with a managed API, keeping control in-house, or a hybrid path while managing risk and cost.`
|
|
452
|
+
|
|
453
|
+
With feynman:
|
|
454
|
+
|
|
455
|
+
```
|
|
456
|
+
[Is SLA strict?] --> [Yes] --> [Prefer managed service]
|
|
457
|
+
| | |
|
|
458
|
+
| v v
|
|
459
|
+
| [Contract + vendor risk] --> [Is rollback cheap?]
|
|
460
|
+
| |
|
|
461
|
+
v +--> [Yes] --> [Adopt + guardrails]
|
|
462
|
+
[Can we build fast?] +--> [No] --> [Hybrid path]
|
|
463
|
+
|
|
|
464
|
+
no ------ +------- yes
|
|
465
|
+
| |
|
|
466
|
+
v v
|
|
467
|
+
[Build in house] [Run controlled managed pilot]
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
Same brief question, different clarity level.
|
|
471
|
+
|
|
472
|
+
```
|
|
473
|
+
criterion | build in-house | managed API | hybrid
|
|
474
|
+
---------------|----------------|-------------|----------------
|
|
475
|
+
launch speed | slow | fast | medium
|
|
476
|
+
vendor lock-in | low | high | medium
|
|
477
|
+
compliance | high control | partner SLA | custom controls
|
|
478
|
+
cost | low initial | medium | medium-high
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
Use this gallery style if you want `feynman` examples to look “production-clean”
|
|
482
|
+
from day one.
|
|
266
483
|
|
|
267
484
|
## How it works
|
|
268
485
|
|
|
269
|
-
The `
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
the
|
|
486
|
+
The `SessionStart` hook primes fresh Claude Code or Codex sessions with the
|
|
487
|
+
active rules, and the `UserPromptSubmit` hook reinforces them on every prompt.
|
|
488
|
+
Both hooks read the target-local state file
|
|
489
|
+
(`~/.claude/.feynman/state.json` or `~/.codex/.feynman/state.json`), extract
|
|
490
|
+
the rules for the active intensity level, and inject them into model context.
|
|
274
491
|
|
|
275
492
|
```
|
|
276
493
|
[your prompt]
|
|
@@ -289,7 +506,10 @@ the model on every message.
|
|
|
289
506
|
Every push runs tests on Node 18 and 20 across Ubuntu and macOS. The release
|
|
290
507
|
lane also lints public docs, smoke-tests the packed npm tarball, builds a
|
|
291
508
|
`dist/*.tgz` artifact, and can publish to npm from a GitHub Release when
|
|
292
|
-
`NPM_TOKEN` is configured.
|
|
509
|
+
`NPM_TOKEN` is configured. If the token is absent and the package version is
|
|
510
|
+
already published, the workflow updates release notes and exits successfully;
|
|
511
|
+
for a new publish, it fails with a clear message so token-less publication
|
|
512
|
+
cannot silently pass.
|
|
293
513
|
|
|
294
514
|
```bash
|
|
295
515
|
npm run ci
|
|
@@ -297,6 +517,24 @@ npm run changelog
|
|
|
297
517
|
npm run build
|
|
298
518
|
```
|
|
299
519
|
|
|
520
|
+
### GitHub release path
|
|
521
|
+
|
|
522
|
+
1. Tag and release from GitHub (or run workflow_dispatch with `dry_run=false`).
|
|
523
|
+
2. Ensure repository secret `NPM_TOKEN` is set (only needed for first publish
|
|
524
|
+
of a new version).
|
|
525
|
+
3. Keep version/tag aligned: release tag must equal `package.json` with `v`
|
|
526
|
+
prefix (enforced by workflow).
|
|
527
|
+
4. Create release notes generated from `CHANGELOG.md` and verify package
|
|
528
|
+
availability after publish.
|
|
529
|
+
5. Mark PRs for auto-merge with labels `auto-merge` and `status:ready` and
|
|
530
|
+
keep required review approvals in place.
|
|
531
|
+
|
|
532
|
+
Set or rotate `NPM_TOKEN` with:
|
|
533
|
+
|
|
534
|
+
```bash
|
|
535
|
+
gh secret set NPM_TOKEN -r apolenkov/feynman
|
|
536
|
+
```
|
|
537
|
+
|
|
300
538
|
State is stored at `~/.claude/.feynman/state.json`. First run bootstraps
|
|
301
539
|
automatically. See [docs/architecture.md](docs/architecture.md) for internals.
|
|
302
540
|
|
package/SECURITY.md
CHANGED
|
@@ -29,3 +29,14 @@ feynman is a local hook package. The main security-sensitive surfaces are:
|
|
|
29
29
|
- state files under `~/.claude/.feynman/` and `~/.codex/.feynman/`
|
|
30
30
|
|
|
31
31
|
The package has zero runtime npm dependencies.
|
|
32
|
+
|
|
33
|
+
## Release Security Checklist
|
|
34
|
+
|
|
35
|
+
Before publishing a new npm version:
|
|
36
|
+
|
|
37
|
+
- CI required checks must pass on Node 18 and 20 across Ubuntu and macOS.
|
|
38
|
+
- `npm run audit` must pass at `moderate` severity or higher.
|
|
39
|
+
- GitHub release tag must match `package.json` version with a `v` prefix.
|
|
40
|
+
- GitHub Actions secret `NPM_TOKEN` must be present for first publish of a new version.
|
|
41
|
+
- npm provenance is enabled in the release workflow.
|
|
42
|
+
- Registry smoke verification must pass after publish (`npm view`, install from npm, `feynman doctor --target both`).
|