@structor-dev/cli 0.1.0 → 0.2.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 (65) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +131 -21
  3. package/ROADMAP.md +38 -0
  4. package/SECURITY.md +33 -0
  5. package/bin/structor.mjs +561 -29
  6. package/contrib/self-harness/files/README.md +32 -0
  7. package/contrib/self-harness/files/ai/AGENTS.md +35 -0
  8. package/contrib/self-harness/files/ai/ARCHITECTURE.md +38 -0
  9. package/contrib/self-harness/files/ai/HUB.md +59 -0
  10. package/contrib/self-harness/files/ai/PRODUCT.md +36 -0
  11. package/contrib/self-harness/files/ai/QUALITY.md +31 -0
  12. package/contrib/self-harness/files/ai/context.md +38 -0
  13. package/contrib/self-harness/files/scripts/check-workspace.mjs +72 -0
  14. package/contrib/self-harness/harness.config.json +37 -0
  15. package/docs/CONTRIBUTOR-SETUP.md +45 -0
  16. package/docs/INIT.md +55 -2
  17. package/docs/public-launch.md +150 -0
  18. package/examples/anthropic-only/harness.config.json +26 -0
  19. package/examples/frontend-backend/harness.config.json +8 -8
  20. package/examples/generated-harness-tree.md +432 -0
  21. package/examples/openai-and-anthropic/harness.config.json +7 -7
  22. package/examples/single-repo/harness.config.json +7 -7
  23. package/harness.config.example.json +1 -1
  24. package/package.json +12 -4
  25. package/schemas/contract-manifest.schema.json +0 -1
  26. package/schemas/harness-config.schema.json +5 -2
  27. package/scripts/check-config.mjs +20 -31
  28. package/scripts/check-examples.mjs +146 -0
  29. package/scripts/check-placeholders.mjs +2 -0
  30. package/scripts/check-public-hygiene.mjs +249 -0
  31. package/scripts/check-schemas.mjs +42 -0
  32. package/scripts/check-template-files.mjs +15 -98
  33. package/scripts/generated-harness-contract.mjs +416 -0
  34. package/scripts/init-harness.mjs +227 -139
  35. package/scripts/lib.mjs +462 -12
  36. package/scripts/rendered-config.mjs +109 -0
  37. package/scripts/setup-contributor.mjs +125 -0
  38. package/scripts/smoke-template.mjs +260 -73
  39. package/template/AGENTS.md.tpl +4 -2
  40. package/template/README.md.tpl +5 -0
  41. package/template/ai/CODEX-HOOKS.md.tpl +1 -1
  42. package/template/ai/HARNESS-ENGINEERING.md.tpl +5 -2
  43. package/template/ai/HARNESS.md.tpl +4 -1
  44. package/template/ai/contracts/codex-hooks.contract.json.tpl +58 -1
  45. package/template/ai/contracts/codex-hooks.md.tpl +6 -0
  46. package/template/ai/contracts/release-flow.md.tpl +1 -1
  47. package/template/ai/templates/fixtures/issues/valid-ready.md.tpl +3 -1
  48. package/template/ai/templates/issue-template.md.tpl +3 -1
  49. package/template/ai/workspace/LOCAL-STACK.md.tpl +1 -1
  50. package/template/ai/workspace/SYSTEM-MAP.md.tpl +2 -2
  51. package/template/consumer/AGENTS.md.tpl +4 -4
  52. package/template/consumer/CLAUDE.md.tpl +4 -4
  53. package/template/scripts/bootstrap-workspace.mjs.tpl +11 -25
  54. package/template/scripts/check-claude-compatibility.mjs.tpl +62 -9
  55. package/template/scripts/check-codex-hooks.mjs.tpl +262 -20
  56. package/template/scripts/check-template-governance.mjs.tpl +2 -114
  57. package/template/scripts/check-workspace.mjs.tpl +27 -103
  58. package/template/scripts/check-worktree-bootstrap-fixtures.mjs.tpl +12 -0
  59. package/template/scripts/generate-html-views.mjs.tpl +357 -56
  60. package/template/scripts/generated-harness-contract.mjs.tpl +1 -0
  61. package/template/scripts/hooks/lib/codex-hooks-core.mjs.tpl +14 -3
  62. package/template/scripts/lib/path-safety.mjs.tpl +87 -0
  63. package/template/scripts/lib/worktree-bootstrap.mjs.tpl +16 -13
  64. package/template/scripts/validate-governance.mjs.tpl +52 -36
  65. package/schemas/task-brief.schema.json +0 -37
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "../../schemas/harness-config.schema.json",
3
+ "project": {
4
+ "name": "Example API",
5
+ "slug": "example-api",
6
+ "harnessRepoName": "example-api-structor"
7
+ },
8
+ "output": {
9
+ "path": "../../../generated/example-api-structor"
10
+ },
11
+ "models": {
12
+ "openai": false,
13
+ "anthropic": true
14
+ },
15
+ "consumers": [
16
+ {
17
+ "name": "example-api",
18
+ "path": "./example-api",
19
+ "purpose": "Backend API repository",
20
+ "validation": {
21
+ "lint": "npm run lint",
22
+ "test": "npm test"
23
+ }
24
+ }
25
+ ]
26
+ }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "$schema": "../../schemas/harness-config.schema.json",
3
3
  "project": {
4
- "name": "Frontend Backend Product",
5
- "slug": "frontend-backend-product",
6
- "harnessRepoName": "frontend-backend-product-structor"
4
+ "name": "Example Platform",
5
+ "slug": "example-platform",
6
+ "harnessRepoName": "example-platform-structor"
7
7
  },
