@orkestrel/scaffold 0.0.43 → 0.0.45

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 (66) hide show
  1. package/README.md +10 -10
  2. package/dist/bin/main.js +40 -43
  3. package/dist/bin/main.js.map +1 -1
  4. package/dist/host/AGENTS.md +7 -2
  5. package/dist/host/agents/orchestration.md +232 -56
  6. package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +7 -7
  7. package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +11 -9
  8. package/dist/host/agents/skills/enterprise-bootstrap/references/components.md +3 -3
  9. package/dist/host/agents/skills/enterprise-bootstrap/references/frontend-design.md +3 -3
  10. package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +1 -1
  11. package/dist/host/agents/skills/orkestrel-align-packages/SKILL.md +1 -1
  12. package/dist/host/agents/skills/orkestrel-build-application/SKILL.md +2 -2
  13. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +1 -1
  14. package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +2 -2
  15. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +8 -8
  16. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +16 -14
  17. package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +3 -3
  18. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +14 -14
  19. package/dist/host/agents/skills/orkestrel-harden-package/SKILL.md +1 -1
  20. package/dist/host/agents/skills/orkestrel-human-journey/SKILL.md +3 -3
  21. package/dist/host/agents/skills/orkestrel-human-journey/references/captures.md +3 -3
  22. package/dist/host/agents/skills/orkestrel-human-journey/references/layer.md +3 -3
  23. package/dist/host/agents/skills/orkestrel-polish-surface/SKILL.md +3 -3
  24. package/dist/host/claude/agents/analyst.md +2 -2
  25. package/dist/host/claude/agents/checker.md +2 -2
  26. package/dist/host/claude/agents/codex.md +5 -5
  27. package/dist/host/claude/agents/orkestrel.md +9 -8
  28. package/dist/host/claude/agents/planner.md +1 -1
  29. package/dist/host/claude/agents/researcher.md +2 -2
  30. package/dist/host/claude/agents/reviewer.md +1 -1
  31. package/dist/host/claude/agents/scout.md +2 -2
  32. package/dist/host/claude/agents/sol.md +3 -3
  33. package/dist/host/claude/agents/verifier.md +8 -0
  34. package/dist/host/claude/rules/application.md +7 -7
  35. package/dist/host/claude/rules/architecture.md +6 -6
  36. package/dist/host/claude/rules/documentation.md +1 -0
  37. package/dist/host/claude/rules/patterns.md +3 -3
  38. package/dist/host/claude/rules/quality.md +3 -3
  39. package/dist/host/claude/rules/tests.md +9 -2
  40. package/dist/host/claude/rules/workspace.md +7 -7
  41. package/dist/host/claude/rules/writing.md +12 -2
  42. package/dist/host/codex/agents/planner.toml +1 -1
  43. package/dist/host/configs/helpers.ts +21 -1
  44. package/dist/host/cursor/rules/orchestration.mdc +1 -1
  45. package/dist/host/dotfiles/gitignore +4 -1
  46. package/dist/host/guides/scaffold.md +134 -119
  47. package/dist/host/scripts/codex.sh +0 -0
  48. package/dist/host/scripts/cursor.sh +0 -0
  49. package/dist/host/scripts/deps.sh +0 -0
  50. package/dist/host/scripts/ollama.sh +0 -0
  51. package/dist/host/tests/config.test.ts +40 -1
  52. package/dist/host/tests/policy.test.ts +2 -2
  53. package/dist/host/tests/setupPolicy.ts +8 -5
  54. package/dist/src/core/index.cjs +143 -149
  55. package/dist/src/core/index.cjs.map +1 -1
  56. package/dist/src/core/index.d.cts +1624 -1643
  57. package/dist/src/core/index.d.ts +1624 -1643
  58. package/dist/src/core/index.js +144 -149
  59. package/dist/src/core/index.js.map +1 -1
  60. package/dist/src/server/index.cjs +82 -97
  61. package/dist/src/server/index.cjs.map +1 -1
  62. package/dist/src/server/index.d.cts +1844 -1871
  63. package/dist/src/server/index.d.ts +1844 -1871
  64. package/dist/src/server/index.js +83 -96
  65. package/dist/src/server/index.js.map +1 -1
  66. package/package.json +3 -2
