@sushanglewis/lincoln 1.5.5 → 1.6.1

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.
Files changed (81) hide show
  1. package/dist/main.js +425 -51
  2. package/dist/main.js.map +1 -1
  3. package/dist/postinstall.d.ts +9 -2
  4. package/dist/postinstall.js +812 -6
  5. package/dist/postinstall.js.map +1 -1
  6. package/framework/.claude/agents/architect.md +15 -15
  7. package/framework/.claude/agents/default.md +118 -104
  8. package/framework/.claude/agents/designer.md +16 -51
  9. package/framework/.claude/agents/engineer.md +16 -25
  10. package/framework/.claude/agents/frontend-engineer.md +15 -16
  11. package/framework/.claude/agents/knowledge-curator.md +18 -15
  12. package/framework/.claude/agents/pm.md +16 -75
  13. package/framework/.claude/agents/qa.md +17 -13
  14. package/framework/.claude/agents/release-coordinator.md +18 -12
  15. package/framework/.claude/agents/researcher.md +16 -26
  16. package/framework/.claude/harnesses/command-map.yaml +12 -5
  17. package/framework/.claude/hooks/on-session-start.sh +0 -1
  18. package/framework/.claude/schemas/agent-definition.schema.json +6 -1
  19. package/framework/.claude/schemas/stage-definition.schema.json +49 -4
  20. package/framework/.claude/skills/build-product-prototype/prompts/main.md +89 -26
  21. package/framework/.claude/skills/clarify-requirements/prompts/main.md +80 -14
  22. package/framework/.claude/skills/draft-product-design/prompts/main.md +24 -12
  23. package/framework/.claude/skills/lc-build-codebase-knowledge/SKILL.md +2 -0
  24. package/framework/.claude/skills/lc-explore-opensource/SKILL.md +2 -0
  25. package/framework/.claude/skills/lc-market-research/SKILL.md +1 -1
  26. package/framework/.claude/skills/lc-one-id/SKILL.md +81 -0
  27. package/framework/.claude/skills/lc-one-id/prompts/main.md +35 -0
  28. package/framework/.claude/skills/lc-stakeholder-research/SKILL.md +1 -1
  29. package/framework/.claude/skills/lc-workflow-router/SKILL.md +2 -0
  30. package/framework/.claude/stages/build-codebase-knowledge.yaml +10 -10
  31. package/framework/.claude/stages/clarify.yaml +21 -15
  32. package/framework/.claude/stages/explore-opensource.yaml +13 -10
  33. package/framework/.claude/stages/implement.yaml +11 -11
  34. package/framework/.claude/stages/ingest.yaml +13 -10
  35. package/framework/.claude/stages/lc-analyze-frameworks.yaml +13 -10
  36. package/framework/.claude/stages/lc-collect-intelligence.yaml +13 -10
  37. package/framework/.claude/stages/lc-competitive-analysis.yaml +13 -10
  38. package/framework/.claude/stages/lc-first-principles.yaml +13 -10
  39. package/framework/.claude/stages/lc-market-research.yaml +13 -10
  40. package/framework/.claude/stages/lc-product-research.yaml +13 -10
  41. package/framework/.claude/stages/lc-research-report.yaml +13 -10
  42. package/framework/.claude/stages/lc-research-scope.yaml +13 -10
  43. package/framework/.claude/stages/lc-stakeholder-research.yaml +13 -10
  44. package/framework/.claude/stages/lc-storytelling.yaml +13 -10
  45. package/framework/.claude/stages/product-design-docs.yaml +30 -18
  46. package/framework/.claude/stages/product-prototype.yaml +20 -17
  47. package/framework/.claude/stages/propose.yaml +16 -9
  48. package/framework/.claude/stages/split.yaml +13 -9
  49. package/framework/.claude/stages/sync-knowledge.yaml +20 -9
  50. package/framework/.claude/stages/tdd-development-plan.yaml +17 -9
  51. package/framework/.claude/stages/workflow-router.yaml +17 -13
  52. package/framework/.claude/workflows/bug-fix.yaml +1 -0
  53. package/framework/.claude/workflows/existing-project-iteration.yaml +1 -0
  54. package/framework/.claude/workflows/interview-to-knowledge.yaml +1 -0
  55. package/framework/.claude/workflows/oss-first-design.yaml +1 -0
  56. package/framework/.claude-plugin/marketplace.json +2 -2
  57. package/framework/.claude-plugin/plugin.json +2 -1
  58. package/framework/.version-bump.json +1 -1
  59. package/framework/README.en.md +15 -2
  60. package/framework/README.md +16 -3
  61. package/framework/RELEASE.md +32 -0
  62. package/framework/manifest.json +93 -73
  63. package/framework/scripts/check-prompt-drift.py +132 -1
  64. package/framework/scripts/extract_release_notes.py +79 -0
  65. package/framework/scripts/init-lincoln-branch.sh +6 -0
  66. package/framework/scripts/lincoln_command_map.py +1 -1
  67. package/framework/scripts/lincoln_id.py +333 -0
  68. package/framework/scripts/lincoln_index.py +10 -0
  69. package/framework/scripts/lincoln_prd.py +16 -17
  70. package/framework/scripts/lincoln_render.py +657 -0
  71. package/framework/scripts/run-infrastructure-tests.py +2 -0
  72. package/framework/scripts/stage_loader.py +149 -2
  73. package/framework/scripts/static-check.sh +1 -1
  74. package/framework/scripts/update_readme_version.py +149 -0
  75. package/framework/scripts/validate_stage.py +80 -1
  76. package/framework/tools/lincoln/package-lock.json +2 -2
  77. package/framework/tools/lincoln/package.json +1 -1
  78. package/framework/tools/lincoln-installer/package-lock.json +2 -2
  79. package/framework/tools/lincoln-installer/package.json +1 -1
  80. package/package.json +2 -2
  81. package/framework/.claude/agents/_contract.md +0 -79
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.5.5",
3
- "generatedAt": "2026-08-06T10:41:55.007Z",
2
+ "version": "1.6.1",
3
+ "generatedAt": "2026-08-11T08:28:26.475Z",
4
4
  "files": [
5
5
  {
6
6
  "path": ".claude-plugin/hooks.json",
@@ -8,31 +8,27 @@
8
8
  },
9
9
  {
10
10
  "path": ".claude-plugin/marketplace.json",
11
- "sha256": "d089b4dfe5d3401b070b780eea94311ab4045f6ea8eee0d68259cd0e9d76ea98"
11
+ "sha256": "22fdfe338d31ebf825de92dc86a198cdae95ad32053bfa23f804cd5a63f0a4dd"
12
12
  },
13
13
  {
14
14
  "path": ".claude-plugin/plugin.json",
15
- "sha256": "c9d93e0bc5e220460cdf18d4caf01c1886adc120235c6112b73f7a96e69b9041"
16
- },
17
- {
18
- "path": ".claude/agents/_contract.md",
19
- "sha256": "8fbb05a87e6992e71bfdffd9239f3e139e77e9f9d23be083191fcae54be4b79b"
15
+ "sha256": "f5694b88ed47be30dc02a6c0b222d2f3e02a5b6947cbf6c78ce7b113f533ea66"
20
16
  },
21
17
  {
22
18
  "path": ".claude/agents/architect.md",
23
- "sha256": "9ab173977026ff5a7b4d6272092c7dafadc131cdd3e0b8a45cc4d50c62b59e3e"
19
+ "sha256": "1125f81ebdd7bb797a2420d5b28272e3a66cf0ff254e9805b94e28394999113b"
24
20
  },
25
21
  {
26
22
  "path": ".claude/agents/default.md",
27
- "sha256": "c8859023e6e307e778f2fe8ebf9a07b425b8369eb647370b981b2ce7156dbb12"
23
+ "sha256": "bb855ad3ac9cfdb562d34f6a5b1d4bd300f22436bde0aed614fcfaf772007e58"
28
24
  },
29
25
  {
30
26
  "path": ".claude/agents/designer.md",
31
- "sha256": "486e8dd7d84239864fa9307242e9225011f6e32dbc0570018167bf81497a8884"
27
+ "sha256": "4e4842188ad22b35db2f60dacfe6f3241f97e1204874bc2615cc62619b882c62"
32
28
  },
33
29
  {
34
30
  "path": ".claude/agents/engineer.md",
35
- "sha256": "4416a3dade22d9c3735285a7220c875c8081139ebf8d20ed6be69d30287c603a"
31
+ "sha256": "dfb8d269b92ea762a0f0ba9aa719f462057825ed15fd0b3b8e26419637a49159"
36
32
  },
37
33
  {
38
34
  "path": ".claude/agents/external/NOTICES.md",
@@ -76,27 +72,27 @@
76
72
  },
77
73
  {
78
74
  "path": ".claude/agents/frontend-engineer.md",
79
- "sha256": "db857ec8f70c541668df7834328fbe98c8a8300e2fb88d72715e6f8467d155cb"
75
+ "sha256": "f6660eaa6440c655629cc54783500540a5b403cd3d5446f9601513cb2cee7dca"
80
76
  },
81
77
  {
82
78
  "path": ".claude/agents/knowledge-curator.md",
83
- "sha256": "4f18e91a536aca98c774cdffcf85a584d7e38a0eea5e9e08fc9ac7ef872b3249"
79
+ "sha256": "0a132d13c9454c6e4e233dc042c2f5c299c6342940154eb6d017af3e0abae6ee"
84
80
  },
85
81
  {
86
82
  "path": ".claude/agents/pm.md",
87
- "sha256": "9fd855a51d83fdd57deda3eda419f3f712d8494b6026dfa864f9d6340150dfb3"
83
+ "sha256": "82502490bae859380f1ed99da890f18a061a4560f31cf22fdf128fb1942536f2"
88
84
  },
89
85
  {
90
86
  "path": ".claude/agents/qa.md",
91
- "sha256": "00c2f73e089e47237faac75122bf22ae94e457aaf18b1f70b48c5e62968f9a97"
87
+ "sha256": "b44f7b832d83b0c5d367ec612e3501b82c5b947d0ffe6da6908f13dbd0a92f8a"
92
88
  },
93
89
  {
94
90
  "path": ".claude/agents/release-coordinator.md",
95
- "sha256": "25f8d1538dfaa50b6583076f8610f819b15233dd5c34908d4a2d4785386e42cb"
91
+ "sha256": "622b11f768e40a9ef0b3f1fdd3eba61463a61f76b1b3ed96960710d34ca55d3f"
96
92
  },
97
93
  {
98
94
  "path": ".claude/agents/researcher.md",
99
- "sha256": "e273f60c55915b489ed29e481bf4405240478530026508c9085c8de2b7e51cb9"
95
+ "sha256": "11a9f3b232c84a4d5d13b42a2ade3beaafe04b708a53836b54226b49e79a9eaa"
100
96
  },
101
97
  {
102
98
  "path": ".claude/harnesses/claude-code.yaml",
@@ -108,7 +104,7 @@
108
104
  },
109
105
  {
110
106
  "path": ".claude/harnesses/command-map.yaml",
111
- "sha256": "651c8fbf12ca73fac87700e9dbf25264c48284e67d55429e57e1ab635dad8d01"
107
+ "sha256": "4eb7754906a309e47782a1ea9c7bdc4602eedb3adec60a5b9796d73bd5caa627"
112
108
  },
113
109
  {
114
110
  "path": ".claude/harnesses/opencode.yaml",
@@ -124,7 +120,7 @@
124
120
  },
125
121
  {
126
122
  "path": ".claude/hooks/on-session-start.sh",
127
- "sha256": "0bc2d1276c468655d3843d0df987603e7a084444e181b3e89be9b9106f95a765"
123
+ "sha256": "b499b2db7340b12251d5bf33b919acd611f256a48824c8b3c197f20db680f291"
128
124
  },
129
125
  {
130
126
  "path": ".claude/hooks/on-stop.sh",
@@ -140,7 +136,7 @@
140
136
  },
141
137
  {
142
138
  "path": ".claude/schemas/agent-definition.schema.json",
143
- "sha256": "a6a16adfc2506aa40d61e644bab4d9460f25b15974903ddedf4d492e76551acc"
139
+ "sha256": "b1677d5f115d53723b30948b2be93b790e86130bb876982cb95a249de4758c1b"
144
140
  },
145
141
  {
146
142
  "path": ".claude/schemas/benchmark-report.schema.json",
@@ -152,7 +148,7 @@
152
148
  },
153
149
  {
154
150
  "path": ".claude/schemas/stage-definition.schema.json",
155
- "sha256": "609734d0e9a45847e870df409f491096ecf41b06d441312f0ee2998b4fa4866a"
151
+ "sha256": "f7a0ca9d84a16a28b7e6131e1d88b993cdad20bfe0701c91685fa01568151351"
156
152
  },
157
153
  {
158
154
  "path": ".claude/schemas/workflow-stage.schema.json",
@@ -172,7 +168,7 @@
172
168
  },
173
169
  {
174
170
  "path": ".claude/skills/build-product-prototype/prompts/main.md",
175
- "sha256": "0f1ae05e77edf73a86034bdcf7ff73b25b49b8e62e58de575b435f81ceb3c97d"
171
+ "sha256": "de20a3aa5ea85747069668834d39e9a255ca8c5d7d3752264d7393e9c9185d5a"
176
172
  },
177
173
  {
178
174
  "path": ".claude/skills/clarify-requirements/SKILL.md",
@@ -180,7 +176,7 @@
180
176
  },
181
177
  {
182
178
  "path": ".claude/skills/clarify-requirements/prompts/main.md",
183
- "sha256": "70c624da8ecbef640ec5dce06a0a9bc208c894a4459e32fdf051fa979b5b0781"
179
+ "sha256": "0a29f5f44b94b219c801f53e5dc2e441d6fe15e7e07c4bde02562d5a92a53b57"
184
180
  },
185
181
  {
186
182
  "path": ".claude/skills/dependencies.yaml",
@@ -192,7 +188,7 @@
192
188
  },
193
189
  {
194
190
  "path": ".claude/skills/draft-product-design/prompts/main.md",
195
- "sha256": "273830a1cd2275dbf60c4b1f56ded8d71b66b73906de100dbd36ccca02f26404"
191
+ "sha256": "d23079d4dc5a1338877cb56221dfe77831a171f6750e0938aefb9d45c4b73322"
196
192
  },
197
193
  {
198
194
  "path": ".claude/skills/lc-analyze-frameworks/SKILL.md",
@@ -208,7 +204,7 @@
208
204
  },
209
205
  {
210
206
  "path": ".claude/skills/lc-build-codebase-knowledge/SKILL.md",
211
- "sha256": "2bce206aed299b01ccfffe4beee5d95f197eb338b7124846f88786ebdf8aa5e9"
207
+ "sha256": "994afcd5fcfefb679973e33917e2bcc4d7aa0fd8e3ee0e95c58d0139043421ff"
212
208
  },
213
209
  {
214
210
  "path": ".claude/skills/lc-build-codebase-knowledge/prompts/build-codebase-knowledge.md",
@@ -232,7 +228,7 @@
232
228
  },
233
229
  {
234
230
  "path": ".claude/skills/lc-explore-opensource/SKILL.md",
235
- "sha256": "e3b7a5893e80828b4d6dec8f176e395585e45b9d8b18bdcab80f1e894bd631ed"
231
+ "sha256": "3088c43cf5cd8c5f01755827d7c99dcb8f22d6d2787d5a312f2f14e1e8607954"
236
232
  },
237
233
  {
238
234
  "path": ".claude/skills/lc-explore-opensource/prompts/explore-opensource.md",
@@ -256,12 +252,20 @@
256
252
  },
257
253
  {
258
254
  "path": ".claude/skills/lc-market-research/SKILL.md",
259
- "sha256": "32c164313e55ca1de6b1bee9d5fd61b75c887e3f27707cbf3414778e57c19b6e"
255
+ "sha256": "361797ae5ef0fe3c4cb8bd01220274b0b3cb1b00629ee8cd9fb30c2825775c99"
260
256
  },
261
257
  {
262
258
  "path": ".claude/skills/lc-market-research/prompts/main.md",
263
259
  "sha256": "54458fa7fa24f64feb11816495559bcaee6acc856299071f1ee4f5c01e687dd3"
264
260
  },
261
+ {
262
+ "path": ".claude/skills/lc-one-id/SKILL.md",
263
+ "sha256": "162f1078c446149c338c9ce3110e0232cfda6a4e5ea720783c1237a4b574c46b"
264
+ },
265
+ {
266
+ "path": ".claude/skills/lc-one-id/prompts/main.md",
267
+ "sha256": "cd68bfffef8c6b420d4603e1a6c3f6ac6e1997e6d71aa741147ff44f2cc2d2cc"
268
+ },
265
269
  {
266
270
  "path": ".claude/skills/lc-product-research/SKILL.md",
267
271
  "sha256": "9f91b208deeda3da9d5b772a92add820d62156387e352cdedb348746e142b363"
@@ -300,7 +304,7 @@
300
304
  },
301
305
  {
302
306
  "path": ".claude/skills/lc-stakeholder-research/SKILL.md",
303
- "sha256": "51a3a5436cf6e9fd39929f008e3663ae07592bbb130729d1c21853fc24876592"
307
+ "sha256": "db482a1e51a7a0e99db739105a9b435b97d95bcdfd3c99bdb9253bf3b706f673"
304
308
  },
305
309
  {
306
310
  "path": ".claude/skills/lc-stakeholder-research/prompts/main.md",
@@ -324,7 +328,7 @@
324
328
  },
325
329
  {
326
330
  "path": ".claude/skills/lc-workflow-router/SKILL.md",
327
- "sha256": "a08e912fdaeb602a68b970d29283b49ba4dbbb2e75014788aaa6e6909c9e5357"
331
+ "sha256": "1e011da2ee213b4fe01b1702ad9a7d67778f4a08ce93fe515b5b13ac32602357"
328
332
  },
329
333
  {
330
334
  "path": ".claude/skills/lc-workflow-router/prompts/intake-prompt.md",
@@ -392,91 +396,91 @@
392
396
  },
393
397
  {
394
398
  "path": ".claude/stages/build-codebase-knowledge.yaml",
395
- "sha256": "77794ba9e4746c1aa66264e6a1b119e966681a82d4152c7a606c45ba02953851"
399
+ "sha256": "80c8861f3dcfd6479ce6f257773183f7aa9c1f964e3647acbb37f1aa760e69f2"
396
400
  },
397
401
  {
398
402
  "path": ".claude/stages/clarify.yaml",
399
- "sha256": "2878d3638ead62ca5b68d9e0f2888fdc023cc1366277c8e449f3b7755ff5d101"
403
+ "sha256": "82c6ce76f6762a12c5459e21ce98463eec4fb414f0eea4bae179eac173d451d0"
400
404
  },
401
405
  {
402
406
  "path": ".claude/stages/explore-opensource.yaml",
403
- "sha256": "5438579419c65ab5e1608f31e526e0b1cdfe5bf3ebfecde6dd7db9bbc4172e20"
407
+ "sha256": "abba67a598faf55d79e82a1463f18bab7c5056da0a64d8d46436c610459f4f88"
404
408
  },
405
409
  {
406
410
  "path": ".claude/stages/implement.yaml",
407
- "sha256": "9a83ba3b1a29fbd75496aacba5dfb0600bebcb831492919d2c56c205458b87f4"
411
+ "sha256": "220a02cb703a54bc3f9fdeccba3e153f7d0e9829ec86c62430628594246aa33e"
408
412
  },
409
413
  {
410
414
  "path": ".claude/stages/ingest.yaml",
411
- "sha256": "c621df76c6e3479ac6901ea52e74582a1efe84d34dce37feedff4bf354118811"
415
+ "sha256": "8a8fcb353cf6dd6fc1475a1fcf1a2f8f9c7e8a7914c84fcb1df879b232d85b1f"
412
416
  },
413
417
  {
414
418
  "path": ".claude/stages/lc-analyze-frameworks.yaml",
415
- "sha256": "bef8b086f7f83b3c0f536cbb097e701289efdda717a664ce1282d6d4e5943fa4"
419
+ "sha256": "85d14859996c5455a4aa0c3ffd8cfd96241b5ffffcce5167355e80ac5d33f015"
416
420
  },
417
421
  {
418
422
  "path": ".claude/stages/lc-collect-intelligence.yaml",
419
- "sha256": "d12a4692c23de375a1b069eccbe5810709ded2df1f1f81f28eecc830c9590986"
423
+ "sha256": "ec12ff3264c0a3ebc31db1e23dd4c12b9975beee2d7469917b749f7385ba9e77"
420
424
  },
421
425
  {
422
426
  "path": ".claude/stages/lc-competitive-analysis.yaml",
423
- "sha256": "5da093ccbf3396655b95626607fca81972b3db5b69578dc2dc544765b4866b93"
427
+ "sha256": "9d88cc227fcebbc60e0ba8e3fd2248059147a7b86414b24100068834cd453fdd"
424
428
  },
425
429
  {
426
430
  "path": ".claude/stages/lc-first-principles.yaml",
427
- "sha256": "af066cc4bdf90896646743b3e7f19c335f04d772ea6d1ff40a3fefad71337ab6"
431
+ "sha256": "4f0a51c0958178f8b0301c491759a2ba33dd05633228e7da855f9e349b691c9b"
428
432
  },
429
433
  {
430
434
  "path": ".claude/stages/lc-market-research.yaml",
431
- "sha256": "41bda44661df9929dddc6044a77ddba716ba4a7611e5356ddae400d493bd7fd5"
435
+ "sha256": "b686f56d27c80a24252bbb502be4e14388e15beeabd3baa1c7a6528058bc8c50"
432
436
  },
433
437
  {
434
438
  "path": ".claude/stages/lc-product-research.yaml",
435
- "sha256": "3970914630e6eef4e8040dee2ae00d1cb5d642f83a6fa37b2ec7833067a23014"
439
+ "sha256": "5761155114fc582721ae53234c89df1dfa9ecd682b77fdec6b7b15fa93a693b0"
436
440
  },
437
441
  {
438
442
  "path": ".claude/stages/lc-research-report.yaml",
439
- "sha256": "d625c24adfc061612b51a98457d934446480ae4c1110d4e46a2e32523b5263af"
443
+ "sha256": "a3c1287568dca1da2ce13d015829e5238a0cb487b8ab1be79bbe1eb1805cd62f"
440
444
  },
441
445
  {
442
446
  "path": ".claude/stages/lc-research-scope.yaml",
443
- "sha256": "81ea27c768df7ef45b041e6233f95ca3551aed22956c08ce9cc2b3ea019c6484"
447
+ "sha256": "5ae9afa0b8384065cc41eadcd04072c9bd85527fb8fb6eae35d2c5378d3e8ba9"
444
448
  },
445
449
  {
446
450
  "path": ".claude/stages/lc-stakeholder-research.yaml",
447
- "sha256": "35d4a1e76f5220f720c4b47c101a851d8f22fff08e51134ad035cd1af1ea8ee9"
451
+ "sha256": "1ff62211fb280553ac3240767d551c8f6bbbfc28e297e794d48edbda86f22d10"
448
452
  },
449
453
  {
450
454
  "path": ".claude/stages/lc-storytelling.yaml",
451
- "sha256": "b78131814224b09d57b933ec08270913c0731c1e5741ba00780dcc4ad8dc1f42"
455
+ "sha256": "3e7dd171db1074b322fb002e0882dd86f448450adb02f3ae6b084d531f9f9cc7"
452
456
  },
453
457
  {
454
458
  "path": ".claude/stages/product-design-docs.yaml",
455
- "sha256": "5d39534ba2b1a929a56c6c8cab46536e66cc1eb6766ce91359afb1d0d73c7965"
459
+ "sha256": "14b536415d9af5dadd72d7799e6ba117f605b833f39a35dc53dec597dbc5c38b"
456
460
  },
457
461
  {
458
462
  "path": ".claude/stages/product-prototype.yaml",
459
- "sha256": "95af05437192dc52216e9c6aa57cff7936ae18e951b02ff9756d1870955c7af4"
463
+ "sha256": "7b27905e4d081198d9ae7b5a57fe9275f1925f43dbbf50e4a89bb242bda0b25a"
460
464
  },
461
465
  {
462
466
  "path": ".claude/stages/propose.yaml",
463
- "sha256": "7185f37e01365a828c169380f18c02cfc259c12ba7c528e7e61a8fda81c143f7"
467
+ "sha256": "5f1d058981185588954a43289d42b69aa0d64ef790ba63c3f91c7ace09150408"
464
468
  },
465
469
  {
466
470
  "path": ".claude/stages/split.yaml",
467
- "sha256": "dd96b0c14e411365f46c84a3b92b80b7f75a281f2e2ec9111af66b2d657d20a7"
471
+ "sha256": "2f47e5e1907d483939a6fd133411242111f652c9ed9048085bbf6313e166265b"
468
472
  },
469
473
  {
470
474
  "path": ".claude/stages/sync-knowledge.yaml",
471
- "sha256": "e83e13637d8c794ee82b02b125d7911aaadbde887f6010217eb02194c95768b6"
475
+ "sha256": "9806b237bc0f97611c03153cd1895a89f5665b5061deda8f9b28117cb589bbab"
472
476
  },
473
477
  {
474
478
  "path": ".claude/stages/tdd-development-plan.yaml",
475
- "sha256": "74a5351f2fc88a0bbd923cec2b8a39219e649f876eaaa544efa5ddccc92e4263"
479
+ "sha256": "6195affc25c98b63564cbfea0020132729209dd76180b01fa96645a6c25fe2ef"
476
480
  },
477
481
  {
478
482
  "path": ".claude/stages/workflow-router.yaml",
479
- "sha256": "a629caef9c4c0223d74d583c46268751246e176e8492a2d8efa6a99268363821"
483
+ "sha256": "4ce6270ff5a4868deed92893ea8ac2e6bc44e5b73acde0e3abd7e2db4099d086"
480
484
  },
481
485
  {
482
486
  "path": ".claude/templates/solo-workflow-context.yaml",
@@ -488,7 +492,7 @@
488
492
  },
489
493
  {
490
494
  "path": ".claude/workflows/bug-fix.yaml",
491
- "sha256": "99fc78f6626591653e66f51b4cbdb4a414c22e7c8ad4c4b108ecd7706955b00f"
495
+ "sha256": "4988af45c32098a5d129bff29e27b3bd6c567f133916d58f05d09f6a50d1d431"
492
496
  },
493
497
  {
494
498
  "path": ".claude/workflows/design-spike.yaml",
@@ -496,15 +500,15 @@
496
500
  },
497
501
  {
498
502
  "path": ".claude/workflows/existing-project-iteration.yaml",
499
- "sha256": "21dc2711e2775db6b4e2c4a2e502127785f4c1bf2dea8e7f4a7ee15e716b90a0"
503
+ "sha256": "027a27a493e1458549aaa66e2d8a139a86fe87d378f51b260f76a0ff7d159fea"
500
504
  },
501
505
  {
502
506
  "path": ".claude/workflows/interview-to-knowledge.yaml",
503
- "sha256": "9d9c5a91aab18bae8719081acec9bd0d11948fba7d46e89cf4314c48e058ae9e"
507
+ "sha256": "a511a3db4a27003e27296ed6ef672ae04da7054b039c13b56605079473159427"
504
508
  },
505
509
  {
506
510
  "path": ".claude/workflows/oss-first-design.yaml",
507
- "sha256": "5ce11e0ec52d2442a8ab33a1d6aa2a6930afdfb765c11ab05a17a666725e2579"
511
+ "sha256": "8dfb9010196dcf569539e1ec4f89d3ae7e437f1a8eb45791d2f47802dce715e2"
508
512
  },
509
513
  {
510
514
  "path": ".claude/workflows/pm-research.yaml",
@@ -512,7 +516,7 @@
512
516
  },
513
517
  {
514
518
  "path": ".version-bump.json",
515
- "sha256": "d2ad876127deeaebfd7b25c63d1671fe517b3f08be4ac10b0a4c6a362e012b1b"
519
+ "sha256": "97dda457797db0308ed54bfcdffed8c140a0418f4bcb40f6b593300f98a086b5"
516
520
  },
517
521
  {
518
522
  "path": "CLAUDE.md",
@@ -528,15 +532,15 @@
528
532
  },
529
533
  {
530
534
  "path": "README.en.md",
531
- "sha256": "dc352b91f0b134a7119062a716b34a84ea0a9f62777f5c7f6dbbca8a8ea3cb99"
535
+ "sha256": "f3de08ca0e3dd688c06e9e34f14b0d73494ff1a96b1ebb6228ef2d98ba034e72"
532
536
  },
533
537
  {
534
538
  "path": "README.md",
535
- "sha256": "5f6a04b52cd7ed056511857b99ef9cb58b9da6001fa14d6a958247167025c172"
539
+ "sha256": "3d10e4ee9425294d1a40169bd780f260cf6b28c235a5e4a86df5396c25a11577"
536
540
  },
537
541
  {
538
542
  "path": "RELEASE.md",
539
- "sha256": "db8fc964112091da461f924e0b78eab61b8d668fe5ee53541b117788aee4ceba"
543
+ "sha256": "a8a966d658b73122f3cdc0d41a22c1cde77d7a1b125a9291fcce19af2d8bdb36"
540
544
  },
541
545
  {
542
546
  "path": "SKILL.md",
@@ -576,15 +580,19 @@
576
580
  },
577
581
  {
578
582
  "path": "scripts/check-prompt-drift.py",
579
- "sha256": "0a979da251598b6b749a1131a6e7d8284299bf0ad11825ff3ddb204adba45044"
583
+ "sha256": "35db40123eabf69dccbefa787c27720d3c00155ead3766d0674ce02ce512c22a"
580
584
  },
581
585
  {
582
586
  "path": "scripts/check-skill-dependencies.sh",
583
587
  "sha256": "da7f351745cad14b176e7838f097ea1789f5c058d3d56caf0608a744f4829574"
584
588
  },
589
+ {
590
+ "path": "scripts/extract_release_notes.py",
591
+ "sha256": "b19afadac88af71a0db4bf7f3480ec7047a98a750e967be2c8a844b27305a1a8"
592
+ },
585
593
  {
586
594
  "path": "scripts/init-lincoln-branch.sh",
587
- "sha256": "7ddda629617d78d06e9c35741f6f6b889576cfa18b6d07ca999411c984917f3c"
595
+ "sha256": "93fd96988d466d53bd340eef092d232025c46244940e69a0e27b279b2cc91d99"
588
596
  },
589
597
  {
590
598
  "path": "scripts/init-project.sh",
@@ -624,7 +632,7 @@
624
632
  },
625
633
  {
626
634
  "path": "scripts/lincoln_command_map.py",
627
- "sha256": "d034cfe040cb020f791906b52fffcafd12b7deaa33dd2c69790533ada6f8f900"
635
+ "sha256": "c15cdeb303cd1aaa00527296bf7bab5e7b1b786ca4d292ee3b018e475a5a16a4"
628
636
  },
629
637
  {
630
638
  "path": "scripts/lincoln_dependency_manager.py",
@@ -638,9 +646,13 @@
638
646
  "path": "scripts/lincoln_harness_adapter.py",
639
647
  "sha256": "77d3339fb2519f7d058e75b657f3464fe0cb64854e925f337508a1b3348faeef"
640
648
  },
649
+ {
650
+ "path": "scripts/lincoln_id.py",
651
+ "sha256": "71f651bc14c04ed22acd1defdf4e86c4a6944787be0bc30d284ee15f8d8b05df"
652
+ },
641
653
  {
642
654
  "path": "scripts/lincoln_index.py",
643
- "sha256": "f7c201a85b359be3fb667d50e036c629c65ad34ee133c2b381db31805ad43d82"
655
+ "sha256": "5119c6f5211f5facfb9f66f61b07728a2b30c3b7596f2db3e5de8a97fb5ec84d"
644
656
  },
645
657
  {
646
658
  "path": "scripts/lincoln_paths.py",
@@ -648,7 +660,11 @@
648
660
  },
649
661
  {
650
662
  "path": "scripts/lincoln_prd.py",
651
- "sha256": "19335b050dd40606f2382d5bb94ea701bd3e2c35db0ec2ab80ad912c75e2c3fe"
663
+ "sha256": "6b9f1fe120ac1d4b07c4f3aeea18ac49c1f46a56da6b6541ca82ce8a15f80b47"
664
+ },
665
+ {
666
+ "path": "scripts/lincoln_render.py",
667
+ "sha256": "3c9ed6f6ee1dd1f6c00b78c7518ffd71f473964befba81c774d2a144b5c2cc89"
652
668
  },
653
669
  {
654
670
  "path": "scripts/lincoln_role.py",
@@ -684,15 +700,15 @@
684
700
  },
685
701
  {
686
702
  "path": "scripts/run-infrastructure-tests.py",
687
- "sha256": "3ebcaee7d76b262ef152c4917d54f005758959b4961b6241b0ad114c7b4b6f8e"
703
+ "sha256": "d2140224c7b07ae06d329f3e857733297a590878f67e4fe7f6b9d2d3db6e9375"
688
704
  },
689
705
  {
690
706
  "path": "scripts/stage_loader.py",
691
- "sha256": "9c3c401df584d353f3d55b2439ccc65489810ffa26e82c0609cc5dd835ca6227"
707
+ "sha256": "9694ddc32f53d0eae5eabc55ed15ec5ddb5a2a5b813bcf2ea6c67f772d3e5f3f"
692
708
  },
693
709
  {
694
710
  "path": "scripts/static-check.sh",
695
- "sha256": "61ee915350d6472b5dd8e9ba40b2fd0d23d11175715251e66f11e85dd6fb5686"
711
+ "sha256": "e81ec768da3d31fec253f4a63ac0415d377e9f4bd879393def12325eb113a31b"
696
712
  },
697
713
  {
698
714
  "path": "scripts/sync-external-agents.sh",
@@ -710,9 +726,13 @@
710
726
  "path": "scripts/track-artifacts.py",
711
727
  "sha256": "bb68f431dd3d1b9599db4d6085a269429994833d3d608f8fc3a18edaa574ce89"
712
728
  },
729
+ {
730
+ "path": "scripts/update_readme_version.py",
731
+ "sha256": "0f77baa6b16a5394a77c6846edf383c15fe39058b094a46e4fda3c249a7579b5"
732
+ },
713
733
  {
714
734
  "path": "scripts/validate_stage.py",
715
- "sha256": "c700ef6b28707032acf396eedcb5e5b4d7590c9e1d407d2952ceaa82217c12f6"
735
+ "sha256": "ad154306596c82d9436d282c7e10484a43d6814b5a90fe8b458643a371edec7a"
716
736
  },
717
737
  {
718
738
  "path": "tools/lincoln-installer/.gitignore",
@@ -720,11 +740,11 @@
720
740
  },
721
741
  {
722
742
  "path": "tools/lincoln-installer/package-lock.json",
723
- "sha256": "cea1bb17e38ca0bc6d426336a6df1a999638f91a16856875d2bb0f47eade07c8"
743
+ "sha256": "893529a8052f56ead2b1bcbd236f22b7da1ded412f96924c37fec2e8248ad280"
724
744
  },
725
745
  {
726
746
  "path": "tools/lincoln-installer/package.json",
727
- "sha256": "8279726ecd53970a264c1f3dd24e39084e2493d3414a56f936c59cac75a63673"
747
+ "sha256": "0ae0f7c5cfe23771e3c6f9c87a7c7495e1a725cf278244e26cb0dea13132aaf5"
728
748
  },
729
749
  {
730
750
  "path": "tools/lincoln-installer/src/cli.tsx",
@@ -1008,11 +1028,11 @@
1008
1028
  },
1009
1029
  {
1010
1030
  "path": "tools/lincoln/package-lock.json",
1011
- "sha256": "6172c68573e1bf55a4035c16395267d4c3b750a781c54180f549b07021f7c5b6"
1031
+ "sha256": "a546b6e754deaea02e41dd1a02f8c97c6f603b7079d9be89813b9ffb490ed48f"
1012
1032
  },
1013
1033
  {
1014
1034
  "path": "tools/lincoln/package.json",
1015
- "sha256": "51c2d47a5561d3b4ce551287469b77fb151ed2885904d2c47742c7e6615ff297"
1035
+ "sha256": "ea2249a32210b9f43ea31335985464dbf1d705cc2cf086390b0a06335acc68f9"
1016
1036
  },
1017
1037
  {
1018
1038
  "path": "tools/lincoln/src/cli.tsx",
@@ -4,10 +4,20 @@
4
4
  Rules:
5
5
  R1: agent extends targets must exist.
6
6
  R2: workflow step action must be in corresponding stage skills.required.
7
+ Steps whose action does not resolve to a local skill are treated as
8
+ human-driven action labels (e.g. 'implement') and skipped.
7
9
  R3: workflow step artifacts must match stage artifacts.
8
10
  R4: primary skill outputs must match stage artifacts.
9
11
  R5: agent artifact paths must be a subset of stage artifacts.
10
12
  R6: stage skill references must be declared in dependencies or local skills.
13
+ R7: every path referenced in stage artifact_templates must exist on disk.
14
+ R8: stage primary_action must match the action of its workflow step in every
15
+ workflow that includes the stage.
16
+ R9: stage workflows must be an explicit list of workflow IDs (never 'all'),
17
+ and every listed ID must correspond to an existing .claude/workflows/*.yaml.
18
+
19
+ Note: the stage YAML field formerly named `templates` was renamed to
20
+ `workflows` in stage schema 3.0.0; these rules reference the new field name.
11
21
  """
12
22
 
13
23
  from __future__ import annotations
@@ -202,7 +212,9 @@ def check_r1_extends_resolve(agents: dict[str, dict[str, Any]]) -> list[dict[str
202
212
  def check_r2_action_in_stage_skills(
203
213
  workflows: dict[str, dict[str, Any]],
204
214
  stages: dict[str, dict[str, Any]],
215
+ local_skills: set[str] | None = None,
205
216
  ) -> list[dict[str, Any]]:
217
+ local_skills = local_skills or set()
206
218
  findings = []
207
219
  for wf_name, wf_info in workflows.items():
208
220
  for step in wf_info["data"].get("steps", []) or []:
@@ -210,6 +222,10 @@ def check_r2_action_in_stage_skills(
210
222
  action = step.get("action")
211
223
  if not stage_id or not action:
212
224
  continue
225
+ # Human-driven steps use a non-skill action label (e.g. 'implement').
226
+ # R2 only applies when the action resolves to a local skill.
227
+ if action not in local_skills:
228
+ continue
213
229
  stage = stages.get(stage_id)
214
230
  if not stage:
215
231
  continue
@@ -473,6 +489,117 @@ def check_r6_skill_dependencies_declared(
473
489
  return findings
474
490
 
475
491
 
492
+ def check_r7_artifact_templates_exist(stages: dict[str, dict[str, Any]]) -> list[dict[str, Any]]:
493
+ """Every template file referenced in stage artifact_templates must exist on disk."""
494
+ findings = []
495
+ for stage_id, stage in stages.items():
496
+ artifact_templates = stage["data"].get("artifact_templates") or {}
497
+ if not isinstance(artifact_templates, dict):
498
+ findings.append({
499
+ "rule": "R7",
500
+ "severity": "error",
501
+ "stage_focus": stage_id in PM_STAGES,
502
+ "file": f".claude/stages/{stage_id}.yaml",
503
+ "message": "artifact_templates must be a mapping of artifact path to template file",
504
+ })
505
+ continue
506
+ for artifact_path, template_path in artifact_templates.items():
507
+ template_str = str(template_path)
508
+ # Paths with placeholders/globs are resolved at runtime; skip them here.
509
+ if "{" in template_str or "*" in template_str:
510
+ continue
511
+ if not (ROOT / template_str).exists():
512
+ findings.append({
513
+ "rule": "R7",
514
+ "severity": "error",
515
+ "stage_focus": stage_id in PM_STAGES,
516
+ "file": f".claude/stages/{stage_id}.yaml",
517
+ "message": (
518
+ f"artifact_templates entry '{artifact_path}' references template "
519
+ f"'{template_str}' which does not exist on disk"
520
+ ),
521
+ })
522
+ return findings
523
+
524
+
525
+ def check_r8_primary_action_matches_workflow(
526
+ workflows: dict[str, dict[str, Any]],
527
+ stages: dict[str, dict[str, Any]],
528
+ ) -> list[dict[str, Any]]:
529
+ """Stage primary_action must match the step action in every workflow that includes it."""
530
+ findings = []
531
+ for stage_id, stage in stages.items():
532
+ primary_action = stage["data"].get("primary_action")
533
+ if not primary_action:
534
+ continue
535
+ for wf_name, wf_info in workflows.items():
536
+ for step in wf_info["data"].get("steps", []) or []:
537
+ if step.get("id") != stage_id:
538
+ continue
539
+ action = step.get("action")
540
+ if action != primary_action:
541
+ findings.append({
542
+ "rule": "R8",
543
+ "severity": "error",
544
+ "stage_focus": stage_id in PM_STAGES,
545
+ "file": f".claude/workflows/{wf_name}.yaml",
546
+ "message": (
547
+ f"step '{stage_id}' action '{action}' does not match stage "
548
+ f"'{stage_id}' primary_action '{primary_action}'"
549
+ ),
550
+ })
551
+ return findings
552
+
553
+
554
+ def check_r9_workflows_explicit(
555
+ stages: dict[str, dict[str, Any]],
556
+ workflow_ids: set[str],
557
+ ) -> list[dict[str, Any]]:
558
+ """Stage workflows must be an explicit list of existing workflow IDs, never 'all'."""
559
+ findings = []
560
+ for stage_id, stage in stages.items():
561
+ data = stage["data"]
562
+ if "workflows" not in data:
563
+ # Stage YAML not yet migrated to schema 3.0.0; required-field
564
+ # enforcement lives in the stage schema/static checks.
565
+ continue
566
+ workflows_field = data.get("workflows")
567
+ if isinstance(workflows_field, str) or workflows_field is None:
568
+ findings.append({
569
+ "rule": "R9",
570
+ "severity": "error",
571
+ "stage_focus": stage_id in PM_STAGES,
572
+ "file": f".claude/stages/{stage_id}.yaml",
573
+ "message": (
574
+ f"workflows must be an explicit list of workflow IDs, got "
575
+ f"'{workflows_field}' ('all' is not allowed)"
576
+ ),
577
+ })
578
+ continue
579
+ if not isinstance(workflows_field, list) or not workflows_field:
580
+ findings.append({
581
+ "rule": "R9",
582
+ "severity": "error",
583
+ "stage_focus": stage_id in PM_STAGES,
584
+ "file": f".claude/stages/{stage_id}.yaml",
585
+ "message": "workflows must be a non-empty list of workflow IDs",
586
+ })
587
+ continue
588
+ for workflow_id in workflows_field:
589
+ if workflow_id not in workflow_ids:
590
+ findings.append({
591
+ "rule": "R9",
592
+ "severity": "error",
593
+ "stage_focus": stage_id in PM_STAGES,
594
+ "file": f".claude/stages/{stage_id}.yaml",
595
+ "message": (
596
+ f"workflows entry '{workflow_id}' does not correspond to an "
597
+ f"existing .claude/workflows/{workflow_id}.yaml"
598
+ ),
599
+ })
600
+ return findings
601
+
602
+
476
603
  def main() -> int:
477
604
  parser = argparse.ArgumentParser(description="Check Lincoln prompt drift")
478
605
  parser.add_argument("--strict", action="store_true", help="Fail if any PM-stage drift is found")
@@ -485,14 +612,18 @@ def main() -> int:
485
612
  skills = collect_skills()
486
613
  declared = collect_dependencies()
487
614
  local_skills = collect_local_skill_names()
615
+ workflow_ids = {p.stem for p in WORKFLOWS_DIR.glob("*.yaml")}
488
616
 
489
617
  findings: list[dict[str, Any]] = []
490
618
  findings.extend(check_r1_extends_resolve(agents))
491
- findings.extend(check_r2_action_in_stage_skills(workflows, stages))
619
+ findings.extend(check_r2_action_in_stage_skills(workflows, stages, local_skills))
492
620
  findings.extend(check_r3_workflow_artifacts_match_stage(workflows, stages))
493
621
  findings.extend(check_r4_skill_outputs_match_stage(workflows, stages, skills))
494
622
  findings.extend(check_r5_agent_paths_in_stage_artifacts(agents, stages))
495
623
  findings.extend(check_r6_skill_dependencies_declared(stages, declared, local_skills))
624
+ findings.extend(check_r7_artifact_templates_exist(stages))
625
+ findings.extend(check_r8_primary_action_matches_workflow(workflows, stages))
626
+ findings.extend(check_r9_workflows_explicit(stages, workflow_ids))
496
627
 
497
628
  # Deduplicate by (rule, file, message).
498
629
  seen = set()