8
8
  "output": {
9
- "path": "../../generated/frontend-backend-product-structor"
9
+ "path": "../../../generated/example-platform-structor"
10
10
  },
11
11
  "models": {
12
12
  "openai": true,
@@ -14,8 +14,8 @@
14
14
  },
15
15
  "consumers": [
16
16
  {
17
- "name": "product-frontend",
18
- "path": "../../../product-frontend",
17
+ "name": "example-frontend",
18
+ "path": "./example-frontend",
19
19
  "purpose": "Frontend application repository",
20
20
  "validation": {
21
21
  "lint": "npm run lint",
@@ -23,8 +23,8 @@
23
23
  }
24
24
  },
25
25
  {
26
- "name": "product-backend",
27
- "path": "../../../product-backend",
26
+ "name": "example-api",
27
+ "path": "./example-api",
28
28
  "purpose": "Backend API repository",
29
29
  "validation": {
30
30
  "lint": "npm run lint",
@@ -0,0 +1,432 @@
1
+ # Generated Harness Tree Artifact
2
+
3
+ This checked-in file is a text artifact for public inspection. It is not a generated harness directory, and no generated harness output is committed here.
4
+
5
+ The tree below is derived from the checked-in example configs and `scripts/generated-harness-contract.mjs`. `npm run check:ci` verifies that this artifact stays synchronized with the expected generated file, workspace pointer, and consumer pointer surfaces.
6
+
7
+ ## OpenAI-only example
8
+
9
+ Source config: `examples/single-repo/harness.config.json`
10
+
11
+ ```text
12
+ workspace/
13
+ example-frontend-structor/
14
+ .codex/hooks.json
15
+ .structor/manifest.json
16
+ AGENTS.md
17
+ README.md
18
+ ai/AGENT-GARBAGE-COLLECTION.md
19
+ ai/AGENTS.md
20
+ ai/ARCHITECTURE.md
21
+ ai/CODEX-HOOKS.md
22
+ ai/DECISIONS.md
23
+ ai/DESIGN.md
24
+ ai/HARNESS-ENGINEERING.md
25
+ ai/HARNESS.md
26
+ ai/HUB.md
27
+ ai/PRODUCT-SUMMARY.md
28
+ ai/PRODUCT.md
29
+ ai/QUALITY.md
30
+ ai/READINESS.md
31
+ ai/RUNNER-READINESS.md
32
+ ai/RUNNER-SAFETY.md
33
+ ai/VERSIONING.md
34
+ ai/WORKFLOW.md
35
+ ai/context.md
36
+ ai/contracts/README.md
37
+ ai/contracts/api-boundary.contract.json
38
+ ai/contracts/api-boundary.md
39
+ ai/contracts/app-legibility.contract.json
40
+ ai/contracts/app-legibility.md
41
+ ai/contracts/codex-hooks.contract.json
42
+ ai/contracts/codex-hooks.md
43
+ ai/contracts/github-safety.contract.json
44
+ ai/contracts/github-safety.md
45
+ ai/contracts/release-flow.contract.json
46
+ ai/contracts/release-flow.md
47
+ ai/contracts/repo-boundaries.contract.json
48
+ ai/contracts/repo-boundaries.md
49
+ ai/contracts/security-boundary.contract.json
50
+ ai/contracts/security-boundary.md
51
+ ai/knowledge-manifest.json
52
+ ai/model-overlays/openai/AGENTS.md
53
+ ai/plans/README.md
54
+ ai/plans/tech-debt.md
55
+ ai/skills/README.md
56
+ ai/skills/review-architecture.md
57
+ ai/skills/review-contract-drift.md
58
+ ai/skills/review-governance-drift.md
59
+ ai/skills/review-security.md
60
+ ai/specs/README.md
61
+ ai/templates/README.md
62
+ ai/templates/fixtures/issues/invalid-placeholder.md
63
+ ai/templates/fixtures/issues/invalid-protected-surface.md
64
+ ai/templates/fixtures/issues/valid-ready.md
65
+ ai/templates/issue-template.md
66
+ ai/templates/task-brief-template.md
67
+ ai/workspace/LOCAL-STACK.md
68
+ ai/workspace/REPOS.md
69
+ ai/workspace/SESSION-BOOTSTRAP.md
70
+ ai/workspace/SYSTEM-MAP.md
71
+ ai/workspace/TEST-STRATEGY.md
72
+ scripts/bootstrap-codex-worktree.mjs
73
+ scripts/bootstrap-workspace.mjs
74
+ scripts/check-codex-hooks.mjs
75
+ scripts/check-contract-manifests.mjs
76
+ scripts/check-garbage-collection.mjs
77
+ scripts/check-html-views.mjs
78
+ scripts/check-issue-template.mjs
79
+ scripts/check-knowledge-manifest.mjs
80
+ scripts/check-overlay-drift.mjs
81
+ scripts/check-plans.mjs
82
+ scripts/check-readiness.mjs
83
+ scripts/check-review-skills.mjs
84
+ scripts/check-task-template.mjs
85
+ scripts/check-template-governance.mjs
86
+ scripts/check-workspace.mjs
87
+ scripts/check-worktree-bootstrap-fixtures.mjs
88
+ scripts/check-worktrees.mjs
89
+ scripts/fixtures/worktrees/README.md
90
+ scripts/generate-html-views.mjs
91
+ scripts/generated-harness-contract.mjs
92
+ scripts/hooks/codex-hook.mjs
93
+ scripts/hooks/lib/codex-hooks-core.mjs
94
+ scripts/lib/path-safety.mjs
95
+ scripts/lib/worktree-bootstrap.mjs
96
+ scripts/validate-governance.mjs
97
+ workspace/AGENTS.md
98
+ AGENTS.md # workspace pointer to example-frontend-structor/workspace/AGENTS.md
99
+ example-frontend/
100
+ AGENTS.md # consumer pointer to example-frontend-structor/consumer/AGENTS.md
101
+ ```
102
+
103
+ ## Anthropic-only example
104
+
105
+ Source config: `examples/anthropic-only/harness.config.json`
106
+
107
+ ```text
108
+ workspace/
109
+ example-api-structor/
110
+ .claude/CLAUDE.md
111
+ .claude/rules/harness-client-surfaces.md
112
+ .claude/settings.json
113
+ .structor/manifest.json
114
+ CLAUDE.md
115
+ README.md
116
+ ai/AGENT-GARBAGE-COLLECTION.md
117
+ ai/AGENTS.md
118
+ ai/ARCHITECTURE.md
119
+ ai/CODEX-HOOKS.md
120
+ ai/DECISIONS.md
121
+ ai/DESIGN.md
122
+ ai/HARNESS-ENGINEERING.md
123
+ ai/HARNESS.md
124
+ ai/HUB.md
125
+ ai/PRODUCT-SUMMARY.md
126
+ ai/PRODUCT.md
127
+ ai/QUALITY.md
128
+ ai/READINESS.md
129
+ ai/RUNNER-READINESS.md
130
+ ai/RUNNER-SAFETY.md
131
+ ai/VERSIONING.md
132
+ ai/WORKFLOW.md
133
+ ai/context.md
134
+ ai/contracts/README.md
135
+ ai/contracts/api-boundary.contract.json
136
+ ai/contracts/api-boundary.md
137
+ ai/contracts/app-legibility.contract.json
138
+ ai/contracts/app-legibility.md
139
+ ai/contracts/codex-hooks.md
140
+ ai/contracts/github-safety.contract.json
141
+ ai/contracts/github-safety.md
142
+ ai/contracts/release-flow.contract.json
143
+ ai/contracts/release-flow.md
144
+ ai/contracts/repo-boundaries.contract.json
145
+ ai/contracts/repo-boundaries.md
146
+ ai/contracts/security-boundary.contract.json
147
+ ai/contracts/security-boundary.md
148
+ ai/knowledge-manifest.json
149
+ ai/model-overlays/anthropic/CLAUDE.md
150
+ ai/plans/README.md
151
+ ai/plans/tech-debt.md
152
+ ai/skills/README.md
153
+ ai/skills/review-architecture.md
154
+ ai/skills/review-contract-drift.md
155
+ ai/skills/review-governance-drift.md
156
+ ai/skills/review-security.md
157
+ ai/specs/README.md
158
+ ai/templates/README.md
159
+ ai/templates/fixtures/issues/invalid-placeholder.md
160
+ ai/templates/fixtures/issues/invalid-protected-surface.md
161
+ ai/templates/fixtures/issues/valid-ready.md
162
+ ai/templates/issue-template.md
163
+ ai/templates/task-brief-template.md
164
+ ai/workspace/LOCAL-STACK.md
165
+ ai/workspace/REPOS.md
166
+ ai/workspace/SESSION-BOOTSTRAP.md
167
+ ai/workspace/SYSTEM-MAP.md
168
+ ai/workspace/TEST-STRATEGY.md
169
+ scripts/bootstrap-codex-worktree.mjs
170
+ scripts/bootstrap-workspace.mjs
171
+ scripts/check-claude-compatibility.mjs
172
+ scripts/check-contract-manifests.mjs
173
+ scripts/check-garbage-collection.mjs
174
+ scripts/check-html-views.mjs
175
+ scripts/check-issue-template.mjs
176
+ scripts/check-knowledge-manifest.mjs
177
+ scripts/check-overlay-drift.mjs
178
+ scripts/check-plans.mjs
179
+ scripts/check-readiness.mjs
180
+ scripts/check-review-skills.mjs
181
+ scripts/check-task-template.mjs
182
+ scripts/check-template-governance.mjs
183
+ scripts/check-workspace.mjs
184
+ scripts/check-worktree-bootstrap-fixtures.mjs
185
+ scripts/check-worktrees.mjs
186
+ scripts/fixtures/worktrees/README.md
187
+ scripts/generate-html-views.mjs
188
+ scripts/generated-harness-contract.mjs
189
+ scripts/lib/path-safety.mjs
190
+ scripts/lib/worktree-bootstrap.mjs
191
+ scripts/validate-governance.mjs
192
+ workspace/.claude/CLAUDE.md
193
+ workspace/.claude/rules/harness-client-surfaces.md
194
+ workspace/.claude/settings.json
195
+ workspace/CLAUDE.md
196
+ .claude/CLAUDE.md # workspace pointer to example-api-structor/workspace/.claude/CLAUDE.md
197
+ .claude/rules/harness-client-surfaces.md # workspace pointer to example-api-structor/workspace/.claude/rules/harness-client-surfaces.md
198
+ .claude/settings.json # workspace pointer to example-api-structor/workspace/.claude/settings.json
199
+ CLAUDE.md # workspace pointer to example-api-structor/workspace/CLAUDE.md
200
+ example-api/
201
+ .claude/CLAUDE.md # consumer pointer to example-api-structor/consumer/.claude/CLAUDE.md
202
+ CLAUDE.md # consumer pointer to example-api-structor/consumer/CLAUDE.md
203
+ ```
204
+
205
+ ## OpenAI and Anthropic example
206
+
207
+ Source config: `examples/frontend-backend/harness.config.json`
208
+
209
+ ```text
210
+ workspace/
211
+ example-platform-structor/
212
+ .claude/CLAUDE.md
213
+ .claude/rules/harness-client-surfaces.md
214
+ .claude/settings.json
215
+ .codex/hooks.json
216
+ .structor/manifest.json
217
+ AGENTS.md
218
+ CLAUDE.md
219
+ README.md
220
+ ai/AGENT-GARBAGE-COLLECTION.md
221
+ ai/AGENTS.md
222
+ ai/ARCHITECTURE.md
223
+ ai/CODEX-HOOKS.md
224
+ ai/DECISIONS.md
225
+ ai/DESIGN.md
226
+ ai/HARNESS-ENGINEERING.md
227
+ ai/HARNESS.md
228
+ ai/HUB.md
229
+ ai/PRODUCT-SUMMARY.md
230
+ ai/PRODUCT.md
231
+ ai/QUALITY.md
232
+ ai/READINESS.md
233
+ ai/RUNNER-READINESS.md
234
+ ai/RUNNER-SAFETY.md
235
+ ai/VERSIONING.md
236
+ ai/WORKFLOW.md
237
+ ai/context.md
238
+ ai/contracts/README.md
239
+ ai/contracts/api-boundary.contract.json
240
+ ai/contracts/api-boundary.md
241
+ ai/contracts/app-legibility.contract.json
242
+ ai/contracts/app-legibility.md
243
+ ai/contracts/codex-hooks.contract.json
244
+ ai/contracts/codex-hooks.md
245
+ ai/contracts/github-safety.contract.json
246
+ ai/contracts/github-safety.md
247
+ ai/contracts/release-flow.contract.json
248
+ ai/contracts/release-flow.md
249
+ ai/contracts/repo-boundaries.contract.json
250
+ ai/contracts/repo-boundaries.md
251
+ ai/contracts/security-boundary.contract.json
252
+ ai/contracts/security-boundary.md
253
+ ai/knowledge-manifest.json
254
+ ai/model-overlays/anthropic/CLAUDE.md
255
+ ai/model-overlays/openai/AGENTS.md
256
+ ai/plans/README.md
257
+ ai/plans/tech-debt.md
258
+ ai/skills/README.md
259
+ ai/skills/review-architecture.md
260
+ ai/skills/review-contract-drift.md
261
+ ai/skills/review-governance-drift.md
262
+ ai/skills/review-security.md
263
+ ai/specs/README.md
264
+ ai/templates/README.md
265
+ ai/templates/fixtures/issues/invalid-placeholder.md
266
+ ai/templates/fixtures/issues/invalid-protected-surface.md
267
+ ai/templates/fixtures/issues/valid-ready.md
268
+ ai/templates/issue-template.md
269
+ ai/templates/task-brief-template.md
270
+ ai/workspace/LOCAL-STACK.md
271
+ ai/workspace/REPOS.md
272
+ ai/workspace/SESSION-BOOTSTRAP.md
273
+ ai/workspace/SYSTEM-MAP.md
274
+ ai/workspace/TEST-STRATEGY.md
275
+ scripts/bootstrap-codex-worktree.mjs
276
+ scripts/bootstrap-workspace.mjs
277
+ scripts/check-claude-compatibility.mjs
278
+ scripts/check-codex-hooks.mjs
279
+ scripts/check-contract-manifests.mjs
280
+ scripts/check-garbage-collection.mjs
281
+ scripts/check-html-views.mjs
282
+ scripts/check-issue-template.mjs
283
+ scripts/check-knowledge-manifest.mjs
284
+ scripts/check-overlay-drift.mjs
285
+ scripts/check-plans.mjs
286
+ scripts/check-readiness.mjs
287
+ scripts/check-review-skills.mjs
288
+ scripts/check-task-template.mjs
289
+ scripts/check-template-governance.mjs
290
+ scripts/check-workspace.mjs
291
+ scripts/check-worktree-bootstrap-fixtures.mjs
292
+ scripts/check-worktrees.mjs
293
+ scripts/fixtures/worktrees/README.md
294
+ scripts/generate-html-views.mjs
295
+ scripts/generated-harness-contract.mjs
296
+ scripts/hooks/codex-hook.mjs
297
+ scripts/hooks/lib/codex-hooks-core.mjs
298
+ scripts/lib/path-safety.mjs
299
+ scripts/lib/worktree-bootstrap.mjs
300
+ scripts/validate-governance.mjs
301
+ workspace/.claude/CLAUDE.md
302
+ workspace/.claude/rules/harness-client-surfaces.md
303
+ workspace/.claude/settings.json
304
+ workspace/AGENTS.md
305
+ workspace/CLAUDE.md
306
+ .claude/CLAUDE.md # workspace pointer to example-platform-structor/workspace/.claude/CLAUDE.md
307
+ .claude/rules/harness-client-surfaces.md # workspace pointer to example-platform-structor/workspace/.claude/rules/harness-client-surfaces.md
308
+ .claude/settings.json # workspace pointer to example-platform-structor/workspace/.claude/settings.json
309
+ AGENTS.md # workspace pointer to example-platform-structor/workspace/AGENTS.md
310
+ CLAUDE.md # workspace pointer to example-platform-structor/workspace/CLAUDE.md
311
+ example-frontend/
312
+ .claude/CLAUDE.md # consumer pointer to example-platform-structor/consumer/.claude/CLAUDE.md
313
+ AGENTS.md # consumer pointer to example-platform-structor/consumer/AGENTS.md
314
+ CLAUDE.md # consumer pointer to example-platform-structor/consumer/CLAUDE.md
315
+ example-api/
316
+ .claude/CLAUDE.md # consumer pointer to example-platform-structor/consumer/.claude/CLAUDE.md
317
+ AGENTS.md # consumer pointer to example-platform-structor/consumer/AGENTS.md
318
+ CLAUDE.md # consumer pointer to example-platform-structor/consumer/CLAUDE.md
319
+ ```
320
+
321
+ ## OpenAI and Anthropic example
322
+
323
+ Source config: `examples/openai-and-anthropic/harness.config.json`
324
+
325
+ ```text
326
+ workspace/
327
+ example-worker-structor/
328
+ .claude/CLAUDE.md
329
+ .claude/rules/harness-client-surfaces.md
330
+ .claude/settings.json
331
+ .codex/hooks.json
332
+ .structor/manifest.json
333
+ AGENTS.md
334
+ CLAUDE.md
335
+ README.md
336
+ ai/AGENT-GARBAGE-COLLECTION.md
337
+ ai/AGENTS.md
338
+ ai/ARCHITECTURE.md
339
+ ai/CODEX-HOOKS.md
340
+ ai/DECISIONS.md
341
+ ai/DESIGN.md
342
+ ai/HARNESS-ENGINEERING.md
343
+ ai/HARNESS.md
344
+ ai/HUB.md
345
+ ai/PRODUCT-SUMMARY.md
346
+ ai/PRODUCT.md
347
+ ai/QUALITY.md
348
+ ai/READINESS.md
349
+ ai/RUNNER-READINESS.md
350
+ ai/RUNNER-SAFETY.md
351
+ ai/VERSIONING.md
352
+ ai/WORKFLOW.md
353
+ ai/context.md
354
+ ai/contracts/README.md
355
+ ai/contracts/api-boundary.contract.json
356
+ ai/contracts/api-boundary.md
357
+ ai/contracts/app-legibility.contract.json
358
+ ai/contracts/app-legibility.md
359
+ ai/contracts/codex-hooks.contract.json
360
+ ai/contracts/codex-hooks.md
361
+ ai/contracts/github-safety.contract.json
362
+ ai/contracts/github-safety.md
363
+ ai/contracts/release-flow.contract.json
364
+ ai/contracts/release-flow.md
365
+ ai/contracts/repo-boundaries.contract.json
366
+ ai/contracts/repo-boundaries.md
367
+ ai/contracts/security-boundary.contract.json
368
+ ai/contracts/security-boundary.md
369
+ ai/knowledge-manifest.json
370
+ ai/model-overlays/anthropic/CLAUDE.md
371
+ ai/model-overlays/openai/AGENTS.md
372
+ ai/plans/README.md
373
+ ai/plans/tech-debt.md
374
+ ai/skills/README.md
375
+ ai/skills/review-architecture.md
376
+ ai/skills/review-contract-drift.md
377
+ ai/skills/review-governance-drift.md
378
+ ai/skills/review-security.md
379
+ ai/specs/README.md
380
+ ai/templates/README.md
381
+ ai/templates/fixtures/issues/invalid-placeholder.md
382
+ ai/templates/fixtures/issues/invalid-protected-surface.md
383
+ ai/templates/fixtures/issues/valid-ready.md
384
+ ai/templates/issue-template.md
385
+ ai/templates/task-brief-template.md
386
+ ai/workspace/LOCAL-STACK.md
387
+ ai/workspace/REPOS.md
388
+ ai/workspace/SESSION-BOOTSTRAP.md
389
+ ai/workspace/SYSTEM-MAP.md
390
+ ai/workspace/TEST-STRATEGY.md
391
+ scripts/bootstrap-codex-worktree.mjs
392
+ scripts/bootstrap-workspace.mjs
393
+ scripts/check-claude-compatibility.mjs
394
+ scripts/check-codex-hooks.mjs
395
+ scripts/check-contract-manifests.mjs
396
+ scripts/check-garbage-collection.mjs
397
+ scripts/check-html-views.mjs
398
+ scripts/check-issue-template.mjs
399
+ scripts/check-knowledge-manifest.mjs
400
+ scripts/check-overlay-drift.mjs
401
+ scripts/check-plans.mjs
402
+ scripts/check-readiness.mjs
403
+ scripts/check-review-skills.mjs
404
+ scripts/check-task-template.mjs
405
+ scripts/check-template-governance.mjs
406
+ scripts/check-workspace.mjs
407
+ scripts/check-worktree-bootstrap-fixtures.mjs
408
+ scripts/check-worktrees.mjs
409
+ scripts/fixtures/worktrees/README.md
410
+ scripts/generate-html-views.mjs
411
+ scripts/generated-harness-contract.mjs
412
+ scripts/hooks/codex-hook.mjs
413
+ scripts/hooks/lib/codex-hooks-core.mjs
414
+ scripts/lib/path-safety.mjs
415
+ scripts/lib/worktree-bootstrap.mjs
416
+ scripts/validate-governance.mjs
417
+ workspace/.claude/CLAUDE.md
418
+ workspace/.claude/rules/harness-client-surfaces.md
419
+ workspace/.claude/settings.json
420
+ workspace/AGENTS.md
421
+ workspace/CLAUDE.md
422
+ .claude/CLAUDE.md # workspace pointer to example-worker-structor/workspace/.claude/CLAUDE.md
423
+ .claude/rules/harness-client-surfaces.md # workspace pointer to example-worker-structor/workspace/.claude/rules/harness-client-surfaces.md
424
+ .claude/settings.json # workspace pointer to example-worker-structor/workspace/.claude/settings.json
425
+ AGENTS.md # workspace pointer to example-worker-structor/workspace/AGENTS.md
426
+ CLAUDE.md # workspace pointer to example-worker-structor/workspace/CLAUDE.md
427
+ example-worker/
428
+ .claude/CLAUDE.md # consumer pointer to example-worker-structor/consumer/.claude/CLAUDE.md
429
+ AGENTS.md # consumer pointer to example-worker-structor/consumer/AGENTS.md
430
+ CLAUDE.md # consumer pointer to example-worker-structor/consumer/CLAUDE.md
431
+ ```
432
+
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "$schema": "../../schemas/harness-config.schema.json",
3
3
  "project": {
4
- "name": "Multi Model Product",
5
- "slug": "multi-model-product",
6
- "harnessRepoName": "multi-model-product-structor"
4
+ "name": "Example Worker",
5
+ "slug": "example-worker",
6
+ "harnessRepoName": "example-worker-structor"
7
7
  },
8
8
  "output": {
9
- "path": "../../generated/multi-model-product-structor"
9
+ "path": "../../../generated/example-worker-structor"
10
10
  },
11
11
  "models": {
12
12
  "openai": true,
@@ -14,9 +14,9 @@
14
14
  },
15
15
  "consumers": [
16
16
  {
17
- "name": "multi-model-app",
18
- "path": "../../../multi-model-app",
19
- "purpose": "Application repository used by both OpenAI and Anthropic agents",
17
+ "name": "example-worker",
18
+ "path": "./example-worker",
19
+ "purpose": "Worker repository used by both OpenAI and Anthropic agents",
20
20
  "validation": {
21
21
  "install": "npm install",
22
22
  "lint": "npm run lint",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "$schema": "../../schemas/harness-config.schema.json",
3
3
  "project": {
4
- "name": "Single Repo Product",
5
- "slug": "single-repo-product",
6
- "harnessRepoName": "single-repo-product-structor"
4
+ "name": "Example Frontend",
5
+ "slug": "example-frontend",
6
+ "harnessRepoName": "example-frontend-structor"
7
7
  },
8
8
  "output": {
9
- "path": "../../generated/single-repo-product-structor"
9
+ "path": "../../../generated/example-frontend-structor"
10
10
  },
11
11
  "models": {
12
12
  "openai": true,
@@ -14,9 +14,9 @@
14
14
  },
15
15
  "consumers": [
16
16
  {
17
- "name": "single-repo-app",
18
- "path": "../../../single-repo-app",
19
- "purpose": "Application repository",
17
+ "name": "example-frontend",
18
+ "path": "./example-frontend",
19
+ "purpose": "Frontend application repository",
20
20
  "validation": {
21
21
  "lint": "npm run lint",
22
22
  "test": "npm test"
@@ -25,7 +25,7 @@
25
25
  "consumers": [
26
26
  {
27
27
  "name": "example-app",
28
- "path": "../example-app",
28
+ "path": "./example-app",
29
29
  "purpose": "Primary application repository",
30
30
  "validation": {
31
31
  "install": "npm install",
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@structor-dev/cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Harness-engineering toolkit that generates repository-local AI engineering harnesses for consumer repos.",
5
5
  "license": "MIT",
6
6
  "author": "Nicolay Camacho",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "git+https://github.com/wari1986/structor.git"
9
+ "url": "git+https://github.com/nicolaycamacho/structor.git"
10
10
  },
11
11
  "keywords": [
12
12
  "ai",
@@ -26,21 +26,28 @@
26
26
  },
27
27
  "files": [
28
28
  "bin/",
29
+ "contrib/",
29
30
  "docs/",
30
31
  "examples/",
31
32
  "harness.config.example.json",
32
33
  "schemas/",
33
34
  "scripts/",
34
35
  "template/",
36
+ "CHANGELOG.md",
37
+ "ROADMAP.md",
35
38
  "README.md",
39
+ "SECURITY.md",
36
40
  "LICENSE"
37
41
  ],
38
42
  "scripts": {
39
43
  "test": "node --test",
40
44
  "prepublishOnly": "npm run validate",
41
- "check:ci": "node scripts/check-config.mjs && node scripts/check-template-files.mjs && node scripts/check-task-template.mjs && node scripts/check-contract-manifests.mjs && node scripts/check-model-overlays.mjs && node scripts/check-placeholders.mjs",
45
+ "check:ci": "node scripts/check-config.mjs && node scripts/check-schemas.mjs && node scripts/check-template-files.mjs && node scripts/check-task-template.mjs && node scripts/check-contract-manifests.mjs && node scripts/check-model-overlays.mjs && node scripts/check-placeholders.mjs && node scripts/check-examples.mjs && node scripts/check-public-hygiene.mjs",
42
46
  "check:config": "node scripts/check-config.mjs",
47
+ "check:schemas": "node scripts/check-schemas.mjs",
43
48
  "check:placeholders": "node scripts/check-placeholders.mjs",
49
+ "check:examples": "node scripts/check-examples.mjs",
50
+ "check:public-hygiene": "node scripts/check-public-hygiene.mjs",
44
51
  "check:templates": "node scripts/check-template-files.mjs",
45
52
  "check:task-template": "node scripts/check-task-template.mjs",
46
53
  "check:contracts": "node scripts/check-contract-manifests.mjs",
@@ -50,7 +57,8 @@
50
57
  "validate:governance": "node scripts/validate-governance.mjs",
51
58
  "init": "node bin/structor.mjs init",
52
59
  "generate": "node bin/structor.mjs generate",
53
- "init:harness": "node scripts/init-harness.mjs"
60
+ "init:harness": "node scripts/init-harness.mjs",
61
+ "setup:contributor": "node scripts/setup-contributor.mjs"
54
62
  },
55
63
  "engines": {
56
64
  "node": ">=20"
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://example.com/schemas/contract-manifest.schema.json",
4
3
  "title": "Contract Manifest",
5
4
  "type": "object",
6
5
  "additionalProperties": false,
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://example.com/schemas/harness-config.schema.json",
4
3
  "title": "Harness Config",
5
4
  "type": "object",
6
5
  "additionalProperties": false,
@@ -65,7 +64,11 @@
65
64
  "required": ["name", "path", "purpose", "validation"],
66
65
  "properties": {
67
66
  "name": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
68
- "path": { "type": "string", "minLength": 1 },
67
+ "path": {
68
+ "type": "string",
69
+ "minLength": 1,
70
+ "pattern": "^(?![A-Za-z]:)(?![\\\\/])(?!.*(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)).+$"
71
+ },
69
72
  "purpose": { "type": "string", "minLength": 1 },
70
73
  "validation": {
71
74
  "type": "object",