File without changes
File without changes
File without changes
File without changes
@@ -120,6 +120,16 @@ describe('root configuration', () => {
120
120
  setup: ['./tests/setup.ts'],
121
121
  })
122
122
  }
123
+ // The setup project is selected by any proof named `setup*.test.ts` directly under
124
+ // `tests`, so it is the one derived project whose include is a pattern rather than
125
+ // the proof's own path. Reading it from the same glob the generator reads keeps a
126
+ // registered project inside this gate instead of beside it.
127
+ if (globSync('tests/setup*.test.ts', { cwd: root }).length > 0) {
128
+ expected.set('setup', {
129
+ include: 'tests/setup*.test.ts',
130
+ setup: ['./tests/setup.ts'],
131
+ })
132
+ }
123
133
  // The live-service project covers a directory rather than one proof, so its
124
134
  // readiness module is the fact that selects it. A suite beneath
125
135
  // `tests/service` with no setup module is a project nothing configures.
@@ -675,6 +685,7 @@ describe('configuration helpers', () => {
675
685
  'WORKSPACE_ROOT',
676
686
  'containedPath',
677
687
  'decodeAssetSource',
688
+ 'enforceBuildLog',
678
689
  'enforceOutputPath',
679
690
  'environmentAssetSources',
680
691
  'environmentBoundary',
@@ -702,6 +713,34 @@ describe('configuration helpers', () => {
702
713
  for (const name of required) expect(found).toContain(name)
703
714
  })
704
715
 
716
+ it('fails broken import-meta builds and forwards every other log', () => {
717
+ expect(() =>
718
+ configHelpers.enforceBuildLog(
719
+ 'warn',
720
+ {
721
+ code: 'EMPTY_IMPORT_META',
722
+ message: 'The import.meta meta-property is not available in CommonJS output.',
723
+ },
724
+ expect.unreachable,
725
+ ),
726
+ ).toThrow(
727
+ '[orkestrel-build] The import.meta meta-property is not available in CommonJS output.',
728
+ )
729
+
730
+ const levels: string[] = []
731
+ const messages: string[] = []
732
+ configHelpers.enforceBuildLog(
733
+ 'warn',
734
+ { code: 'CONTROL_WARNING', message: 'The control warning remains visible.' },
735
+ (level, log) => {
736
+ levels.push(level)
737
+ messages.push(typeof log === 'string' ? log : log.message)
738
+ },
739
+ )
740
+ expect(levels).toStrictEqual(['warn'])
741
+ expect(messages).toStrictEqual(['The control warning remains visible.'])
742
+ })
743
+
705
744
  it('resolves contained workspace paths and refuses a real outside sibling', () => {
706
745
  const scratch = createPolicyScratch({ prefix: 'orkestrel-config-outside-' })
707
746
  try {
@@ -813,7 +852,7 @@ describe('configuration helpers', () => {
813
852
  )
814
853
  })
815
854
 
816
- it('drives both plugins through their real Vite hooks', async () => {
855
+ it('drives each plugin through its real Vite hooks', async () => {
817
856
  const environments: ReadonlyArray<
818
857
  'src/core' | 'src/browser' | 'src/server' | 'app/core' | 'app/browser' | 'app/server'
819
858
  > = ['src/core', 'src/browser', 'src/server', 'app/core', 'app/browser', 'app/server']
@@ -346,7 +346,7 @@ describe('skill family policy', () => {
346
346
  expect(inspectSkillFamily(process.cwd())).toEqual([])
347
347
  })
348
348
 
349
- it('parses a folded description containing a colon as exactly two frontmatter keys', () => {
349
+ it('parses a folded description containing a colon as exactly the name and description keys', () => {
350
350
  const skill = SKILL_POLICY_FOLDED.files.find((file) => file.path.endsWith('/SKILL.md'))
351
351
  const frontmatter = parseSkillFrontmatter(skill?.content ?? '')
352
352
  expect(frontmatter?.keys).toEqual(['name', 'description'])
@@ -375,7 +375,7 @@ describe('skill family policy', () => {
375
375
  expect(inspectPolicyControl(SKILL_POLICY_BACKTICKED)).toEqual([])
376
376
  })
377
377
 
378
- it('parses a folded description containing two paragraphs', () => {
378
+ it('parses a folded description containing more than one paragraph', () => {
379
379
  const skill = SKILL_POLICY_PARAGRAPHS.files.find((file) => file.path.endsWith('/SKILL.md'))
380
380
  const frontmatter = parseSkillFrontmatter(skill?.content ?? '')
381
381
  expect(frontmatter?.keys).toEqual(['name', 'description'])
@@ -114,7 +114,7 @@ export const SKILL_REFERENCE_TEXT = `${SKILL_POLICY_TEXT}\nRead references/examp
114
114
  /** Minimal valid provider bridge text for physical bridge controls. */
115
115
  export const SKILL_BRIDGE_TEXT = `${SKILL_POLICY_TEXT}\nRead \`.agents/skills/sample/SKILL.md\`.\n`
116
116
 
117
- /** Canonical skill metadata whose three values each carry YAML's escaped apostrophe. */
117
+ /** Canonical skill metadata whose values each carry YAML's escaped apostrophe. */
118
118
  export const SKILL_APOSTROPHE_METADATA =
119
119
  "interface:\n display_name: 'Owner''s Fixture'\n" +
120
120
  " short_description: 'Exercise the family''s apostrophe rule'\n" +
@@ -184,7 +184,10 @@ export const DATA_SOURCE_FILES: readonly string[] = Object.freeze([
184
184
  export const DATA_EXEMPT_FILES: readonly string[] = Object.freeze(['helpers.ts'])
185
185
 
186
186
  /** Fleet-registered folders whose direct modules each contain one named function. */
187
- export const FUNCTION_DOMAIN_FOLDERS: readonly string[] = Object.freeze(['app/browser/composables'])
187
+ export const FUNCTION_DOMAIN_FOLDERS: readonly string[] = Object.freeze([
188
+ 'app/browser/composables',
189
+ 'src/server/execution',
190
+ ])
188
191
 
189
192
  /** Every ambient declaration suffix the source glob collects and the parsed population excludes. */
190
193
  export const POLICY_AMBIENT_SUFFIXES: readonly string[] = Object.freeze([
@@ -1094,7 +1097,7 @@ export function readSkillReferences(root: string, name: string): readonly string
1094
1097
  }
1095
1098
 
1096
1099
  /**
1097
- * Create metadata in the canonical four-line skill interface shape.
1100
+ * Create metadata in the canonical skill interface shape.
1098
1101
  *
1099
1102
  * @param name - The skill token the default prompt invokes.
1100
1103
  * @returns Canonical skill interface metadata ending in one newline.
@@ -1111,7 +1114,7 @@ export function createSkillMetadata(name: string): string {
1111
1114
  }
1112
1115
 
1113
1116
  /**
1114
- * Parse the default prompt from the canonical four-line skill interface shape.
1117
+ * Parse the default prompt from the canonical skill interface shape.
1115
1118
  *
1116
1119
  * Each value is a non-empty single-quoted scalar in which `''` carries an apostrophe.
1117
1120
  *
@@ -2099,7 +2102,7 @@ export const SKILL_POLICY_BACKTICKED: PolicyControl = Object.freeze({
2099
2102
  ],
2100
2103
  })
2101
2104
 
2102
- /** A folded description whose blank scalar line separates two paragraphs. */
2105
+ /** A folded description whose blank scalar line separates its paragraphs. */
2103
2106
  export const SKILL_POLICY_PARAGRAPHS: PolicyControl = Object.freeze({
2104
2107
  label: 'accepts a folded description containing two paragraphs',
2105
2108
  membership: 'folded description scalars in discovered skill frontmatter',