gm-skill 2.0.2573 → 2.0.2575

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-plugkit",
3
- "version": "2.0.2573",
3
+ "version": "2.0.2575",
4
4
  "description": "Bootstrap and daemon-spawn tool for gm plugkit binary. Downloads the correct platform wasm, verifies SHA256, and launches agentplug-runner (the native wasm host) as the spool watcher daemon.",
5
5
  "main": "index.js",
6
6
  "bin": {
package/gm.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.2573",
3
+ "version": "2.0.2575",
4
4
  "description": "Spool-dispatch orchestration engine with unified state machine, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-skill",
3
- "version": "2.0.2573",
3
+ "version": "2.0.2575",
4
4
  "description": "Canonical universal harness — AI-native software engineering via skill-driven orchestration; bootstraps plugkit for task execution and session isolation. Install in any AI coding agent host.",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env node
2
+ // Runs scan-supply-chain-tells.mjs once PER top-level project directory under
3
+ // a root, appending each project's result to a progress log immediately.
4
+ // Resumable: projects already present in the progress log are skipped on a
5
+ // re-run, so a kill/timeout never loses completed work and a re-invocation
6
+ // picks up where it left off.
7
+ //
8
+ // Usage: node scripts/scan-dev-tree-chunked.mjs <root> <progressLogPath>
9
+
10
+ import fs from 'node:fs'
11
+ import path from 'node:path'
12
+ import { execFileSync } from 'node:child_process'
13
+ import process from 'node:process'
14
+
15
+ const root = process.argv[2]
16
+ const logPath = process.argv[3]
17
+ const scannerPath = path.join(path.dirname(new URL(import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, '$1')), 'scan-supply-chain-tells.mjs')
18
+
19
+ if (!root || !logPath) {
20
+ console.error('usage: node scan-dev-tree-chunked.mjs <root> <progressLogPath>')
21
+ process.exit(2)
22
+ }
23
+
24
+ const already = new Set()
25
+ if (fs.existsSync(logPath)) {
26
+ const prior = fs.readFileSync(logPath, 'utf8')
27
+ for (const m of prior.matchAll(/^=== (.+?) ===$/gm)) already.add(m[1])
28
+ }
29
+
30
+ const entries = fs.readdirSync(root, { withFileTypes: true })
31
+ .filter(e => e.isDirectory())
32
+ .map(e => e.name)
33
+ .sort()
34
+
35
+ console.error(`${entries.length} project dirs under ${root}, ${already.size} already scanned per ${logPath}`)
36
+
37
+ for (const name of entries) {
38
+ if (already.has(name)) continue
39
+ const target = path.join(root, name)
40
+ const start = Date.now()
41
+ let out, code
42
+ try {
43
+ out = execFileSync('node', [scannerPath, target], { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024, timeout: 180000 })
44
+ code = 0
45
+ } catch (err) {
46
+ out = err.stdout || ''
47
+ code = err.status ?? (err.signal ? 'killed:' + err.signal : 1)
48
+ }
49
+ const ms = Date.now() - start
50
+ const block = `=== ${name} ===\n(exit ${code}, ${ms}ms)\n${out.trim()}\n\n`
51
+ fs.appendFileSync(logPath, block)
52
+ const lastSummaryLine = out.trim().split('\n').pop() || ''
53
+ const isClean = /: 0 finding/.test(lastSummaryLine)
54
+ console.error(`[${isClean ? 'clean' : 'FINDINGS'}] ${name} (${ms}ms)`)
55
+ }
56
+
57
+ console.error('done')
@@ -17,6 +17,11 @@ import process from 'node:process'
17
17
  const SKIP_DIRS = new Set([
18
18
  'node_modules', '.git', 'dist', 'build', '.next', 'vendor', '.cache',
19
19
  '.svelte-kit', '.nuxt', '.output', '.turbo', 'out', 'coverage', '.parcel-cache',
20
+ // Vendored/third-party binary trees this scanner isn't meant to police --
21
+ // a browser profile's installed extensions are third-party code the user
22
+ // didn't write and can't fix here; a real backdoor concern in a project's
23
+ // OWN code should never be diluted by noise from a bundled Chrome profile.
24
+ '.plugkit-browser-profile', '.plugkit-agent-worktree', '.wwebjs_auth', '.wwebjs_cache',
20
25
  ])
21
26
  // Code files only. JSON/YAML/MD routinely carry legitimate non-Latin natural-
22
27
  // language text (Cyrillic, Greek, CJK, etc.) which is indistinguishable from a
@@ -136,6 +141,9 @@ function walk(dir, out) {
136
141
  }
137
142
  for (const e of entries) {
138
143
  if (SKIP_DIRS.has(e.name)) continue
144
+ // Hash/timestamp-suffixed variants of the same vendored-profile dirs
145
+ // (e.g. .plugkit-browser-profile-<id>) -- prefix match on the same names.
146
+ if (e.name.startsWith('.plugkit-browser-profile') || e.name.startsWith('.plugkit-browser-chrome-profile') || e.name.startsWith('.plugkit-agent-worktree')) continue
139
147
  const p = path.join(dir, e.name)
140
148
  if (e.isDirectory()) {
141
149
  walk(p, out)
@@ -234,24 +242,30 @@ function main() {
234
242
  else files.push(root)
235
243
  }
236
244
 
237
- const allFindings = []
238
- for (const f of files) {
239
- allFindings.push(...scanFile(f))
240
- }
241
-
242
- if (!allFindings.length) {
243
- console.log(`scan-supply-chain-tells: clean (${files.length} files scanned)`)
244
- process.exit(0)
245
+ // Stream findings as each file is scanned (never buffer until the end) so a
246
+ // kill/timeout mid-run still leaves a partial, readable, useful result on
247
+ // disk instead of losing everything. Progress heartbeat every 200 files so
248
+ // a long run's liveness is visible without waiting for a finding.
249
+ let totalFindings = 0
250
+ const filesWithFindings = new Set()
251
+ for (let idx = 0; idx < files.length; idx++) {
252
+ const f = files[idx]
253
+ const findings = scanFile(f)
254
+ for (const finding of findings) {
255
+ totalFindings++
256
+ filesWithFindings.add(finding.filePath)
257
+ const loc = finding.line ? `:${finding.line}` : ''
258
+ const label = finding.sig || finding.name
259
+ console.log(`[${finding.kind}] ${finding.filePath}${loc} — ${label}`)
260
+ console.log(` ${finding.why}`)
261
+ }
262
+ if ((idx + 1) % 200 === 0) {
263
+ console.error(`... scanned ${idx + 1}/${files.length} files, ${totalFindings} finding(s) so far`)
264
+ }
245
265
  }
246
266
 
247
- console.log(`scan-supply-chain-tells: ${allFindings.length} finding(s) across ${new Set(allFindings.map(f => f.filePath)).size} file(s)\n`)
248
- for (const f of allFindings) {
249
- const loc = f.line ? `:${f.line}` : ''
250
- const label = f.sig || f.name
251
- console.log(`[${f.kind}] ${f.filePath}${loc} — ${label}`)
252
- console.log(` ${f.why}`)
253
- }
254
- process.exit(1)
267
+ console.log(`\nscan-supply-chain-tells: ${totalFindings} finding(s) across ${filesWithFindings.size} file(s) (${files.length} files scanned total)`)
268
+ process.exit(totalFindings ? 1 : 0)
255
269
  }
256
270
 
257
271
  main()
@@ -1,262 +0,0 @@
1
- ---
2
- name: gm-semantic-anchors
3
- description: The nonlinear backreferencing graph of every named technique gm's 9-phase prose already invokes (SPECIFY through UPDATE_DOCS), cross-referenced against the llm-coding/Semantic-Anchors catalog, plus the well-known techniques that catalog is missing. Primes gm's own fsm-propose-override self-reconfiguration: a proposed prose/graph override cites the anchor it strengthens or the gap it closes, not a bare paraphrase.
4
- allowed-tools: Skill, Read, Write
5
- ---
6
-
7
- # gm-semantic-anchors
8
-
9
- A semantic anchor is a named, attributed technique from well-known literature that activates an LLM's existing knowledge of that technique precisely and compactly -- "Use TDD, London School" over "write tests first, mock dependencies, work outside-in" (llm-coding/Semantic-Anchors, `what-qualifies-as-a-semantic-anchor`). gm's own phase prose already runs on this principle: each phase's "Preferences (named, narrow)" section is a curated anchor list. This skill is that list expressed as one graph, cross-checked against the public Semantic-Anchors reference (191 anchors, `github.com/llm-coding/Semantic-Anchors`), so a `fsm-propose-override` self-reconfiguration proposal can cite a precise anchor instead of composing new prose from scratch.
10
-
11
- ## Why this exists
12
-
13
- `fsm-propose-override` (rs-plugkit, `orchestrator/fsm_propose.rs`) lets a session write its own `.gm/instructions/<key>.md` or `fsm/graph.json` override when `self-reconfig-candidate` fires. A proposal grounded in an attributed, well-known technique is falsifiable and reviewable; a proposal that paraphrases a vague intuition is not. This graph is the lookup table: given a phase and a friction pattern, which anchor already names the fix, and which anchors does it backreference for a fuller picture.
14
-
15
- ## The graph
16
-
17
- 99 anchors: 93 cross-matched by exact id against the public Semantic-Anchors catalog, 6 added because they are well-known, well-attributed techniques gm's own CONC (concurrency/performance) and RES (resilience)/STATE (correctness) phases depend on but the catalog does not yet list. Edges are the catalog's own `:related:` backreference field where fetched live from `docs/anchors/<id>.adoc`; nodes are grouped by the gm phase that names them, which is itself a valid nonlinear grouping axis (an anchor can serve a phase other than the one gm currently files it under).
18
-
19
- ```mermaid
20
- flowchart LR
21
- subgraph specify["SPECIFY"]
22
- solid_principles["SOLID Principles<br/><small>Robert C. Martin</small>"]
23
- solid_srp["SOLID-SRP<br/><small>Robert C. Martin</small>"]
24
- clean_architecture["Clean Architecture<br/><small>Robert C. Martin</small>"]
25
- vertical_slice_architecture["Vertical Slice Architecture<br/><small>Jimmy Bogard</small>"]
26
- mikado_method["Mikado Method<br/><small>Ola Ellnestam</small>"]
27
- spike_solution["Spike Solution<br/><small>Kent Beck</small>"]
28
- thin_vertical_slice["Thin Vertical Slice<br/><small>Alistair Cockburn</small>"]
29
- xy_problem["XY Problem Avoidance<br/><small>Mark Jason Dominus</small>"]
30
- cynefin_framework["Cynefin Framework<br/><small>Dave Snowden</small>"]
31
- wardley_mapping["Wardley Mapping<br/><small>Simon Wardley</small>"]
32
- jobs_to_be_done["Jobs To Be Done<br/><small>Clayton Christensen</small>"]
33
- occams_razor["Occam's Razor<br/><small>William of Ockham</small>"]
34
- first_principles_thinking["First Principles Thinking<br/><small>Aristotle</small>"]
35
- five_whys["Five Whys<br/><small>Taiichi Ohno</small>"]
36
- feynman_technique["Feynman Technique<br/><small>Richard Feynman</small>"]
37
- morphological_box["Morphological Box<br/><small>Fritz Zwicky</small>"]
38
- swot["SWOT<br/><small>Albert Humphrey</small>"]
39
- pugh_matrix["Pugh Matrix<br/><small>Stuart Pugh</small>"]
40
- mece["MECE<br/><small>Barbara Minto</small>"]
41
- ears_requirements["EARS<br/><small>Alistair Mavin</small>"]
42
- invest["INVEST<br/><small>Bill Wake</small>"]
43
- cockburn_use_cases["Cockburn Use Cases<br/><small>Alistair Cockburn</small>"]
44
- prd["PRD<br/><small>Product Management Convention</small>"]
45
- devils_advocate["Devil's Advocate<br/><small>Catholic Canonization Process</small>"]
46
- goodharts_law["Goodhart's Law<br/><small>Charles Goodhart</small>"]
47
- pert["PERT<br/><small>US Navy</small>"]
48
- adr_according_to_nygard["ADR<br/><small>Michael Nygard</small>"]
49
- quality_attribute_scenario["Quality Attribute Scenario<br/><small>Software Architecture Convention</small>"]
50
- moscow["MoSCoW<br/><small>Dai Clegg</small>"]
51
- end
52
- subgraph prove["PROVE"]
53
- chain_of_thought["Chain-of-Thought Reasoning<br/><small>Wei</small>"]
54
- end
55
- subgraph emit["EMIT"]
56
- dry["DRY<br/><small>Andy Hunt</small>"]
57
- kiss_principle["KISS Principle<br/><small>Kelly Johnson</small>"]
58
- yagni["YAGNI<br/><small>Ron Jeffries</small>"]
59
- single_level_of_abstraction_principle["SLAP<br/><small>Kent Beck</small>"]
60
- law_of_demeter["Law of Demeter<br/><small>Ian Holland</small>"]
61
- code_smells["Code Smells<br/><small>Kent Beck</small>"]
62
- cohesion_criteria["Cohesion Criteria<br/><small>Larry Constantine</small>"]
63
- iosp["IOSP<br/><small>Ralf Westphal</small>"]
64
- mental_model_according_to_naur["Programming as Theory Building<br/><small>Peter Naur</small>"]
65
- sota["SOTA<br/><small>General Convention</small>"]
66
- effective_go["Effective Go<br/><small>The Go Team</small>"]
67
- conways_law["Conway's Law<br/><small>Melvin Conway</small>"]
68
- grasp["GRASP<br/><small>Craig Larman</small>"]
69
- solid_dip["SOLID-DIP<br/><small>Robert C. Martin</small>"]
70
- hexagonal_architecture["Hexagonal Architecture<br/><small>Alistair Cockburn</small>"]
71
- arc42["arc42<br/><small>Peter Hruschka</small>"]
72
- cap_theorem["CAP Theorem<br/><small>Eric Brewer</small>"]
73
- fallacies_of_distributed_computing["Fallacies of Distributed Computing<br/><small>Peter Deutsch</small>"]
74
- event_driven_architecture["Event-Driven Architecture<br/><small>Distributed Systems Convention</small>"]
75
- walking_skeleton["Walking Skeleton<br/><small>Alistair Cockburn</small>"]
76
- gof_facade_pattern["GoF-Facade<br/><small>Gamma Helm Johnson Vlissides</small>"]
77
- gof_adapter_pattern["GoF-Adapter<br/><small>Gamma Helm Johnson Vlissides</small>"]
78
- gof_chain_of_responsibility_pattern["GoF-Chain of Responsibility<br/><small>Gamma Helm Johnson Vlissides</small>"]
79
- gof_observer_pattern["GoF-Observer<br/><small>Gamma Helm Johnson Vlissides</small>"]
80
- gof_strategy_pattern["GoF-Strategy<br/><small>Gamma Helm Johnson Vlissides</small>"]
81
- bem_methodology["BEM Methodology<br/><small>Yandex</small>"]
82
- conventional_commits["Conventional Commits<br/><small>Community Specification</small>"]
83
- github_flow["GitHub Flow<br/><small>GitHub</small>"]
84
- end
85
- subgraph state["STATE"]
86
- fagan_inspection["Fagan Inspection<br/><small>Michael Fagan</small>"]
87
- property_based_testing["Property-Based Testing<br/><small>Koen Claessen</small>"]
88
- mutation_testing["Mutation Testing<br/><small>Richard Lipton</small>"]
89
- red_green_tdd["Red/Green TDD<br/><small>Kent Beck</small>"]
90
- tdd_chicago_school["TDD Chicago School<br/><small>Chicago/Detroit Tradition</small>"]
91
- test_double_meszaros["Test Double<br/><small>Gerard Meszaros</small>"]
92
- testing_pyramid["Testing Pyramid<br/><small>Mike Cohn</small>"]
93
- end
94
- subgraph conc["CONC"]
95
- end
96
- subgraph sec["SEC"]
97
- owasp_top_10["OWASP Top 10<br/><small>OWASP Foundation</small>"]
98
- stride["STRIDE Threat Model<br/><small>Loren Kohnfelder</small>"]
99
- postels_law["Postel's Law<br/><small>Jon Postel</small>"]
100
- linddun["LINDDUN Privacy Threat Model<br/><small>KU Leuven</small>"]
101
- iec_61508_sil_levels["IEC 61508 SIL Levels<br/><small>IEC</small>"]
102
- regulated_environment["Regulated Environment<br/><small>Compliance Convention</small>"]
103
- end
104
- subgraph res["RES"]
105
- site_reliability_engineering["Site Reliability Engineering<br/><small>Ben Treynor</small>"]
106
- end
107
- subgraph decide["DECIDE"]
108
- definition_of_done["Definition of Done<br/><small>Ken Schwaber</small>"]
109
- llm_evaluations["LLM-Evaluations<br/><small>LLM Evaluation Practice</small>"]
110
- iso_25010["ISO/IEC 25010<br/><small>ISO</small>"]
111
- control_chart_shewhart["Control Chart<br/><small>Walter Shewhart</small>"]
112
- nelson_rules["Nelson Rules<br/><small>Lloyd S. Nelson</small>"]
113
- spc["SPC<br/><small>Walter Shewhart / W. Edwards Deming</small>"]
114
- end
115
- subgraph update_docs["UPDATE_DOCS"]
116
- pyramid_principle["Pyramid Principle<br/><small>Barbara Minto</small>"]
117
- bluf["BLUF<br/><small>US Military Doctrine</small>"]
118
- inverted_pyramid_style["Inverted Pyramid Style<br/><small>Journalism Convention</small>"]
119
- plain_english_strunk_white["Plain English<br/><small>William Strunk Jr</small>"]
120
- aida_model["AIDA Model<br/><small>E. St. Elmo Lewis</small>"]
121
- hemingway_bridge["Hemingway Bridge<br/><small>Ernest Hemingway</small>"]
122
- diataxis_framework["Diataxis Framework<br/><small>Daniele Procida</small>"]
123
- docs_as_code["Docs-as-Code<br/><small>Ralf D. Muller</small>"]
124
- blooms_taxonomy["Bloom's Taxonomy<br/><small>Benjamin Bloom</small>"]
125
- end
126
- subgraph gaps["ADDED (missing from reference)"]
127
- big_o_algorithmic_complexity["Big O Algorithmic Complexity<br/><small>Donald Knuth</small>"]:::gap
128
- data_oriented_design["Data-Oriented Design<br/><small>Mike Acton</small>"]:::gap
129
- mechanical_sympathy["Mechanical Sympathy<br/><small>Martin Thompson</small>"]:::gap
130
- zero_cost_abstractions["Zero-Cost Abstractions<br/><small>Bjarne Stroustrup</small>"]:::gap
131
- circuit_breaker["Circuit Breaker<br/><small>Michael Nygard</small>"]:::gap
132
- mental_model_illegal_states["Make Illegal States Unrepresentable<br/><small>Yaron Minsky</small>"]:::gap
133
- end
134
- big_o_algorithmic_complexity -.->|belongs to| conc
135
- data_oriented_design -.->|belongs to| conc
136
- mechanical_sympathy -.->|belongs to| conc
137
- zero_cost_abstractions -.->|belongs to| conc
138
- circuit_breaker -.->|belongs to| res
139
- mental_model_illegal_states -.->|belongs to| state
140
-
141
- dry -.-> single_level_of_abstraction_principle
142
- dry -.-> kiss_principle
143
- dry -.-> yagni
144
- kiss_principle -.-> yagni
145
- kiss_principle -.-> solid_principles
146
- yagni -.-> tdd_chicago_school
147
- solid_principles -.-> clean_architecture
148
- cynefin_framework -.-> wardley_mapping
149
- xy_problem -.-> bluf
150
- five_whys -.-> xy_problem
151
- five_whys -.-> first_principles_thinking
152
- mece -.-> pyramid_principle
153
- mece -.-> bluf
154
- mece -.-> morphological_box
155
- adr_according_to_nygard -.-> arc42
156
- mikado_method -.-> tdd_chicago_school
157
- spike_solution -.-> walking_skeleton
158
- spike_solution -.-> pugh_matrix
159
- clean_architecture -.-> hexagonal_architecture
160
- solid_srp -.-> solid_principles
161
- solid_srp -.-> single_level_of_abstraction_principle
162
- arc42 -.-> quality_attribute_scenario
163
- conways_law -.-> cohesion_criteria
164
- conways_law -.-> vertical_slice_architecture
165
- grasp -.-> solid_principles
166
- grasp -.-> clean_architecture
167
- gof_observer_pattern -.-> gof_strategy_pattern
168
- conventional_commits -.-> github_flow
169
- conventional_commits -.-> definition_of_done
170
- chain_of_thought -.-> first_principles_thinking
171
- chain_of_thought -.-> feynman_technique
172
- owasp_top_10 -.-> regulated_environment
173
- owasp_top_10 -.-> iec_61508_sil_levels
174
- stride -.-> owasp_top_10
175
- stride -.-> regulated_environment
176
- definition_of_done -.-> moscow
177
- pyramid_principle -.-> bluf
178
- pyramid_principle -.-> inverted_pyramid_style
179
- bluf -.-> inverted_pyramid_style
180
- bluf -.-> plain_english_strunk_white
181
- occams_razor -.-> kiss_principle
182
- occams_razor -.-> yagni
183
- occams_razor -.-> five_whys
184
- occams_razor -.-> mece
185
- occams_razor -.-> devils_advocate
186
- first_principles_thinking -.-> feynman_technique
187
- wardley_mapping -.-> swot
188
- invest -.-> moscow
189
- ears_requirements -.-> cockburn_use_cases
190
- ears_requirements -.-> invest
191
- cockburn_use_cases -.-> arc42
192
- cockburn_use_cases -.-> iso_25010
193
- pert -.-> moscow
194
- goodharts_law -.-> llm_evaluations
195
- property_based_testing -.-> mutation_testing
196
- property_based_testing -.-> testing_pyramid
197
- mutation_testing -.-> testing_pyramid
198
- red_green_tdd -.-> tdd_chicago_school
199
- testing_pyramid -.-> tdd_chicago_school
200
- fagan_inspection -.-> mutation_testing
201
- fagan_inspection -.-> testing_pyramid
202
- docs_as_code -.-> diataxis_framework
203
- docs_as_code -.-> arc42
204
- docs_as_code -.-> conventional_commits
205
- diataxis_framework -.-> arc42
206
- diataxis_framework -.-> inverted_pyramid_style
207
- morphological_box -.-> pugh_matrix
208
- swot -.-> pugh_matrix
209
- swot -.-> moscow
210
- devils_advocate -.-> five_whys
211
- site_reliability_engineering -.-> five_whys
212
- site_reliability_engineering -.-> spc
213
- site_reliability_engineering -.-> control_chart_shewhart
214
- vertical_slice_architecture -.-> clean_architecture
215
- vertical_slice_architecture -.-> hexagonal_architecture
216
- thin_vertical_slice -.-> walking_skeleton
217
- thin_vertical_slice -.-> vertical_slice_architecture
218
- walking_skeleton -.-> clean_architecture
219
- walking_skeleton -.-> hexagonal_architecture
220
- fallacies_of_distributed_computing -.-> cap_theorem
221
- fallacies_of_distributed_computing -.-> event_driven_architecture
222
- fallacies_of_distributed_computing -.-> hexagonal_architecture
223
- cap_theorem -.-> event_driven_architecture
224
- event_driven_architecture -.-> hexagonal_architecture
225
- event_driven_architecture -.-> clean_architecture
226
- postels_law -.-> solid_principles
227
- postels_law -.-> event_driven_architecture
228
- linddun -.-> owasp_top_10
229
- linddun -.-> regulated_environment
230
-
231
- classDef gap fill:#ffe4b3,stroke:#c77700,stroke-width:2px
232
- ```
233
-
234
- ## Reading the graph
235
-
236
- - **Solid subgraph membership** = the gm phase whose prose already names this anchor (`gm-config/prose/<phase>.md`, `Preferences (named, narrow)`).
237
- - **Dotted edges** = a real `:related:` backreference pulled live from `llm-coding/Semantic-Anchors`'s `docs/anchors/<id>.adoc` source, not invented. An edge existing means the two anchors compose: a proposal citing one should check the other.
238
- - **`gaps` subgraph (orange)** = well-known, well-attributed techniques in real literature that gm's prose already depends on (CONC's whole performance vocabulary; RES's Circuit Breaker; STATE's illegal-states principle) but that are absent from the public Semantic-Anchors catalog as of this graph's construction. `CONC`'s own subgraph is empty for exactly this reason -- every anchor CONC currently names is a gap, not yet catalogued upstream.
239
-
240
- ## The 6 gaps, for upstream contribution
241
-
242
- | id | name | author | belongs to |
243
- | --- | --- | --- | --- |
244
- | `big-o-algorithmic-complexity` | Big O Algorithmic Complexity | Donald Knuth | CONC |
245
- | `data-oriented-design` | Data-Oriented Design | Mike Acton | CONC |
246
- | `mechanical-sympathy` | Mechanical Sympathy | Martin Thompson | CONC |
247
- | `zero-cost-abstractions` | Zero-Cost Abstractions | Bjarne Stroustrup | CONC |
248
- | `circuit-breaker` | Circuit Breaker | Michael Nygard | RES |
249
- | `mental-model-illegal-states` | Make Illegal States Unrepresentable | Yaron Minsky | STATE |
250
-
251
- These are candidates for a PR against `llm-coding/Semantic-Anchors` (`docs/anchors/<id>.adoc`, following the existing frontmatter shape: `:categories:`, `:roles:`, `:proponents:`, `:tags:`, `:related:`, `:tier:`, `:definition:`), not a fork -- the catalog is a shared reference, and gm benefits from every project's anchor set staying converged on one upstream source rather than diverging per project.
252
-
253
- ## Using this graph to prime self-reconfiguration
254
-
255
- When `self-reconfig-candidate` fires (a gate denial repeating past `policy.gate_repeat_escalate_threshold`), before composing an `fsm-propose-override` proposal:
256
-
257
- 1. Identify which phase the friction occurred in.
258
- 2. Walk that phase's subgraph here for an anchor that already names the missing discipline.
259
- 3. Follow its dotted edges one hop -- the adjacent anchors are the ones a reviewer will expect the proposal to also account for.
260
- 4. If nothing in the graph names the gap, that is itself signal: the friction is either genuinely novel (write the override in gm's own voice) or names a technique missing from both gm's prose and the upstream catalog (add it to the gaps table above, and consider it for the same upstream PR).
261
-
262
- A proposal that cites an anchor id from this graph is reviewable against real, external, authored literature. A proposal that doesn't is asking a reviewer to trust prose alone -- exactly the gap `fsm-propose-override`'s `AskUserQuestion` authority guard exists to catch for graph/hook-bearing overrides, and the same discipline is worth applying informally to prose-only overrides too.