@orkestrel/scaffold 0.0.33 → 0.0.36

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 (45) hide show
  1. package/dist/host/agents/orchestration.md +28 -12
  2. package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +146 -194
  3. package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +29 -22
  4. package/dist/host/agents/skills/enterprise-bootstrap/references/components.md +31 -4
  5. package/dist/host/agents/skills/enterprise-bootstrap/references/frontend-design.md +103 -33
  6. package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +1 -1
  7. package/dist/host/agents/skills/orkestrel-build-application/references/application.md +2 -2
  8. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +2 -1
  9. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +21 -3
  10. package/dist/host/agents/skills/orkestrel-falsify/agents/openai.yaml +4 -0
  11. package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +7 -7
  12. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +10 -2
  13. package/dist/host/agents/skills/orkestrel-human-journey/SKILL.md +124 -0
  14. package/dist/host/agents/skills/orkestrel-human-journey/agents/openai.yaml +4 -0
  15. package/dist/host/agents/skills/orkestrel-human-journey/references/captures.md +74 -0
  16. package/dist/host/agents/skills/orkestrel-human-journey/references/layer.md +131 -0
  17. package/dist/host/claude/agents/analyst.md +4 -4
  18. package/dist/host/claude/agents/codex.md +4 -4
  19. package/dist/host/claude/agents/grok.md +4 -4
  20. package/dist/host/claude/agents/sol.md +56 -0
  21. package/dist/host/claude/rules/application.md +5 -3
  22. package/dist/host/claude/rules/documentation.md +6 -3
  23. package/dist/host/claude/rules/patterns.md +10 -0
  24. package/dist/host/claude/rules/quality.md +5 -4
  25. package/dist/host/claude/rules/tests.md +17 -12
  26. package/dist/host/claude/settings.json +94 -5
  27. package/dist/host/claude/skills/orkestrel-human-journey/SKILL.md +10 -0
  28. package/dist/host/claude/skills/orkestrel-polish-surface/SKILL.md +1 -1
  29. package/dist/host/codex/agents/grok.toml +1 -1
  30. package/dist/host/codex/agents/opus.toml +3 -3
  31. package/dist/host/codex/agents/planner.toml +1 -1
  32. package/dist/host/codex/agents/reviewer.toml +1 -1
  33. package/dist/host/dotfiles/gitignore +3 -0
  34. package/dist/host/manifest.json +41 -1
  35. package/dist/host/scripts/codex.sh +0 -0
  36. package/dist/host/scripts/cursor.sh +0 -0
  37. package/dist/host/scripts/deps.sh +0 -0
  38. package/dist/host/scripts/ollama.sh +0 -0
  39. package/dist/host/tests/policy.test.ts +33 -0
  40. package/dist/host/tests/setupPolicy.ts +319 -2
  41. package/dist/src/core/index.cjs +1 -1
  42. package/dist/src/core/index.cjs.map +1 -1
  43. package/dist/src/core/index.js +1 -1
  44. package/dist/src/core/index.js.map +1 -1
  45. package/package.json +2 -2
@@ -2,8 +2,100 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
3
3
  "enableAllProjectMcpServers": true,
4
4
  "permissions": {
5
- "defaultMode": "auto",
6
- "allow": ["Bash(codex --version)", "Bash(codex login *)"],
5
+ "defaultMode": "bypassPermissions",
6
+ "allow": [
7
+ "Bash(codex --version)",
8
+ "Bash(codex login *)",
9
+ "Bash(codex login status)",
10
+ "Bash(codex exec *)",
11
+ "Bash(agent.cmd --version)",
12
+ "Bash(git status *)",
13
+ "Bash(git log *)",
14
+ "Bash(git show *)",
15
+ "Bash(git diff *)",
16
+ "Bash(mkdir *)",
17
+ "Bash(mkdir -p tmp/*)",
18
+ "Read(//tmp/**)",
19
+ "Bash(npm view *)",
20
+ "Bash(npm ci)",
21
+ "Bash(node_modules/.bin/scaffold audit *)",
22
+ "Bash(npx scaffold audit *)",
23
+ "Bash(npx vitest run *)",
24
+ "Bash(npx tsc --noEmit *)",
25
+ "Bash(npm test)",
26
+ "Bash(npm test *)",
27
+ "Bash(npm run clean)",
28
+ "Bash(npm run check)",
29
+ "Bash(npm run check *)",
30
+ "Bash(npm run check:src)",
31
+ "Bash(npm run check:src *)",
32
+ "Bash(npm run check:src:core)",
33
+ "Bash(npm run check:src:core *)",
34
+ "Bash(npm run check:app)",
35
+ "Bash(npm run check:app *)",
36
+ "Bash(npm run check:app:core)",
37
+ "Bash(npm run check:app:core *)",
38
+ "Bash(npm run check:app:browser)",
39
+ "Bash(npm run check:app:browser *)",
40
+ "Bash(npm run lint)",
41
+ "Bash(npm run lint *)",
42
+ "Bash(npm run lint:check)",
43
+ "Bash(npm run lint:check *)",
44
+ "Bash(npm run format)",
45
+ "Bash(npm run format *)",
46
+ "Bash(npm run format:check)",
47
+ "Bash(npm run format:check *)",
48
+ "Bash(npm run test)",
49
+ "Bash(npm run test *)",
50
+ "Bash(npm run test:src)",
51
+ "Bash(npm run test:src *)",
52
+ "Bash(npm run test:src:core)",
53
+ "Bash(npm run test:src:core *)",
54
+ "Bash(npm run test:app)",
55
+ "Bash(npm run test:app *)",
56
+ "Bash(npm run test:app:core)",
57
+ "Bash(npm run test:app:core *)",
58
+ "Bash(npm run test:app:browser)",
59
+ "Bash(npm run test:app:browser *)",
60
+ "Bash(npm run test:policy)",
61
+ "Bash(npm run test:policy *)",
62
+ "Bash(npm run test:config)",
63
+ "Bash(npm run test:config *)",
64
+ "Bash(npm run test:guides)",
65
+ "Bash(npm run test:guides *)",
66
+ "Bash(npm run test:conformance)",
67
+ "Bash(npm run test:conformance *)",
68
+ "Bash(npm run test:integration)",
69
+ "Bash(npm run test:integration *)",
70
+ "Bash(npm run test:distribution)",
71
+ "Bash(npm run test:distribution *)",
72
+ "Bash(npm run test:probe)",
73
+ "Bash(npm run test:probe *)",
74
+ "Bash(npm run build)",
75
+ "Bash(npm run build *)",
76
+ "Bash(npm run build:src)",
77
+ "Bash(npm run build:src *)",
78
+ "Bash(npm run build:src:core)",
79
+ "Bash(npm run build:src:core *)",
80
+ "Bash(npm run build:app)",
81
+ "Bash(npm run build:app *)",
82
+ "Bash(npm run build:app:browser)",
83
+ "Bash(npm run build:app:browser *)",
84
+ "mcp__codex__codex",
85
+ "mcp__codex__codex-reply",
86
+ "mcp__webstorm__read_file",
87
+ "mcp__webstorm__search_regex",
88
+ "mcp__webstorm__search_text",
89
+ "mcp__webstorm__search_file",
90
+ "mcp__webstorm__search_symbol",
91
+ "mcp__webstorm__get_file_problems",
92
+ "mcp__webstorm__get_symbol_info",
93
+ "mcp__webstorm__get_project_modules",
94
+ "mcp__webstorm__get_all_open_file_paths",
95
+ "mcp__webstorm__lint_files",
96
+ "mcp__webstorm__git_status",
97
+ "mcp__webstorm__list_directory_tree"
98
+ ],
7
99
  "deny": [
8
100
  "Read(.env*)",
9
101
  "Read(**/.env*)",
@@ -21,8 +113,6 @@
21
113
  "Read(**/credentials)",
22
114
  "Read(credentials.json)",
23
115
  "Read(**/credentials.json)",
24
- "Read(settings.local.json)",
25
- "Read(**/settings.local.json)",
26
116
  "Read(application_default_credentials.json)",
27
117
  "Read(**/application_default_credentials.json)",
28
118
  "Read(*.pem)",
@@ -74,7 +164,6 @@
74
164
  "Read(//**/.git-credentials)",
75
165
  "Read(//**/credentials)",
76
166
  "Read(//**/credentials.json)",
77
- "Read(//**/settings.local.json)",
78
167
  "Read(//**/application_default_credentials.json)",
79
168
  "Read(//**/*.pem)",
80
169
  "Read(//**/*.key)",
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: orkestrel-human-journey
3
+ description: Prove a browser application the way a person uses it — real keystrokes, clicks, and Tab/Enter against only what is visible and reachable — and generate the capture portfolio from those same journeys. Use when accepting a UI build, proving an application end to end, deciding whether a surface is reachable by keyboard alone, proving what a screen refuses as well as what it does, auditing whether the interface speaks the user's vocabulary rather than the engine's, producing the screenshots a design review judges, or whenever the only evidence a screen works is a test that drove it through JavaScript instead of through the interface.
4
+ ---
5
+
6
+ # Load the canonical workflow
7
+
8
+ Read `.agents/skills/orkestrel-human-journey/SKILL.md` completely, then read every reference it requires. Follow that canonical workflow before acting.
9
+
10
+ This bridge contains no independent process. `AGENTS.md`, applicable rules, the canonical skill, and the governing guide/spec remain authoritative in that order.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: orkestrel-polish-surface
3
- description: Drive a rendered or externally driven surface to shipped quality through capture-evidence verdict rounds. Use for interface polish, rendered-state audits, reconciling design/state-truth/inventory findings into fix units, and converging review rounds on captured proof.
3
+ description: Drive a rendered or externally driven surface to shipped quality through capture-evidence verdict rounds. Use when asked to polish an interface, bring a rendered surface to enterprise grade, judge what actually renders rather than what the source claims, reconcile design, state-truth, and inventory findings into fix units, or converge repeated review rounds on captured proof. Run one round for a narrow request; run the full campaign for a polish or production-readiness request.
4
4
  ---
5
5
 
6
6
  # Load the canonical workflow
@@ -11,7 +11,7 @@ cursor-grok-4.5-high; re-read `agent models` if it fails and never guess or
11
11
  substitute. Invoke Cursor in ask mode only for a short bounded ask:
12
12
  agent -p --trust --mode=ask --model "$CURSOR_GROK_MODEL" "<brief>"
13
13
  For longer work do not launch anything: return the brief path, the exact resolved
14
- command, the journal path, and a cap recommendation for the Orchestrator to launch.
14
+ command, and the journal path for the Orchestrator to launch under a cap it owns.
15
15
  The brief requires read-only work, concise evidence with file:line pointers, and no
16
16
  raw dumps, design, decisions, or edits. Never use --force, expose CURSOR_API_KEY,
17
17
  read secrets, or edit. Compare git status before and after. Return only the question,
@@ -15,9 +15,9 @@ can continue the same session via --resume with context intact.
15
15
  Verify the `claude` CLI is available before dispatch; if it is absent or the
16
16
  dispatch fails, return the failure immediately so the unit can route to the Sol
17
17
  implementer instead. An implementation unit is long work: do not launch it. Return
18
- the brief path, the exact resolved command, the journal path, and a cap
19
- recommendation, and let the Orchestrator launch it as a tracked background command
20
- under a hard cap. Never detach a run, poll, restart, or kill one. The brief requires
18
+ the brief path, the exact resolved command, and the journal path, and let the
19
+ Orchestrator launch it as a tracked background command under a cap it owns. Never
20
+ recommend a cap; you hold no record of prior runs. Never detach a run, poll, restart, or kill one. The brief requires
21
21
  owned files, off-limits files, acceptance criteria, TTTDD, and a deviation contract; it
22
22
  forbids dependency installation, commits, pushes, publishing, credentials,
23
23
  destructive commands, shared-file edits, and tree-wide mutating gates. After it
@@ -10,7 +10,7 @@ Grok evidence. Pass the exact design brief independently shared with the Sol ana
10
10
  to:
11
11
  claude -p "<brief>" --model opus --effort high --permission-mode plan
12
12
  Run that yourself only for a short bounded design pass; for longer work return the
13
- brief path, the exact resolved command, the journal path, and a cap recommendation
13
+ brief path, the exact resolved command, and the journal path
14
14
  for the Orchestrator to launch.
15
15
  Verify that the `claude` CLI is available before dispatch. If it is absent or the
16
16
  dispatch fails, return the failure immediately so the Sol main session can run the
@@ -9,7 +9,7 @@ dispatch-named skill and references, the governing guide/spec, and the actual di
9
9
  Pass a bounded design-review brief to:
10
10
  claude -p "<brief>" --model opus --effort high --permission-mode plan
11
11
  Run that yourself only for a short bounded review; for longer work return the brief
12
- path, the exact resolved command, the journal path, and a cap recommendation for the
12
+ path, the exact resolved command, and the journal path for the
13
13
  Orchestrator to launch.
14
14
  Verify that the `claude` CLI is available before dispatch. If it is absent or the
15
15
  dispatch fails, return the failure immediately so the Sol main session can run the
@@ -13,6 +13,9 @@ dist
13
13
  dist-ssr
14
14
  *.local
15
15
 
16
+ # Per-operator Claude permissions; the vendored settings.json is fleet-uniform
17
+ .claude/settings.local.json
18
+
16
19
  # Editor directories and files
17
20
  .vscode/*
18
21
  !.vscode/extensions.json
@@ -110,6 +110,11 @@
110
110
  "destination": ".agents/skills/orkestrel-falsify/SKILL.md",
111
111
  "executable": false
112
112
  },
113
+ {
114
+ "storage": "agents/skills/orkestrel-falsify/agents/openai.yaml",
115
+ "destination": ".agents/skills/orkestrel-falsify/agents/openai.yaml",
116
+ "executable": false
117
+ },
113
118
  {
114
119
  "storage": "agents/skills/orkestrel-falsify/references/brief.md",
115
120
  "destination": ".agents/skills/orkestrel-falsify/references/brief.md",
@@ -150,6 +155,26 @@
150
155
  "destination": ".agents/skills/orkestrel-harden-package/references/research.md",
151
156
  "executable": false
152
157
  },
158
+ {
159
+ "storage": "agents/skills/orkestrel-human-journey/SKILL.md",
160
+ "destination": ".agents/skills/orkestrel-human-journey/SKILL.md",
161
+ "executable": false
162
+ },
163
+ {
164
+ "storage": "agents/skills/orkestrel-human-journey/agents/openai.yaml",
165
+ "destination": ".agents/skills/orkestrel-human-journey/agents/openai.yaml",
166
+ "executable": false
167
+ },
168
+ {
169
+ "storage": "agents/skills/orkestrel-human-journey/references/captures.md",
170
+ "destination": ".agents/skills/orkestrel-human-journey/references/captures.md",
171
+ "executable": false
172
+ },
173
+ {
174
+ "storage": "agents/skills/orkestrel-human-journey/references/layer.md",
175
+ "destination": ".agents/skills/orkestrel-human-journey/references/layer.md",
176
+ "executable": false
177
+ },
153
178
  {
154
179
  "storage": "agents/skills/orkestrel-polish-surface/SKILL.md",
155
180
  "destination": ".agents/skills/orkestrel-polish-surface/SKILL.md",
@@ -225,6 +250,11 @@
225
250
  "destination": ".claude/agents/scout.md",
226
251
  "executable": false
227
252
  },
253
+ {
254
+ "storage": "claude/agents/sol.md",
255
+ "destination": ".claude/agents/sol.md",
256
+ "executable": false
257
+ },
228
258
  {
229
259
  "storage": "claude/agents/verifier.md",
230
260
  "destination": ".claude/agents/verifier.md",
@@ -320,6 +350,11 @@
320
350
  "destination": ".claude/skills/orkestrel-harden-package/SKILL.md",
321
351
  "executable": false
322
352
  },
353
+ {
354
+ "storage": "claude/skills/orkestrel-human-journey/SKILL.md",
355
+ "destination": ".claude/skills/orkestrel-human-journey/SKILL.md",
356
+ "executable": false
357
+ },
323
358
  {
324
359
  "storage": "claude/skills/orkestrel-polish-surface/SKILL.md",
325
360
  "destination": ".claude/skills/orkestrel-polish-surface/SKILL.md",
@@ -511,10 +546,14 @@
511
546
  ".agents/skills/orkestrel-debrief/agents",
512
547
  ".agents/skills/orkestrel-debrief/references",
513
548
  ".agents/skills/orkestrel-falsify",
549
+ ".agents/skills/orkestrel-falsify/agents",
514
550
  ".agents/skills/orkestrel-falsify/references",
515
551
  ".agents/skills/orkestrel-harden-package",
516
552
  ".agents/skills/orkestrel-harden-package/agents",
517
553
  ".agents/skills/orkestrel-harden-package/references",
554
+ ".agents/skills/orkestrel-human-journey",
555
+ ".agents/skills/orkestrel-human-journey/agents",
556
+ ".agents/skills/orkestrel-human-journey/references",
518
557
  ".agents/skills/orkestrel-polish-surface",
519
558
  ".agents/skills/orkestrel-polish-surface/agents",
520
559
  ".agents/skills/orkestrel-polish-surface/references",
@@ -527,9 +566,10 @@
527
566
  ".claude/skills/orkestrel-debrief",
528
567
  ".claude/skills/orkestrel-falsify",
529
568
  ".claude/skills/orkestrel-harden-package",
569
+ ".claude/skills/orkestrel-human-journey",
530
570
  ".claude/skills/orkestrel-polish-surface",
531
571
  ".codex/agents",
532
572
  ".cursor/rules"
533
573
  ],
534
- "digest": "ae9a32c599f4ca43278496001c659731504b3e669252ca231aaaf1c61d84810c"
574
+ "digest": "d2b056bb83ece5f6e49cb3acd27fd917241a51a3e287791eaf8d807cd56fb4c7"
535
575
  }
File without changes
File without changes
File without changes
File without changes
@@ -6,7 +6,12 @@ import {
6
6
  inspectPolicyMirrorPaths,
7
7
  inspectPolicySources,
8
8
  inspectPolicyWorkspace,
9
+ inspectSkillFamily,
9
10
  POLICY_CONTROLS,
11
+ readSkillFamily,
12
+ SKILL_POLICY_APOSTROPHE,
13
+ SKILL_POLICY_CONTROLS,
14
+ SKILL_POLICY_EXCLUSION,
10
15
  stemToPolicyCandidates,
11
16
  testToPolicyStem,
12
17
  } from './setupPolicy.js'
@@ -291,6 +296,34 @@ describe('instrument negative controls', () => {
291
296
  }
292
297
  })
293
298
 
299
+ describe('skill family policy', () => {
300
+ it('discovers a non-empty family containing orkestrel-falsify', () => {
301
+ const family = readSkillFamily(process.cwd())
302
+ expect(family.length).toBeGreaterThan(0)
303
+ expect(family).toContain('orkestrel-falsify')
304
+ })
305
+
306
+ it('requires every discovered skill file, metadata token, and reference', () => {
307
+ expect(inspectSkillFamily(process.cwd())).toEqual([])
308
+ })
309
+
310
+ for (const control of SKILL_POLICY_CONTROLS) {
311
+ it(`${control.label} [membership: ${control.membership}]`, () => {
312
+ const violations = inspectPolicyControl(control)
313
+ expect(violations).toHaveLength(1)
314
+ expect(violations[0]?.rule).toBe(control.rule)
315
+ })
316
+ }
317
+
318
+ it(`${SKILL_POLICY_APOSTROPHE.label} [membership: ${SKILL_POLICY_APOSTROPHE.membership}]`, () => {
319
+ expect(inspectPolicyControl(SKILL_POLICY_APOSTROPHE)).toEqual([])
320
+ })
321
+
322
+ it(`${SKILL_POLICY_EXCLUSION.label} [membership: ${SKILL_POLICY_EXCLUSION.membership}]`, () => {
323
+ expect(inspectPolicyControl(SKILL_POLICY_EXCLUSION)).toEqual([])
324
+ })
325
+ })
326
+
294
327
  describe('repository policy', () => {
295
328
  it('enforces placement and mirrors over the real workspace', () => {
296
329
  expect(inspectPolicyWorkspace(process.cwd())).toEqual([])