@orkestrel/scaffold 0.0.21 → 0.0.23
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.
- package/dist/bin/scaffold.js +371 -140
- package/dist/bin/scaffold.js.map +1 -1
- package/dist/host/AGENTS.md +61 -42
- package/dist/host/CLAUDE.md +39 -408
- package/dist/host/agents/orchestration.md +454 -0
- package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +25 -7
- package/dist/host/agents/skills/orkestrel-align-packages/SKILL.md +2 -2
- package/dist/host/agents/skills/orkestrel-build-application/SKILL.md +42 -31
- package/dist/host/agents/skills/orkestrel-build-application/references/application.md +129 -0
- package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +3 -3
- package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +2 -2
- package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +167 -0
- package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +98 -0
- package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +148 -0
- package/dist/host/agents/skills/orkestrel-harden-package/SKILL.md +4 -2
- package/dist/host/agents/skills/orkestrel-harden-package/references/centralization.md +5 -5
- package/dist/host/agents/skills/orkestrel-harden-package/references/research.md +2 -0
- package/dist/host/agents/skills/orkestrel-polish-surface/SKILL.md +11 -6
- package/dist/host/claude/agents/analyst.md +59 -0
- package/dist/host/claude/agents/application.md +1 -1
- package/dist/host/claude/agents/builder.md +1 -1
- package/dist/host/claude/agents/checker.md +5 -1
- package/dist/host/claude/agents/codex.md +120 -94
- package/dist/host/claude/agents/grok.md +44 -32
- package/dist/host/claude/agents/implementer.md +1 -1
- package/dist/host/claude/agents/orkestrel.md +5 -5
- package/dist/host/claude/agents/planner.md +9 -3
- package/dist/host/claude/agents/researcher.md +6 -5
- package/dist/host/claude/agents/reviewer.md +12 -6
- package/dist/host/claude/agents/scout.md +7 -4
- package/dist/host/claude/agents/verifier.md +1 -1
- package/dist/host/claude/rules/application.md +17 -16
- package/dist/host/claude/rules/architecture.md +41 -22
- package/dist/host/claude/rules/documentation.md +2 -1
- package/dist/host/claude/rules/names.md +7 -6
- package/dist/host/claude/rules/quality.md +65 -18
- package/dist/host/claude/rules/styles.md +1 -1
- package/dist/host/claude/rules/tests.md +12 -6
- package/dist/host/claude/rules/typescript.md +1 -1
- package/dist/host/claude/rules/workspace.md +6 -3
- package/dist/host/claude/settings.json +2 -0
- package/dist/host/claude/skills/orkestrel-falsify/SKILL.md +10 -0
- package/dist/host/codex/agents/analyst.toml +13 -4
- package/dist/host/codex/agents/checker.toml +1 -1
- package/dist/host/codex/agents/grok.toml +2 -1
- package/dist/host/codex/agents/opus.toml +1 -1
- package/dist/host/codex/agents/planner.toml +1 -1
- package/dist/host/codex/agents/researcher.toml +2 -2
- package/dist/host/codex/agents/reviewer.toml +1 -1
- package/dist/host/codex/agents/scout.toml +2 -2
- package/dist/host/codex/config.toml +23 -70
- package/dist/host/cursor/rules/orchestration.mdc +33 -0
- package/dist/host/guides/src/scaffold.md +339 -125
- package/dist/host/manifest.json +47 -1
- package/dist/host/tests/setupPolicy.ts +210 -3
- package/dist/src/core/index.cjs +477 -69
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +132 -43
- package/dist/src/core/index.d.ts +132 -43
- package/dist/src/core/index.js +474 -70
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +83 -33
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.d.cts +43 -27
- package/dist/src/server/index.d.ts +43 -27
- package/dist/src/server/index.js +84 -35
- package/dist/src/server/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -7,7 +7,7 @@ effort: low
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
You are the **Scout** — the cheap native reconnaissance lane in this project's
|
|
10
|
-
role set (see
|
|
10
|
+
role set (see .agents/orchestration.md). You answer "where does X live, what shape is it, what
|
|
11
11
|
touches it" so the Orchestrator can write a precise dispatch. You are an
|
|
12
12
|
Executor: spawn nothing.
|
|
13
13
|
|
|
@@ -15,10 +15,13 @@ Executor: spawn nothing.
|
|
|
15
15
|
|
|
16
16
|
- Read **AGENTS.md** first; the repository model and rule map orient every
|
|
17
17
|
answer. This charter restates nothing they own.
|
|
18
|
+
- Reconnaissance belongs to Grok first. You are the last step of the tedious-work
|
|
19
|
+
ladder — Grok, then Luna on Codex, then you — so a dispatch reaching you should
|
|
20
|
+
already record why the benches above it were unavailable.
|
|
18
21
|
- Locate, do not absorb: read excerpts sufficient to identify a seam, an owner,
|
|
19
|
-
or a shape
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
or a shape. Deep reading and synthesis belong to the `grok` bench, and quality
|
|
23
|
+
judgment belongs to the review roles. If the question needs either, say so
|
|
24
|
+
instead of drifting into it.
|
|
22
25
|
- Return pointers, not prose: `file:line` for every claim, the minimal shape
|
|
23
26
|
summary the question needs, and an explicit list of places searched that came
|
|
24
27
|
up empty — an absence claim is only as good as its named search.
|
|
@@ -8,7 +8,7 @@ permissionMode: default
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
You are the **Verifier** — the independent gate runner in this project's role set
|
|
11
|
-
(see
|
|
11
|
+
(see .agents/orchestration.md). No builder's self-report counts as gate evidence. You are an
|
|
12
12
|
Executor: run the gates yourself, spawn nothing.
|
|
13
13
|
|
|
14
14
|
## Job
|
|
@@ -25,15 +25,17 @@ paths:
|
|
|
25
25
|
- app/server uses app/core contracts, parses environment values before binding,
|
|
26
26
|
defaults to loopback, emits `dist/app/server/main.cjs`, and keeps only
|
|
27
27
|
`node:*` external.
|
|
28
|
-
- Browser
|
|
29
|
-
environment imports the other's implementation.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
- Browser and server integrate across a contract and transport boundary. Neither
|
|
29
|
+
environment imports the other's implementation.
|
|
30
|
+
- Four tools enforce that boundary, and none of them is replaceable by a custom
|
|
31
|
+
parser or source-language analyzer: `.oxlintrc.json` `no-restricted-imports`
|
|
32
|
+
enforces declared package, alias, and conventional relative import direction;
|
|
33
|
+
scoped TypeScript configurations remove Node and DOM globals from the wrong
|
|
34
|
+
environment; Vite's real browser and server builds resolve Vue, assets, CSS,
|
|
35
|
+
workers, and runtime module graphs; and generated-consumer tests exercise all
|
|
36
|
+
three.
|
|
37
|
+
- Generated consumers must pass lint, scoped typechecking, production builds, and
|
|
38
|
+
real integration tests.
|
|
37
39
|
- Scoped checks include `.ts`, `.tsx`, `.mts`, and `.cts`. Vue SFCs and CSS
|
|
38
40
|
belong to browser environments; SCSS requires an authorized compiler dependency.
|
|
39
41
|
- Published `src` environments never import private `app` modules. Src core is
|
|
@@ -43,13 +45,12 @@ paths:
|
|
|
43
45
|
- App-only manifests are unscoped and `private: true`, with no package export
|
|
44
46
|
map or publish configuration. Mixed manifests publish only `dist/src`, and
|
|
45
47
|
Vue remains development-only because app output is never published.
|
|
46
|
-
- app/server process signals
|
|
47
|
-
generation-safe runner whose stale failures cannot release a newer run
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
`startApplicationServer` convenience factory belongs in `factories.ts`.
|
|
51
|
-
|
|
52
|
-
handling.
|
|
48
|
+
- Give app/server process signals to a tested, explicitly stoppable,
|
|
49
|
+
generation-safe runner whose stale failures cannot release a newer run.
|
|
50
|
+
- Return the runner from convenience startup, so normal cleanup cannot be hidden.
|
|
51
|
+
- `ApplicationServerRunner` lives alone in `ApplicationServerRunner.ts`. The
|
|
52
|
+
`startApplicationServer` convenience factory belongs in `factories.ts`. `main.ts`
|
|
53
|
+
invokes it and owns no reusable declarations or duplicated signal handling.
|
|
53
54
|
- Do not add showcase, auth, storage, proxy, CSS framework, or other product
|
|
54
55
|
policy unless the request requires it.
|
|
55
56
|
- Test repeated lifecycle, concurrent calls, malformed environment input,
|
|
@@ -13,26 +13,27 @@ paths:
|
|
|
13
13
|
|
|
14
14
|
## Centralized-file pattern
|
|
15
15
|
|
|
16
|
-
| Content | Sole location
|
|
17
|
-
| ------------------------- |
|
|
18
|
-
| Interfaces/types | `*/types.ts`
|
|
19
|
-
| Constants/data | `*/constants.ts`
|
|
20
|
-
| Pure helpers | `*/helpers.ts`
|
|
21
|
-
| Guards | `*/validators.ts`
|
|
22
|
-
| Guard combinators | `*/combinators.ts`
|
|
23
|
-
| Owned snapshots | `*/cloners.ts`
|
|
24
|
-
| Coercers | `*/parsers.ts`
|
|
25
|
-
| Shape values | `*/shapers.ts`
|
|
26
|
-
| Value inferers | `*/inferers.ts`
|
|
27
|
-
| Shape/algorithm compilers | `*/compilers.ts`
|
|
28
|
-
| Entity/value factories | `*/factories.ts`
|
|
29
|
-
| Middleware factories | `*/middlewares.ts`
|
|
30
|
-
| Seeders | `*/seeders.ts`
|
|
31
|
-
| Schemas | `*/schemas.ts`
|
|
32
|
-
| Relations | `*/relations.ts`
|
|
33
|
-
| Error classes/guards | `*/errors.ts`
|
|
34
|
-
| Public exports | `*/index.ts`
|
|
35
|
-
| Implementations | `*/[domain]/[Entity].ts`, one class per file
|
|
16
|
+
| Content | Sole location |
|
|
17
|
+
| ------------------------- | ------------------------------------------------------------ |
|
|
18
|
+
| Interfaces/types | `*/types.ts` |
|
|
19
|
+
| Constants/data | `*/constants.ts` |
|
|
20
|
+
| Pure helpers | `*/helpers.ts` |
|
|
21
|
+
| Guards | `*/validators.ts` |
|
|
22
|
+
| Guard combinators | `*/combinators.ts` |
|
|
23
|
+
| Owned snapshots | `*/cloners.ts` |
|
|
24
|
+
| Coercers | `*/parsers.ts` |
|
|
25
|
+
| Shape values | `*/shapers.ts` |
|
|
26
|
+
| Value inferers | `*/inferers.ts` |
|
|
27
|
+
| Shape/algorithm compilers | `*/compilers.ts` |
|
|
28
|
+
| Entity/value factories | `*/factories.ts` |
|
|
29
|
+
| Middleware factories | `*/middlewares.ts` |
|
|
30
|
+
| Seeders | `*/seeders.ts` |
|
|
31
|
+
| Schemas | `*/schemas.ts` |
|
|
32
|
+
| Relations | `*/relations.ts` |
|
|
33
|
+
| Error classes/guards | `*/errors.ts` |
|
|
34
|
+
| Public exports | `*/index.ts` |
|
|
35
|
+
| Implementations | `*/[domain]/[Entity].ts`, one class per file |
|
|
36
|
+
| Function modules | a designated folder's `[function].ts`, one function per file |
|
|
36
37
|
|
|
37
38
|
Use only the centralized files an environment needs.
|
|
38
39
|
|
|
@@ -40,6 +41,7 @@ Use only the centralized files an environment needs.
|
|
|
40
41
|
|
|
41
42
|
- An implementation file contains imports and exactly one class implementation with `#` fields.
|
|
42
43
|
- It contains no module-scope interface, type, constant, or free function—even when private to that file.
|
|
44
|
+
- A function module contains imports and exactly one exported function named for its file. Everything else extracts by kind exactly as it does from a class module.
|
|
43
45
|
- Extract local declarations by kind. “Only used here” and “not exported” are not exemptions.
|
|
44
46
|
- Every declaration in a centralized file is exported. Fold away a trivial single-use declaration or export/test it; never leave it hidden.
|
|
45
47
|
- The only permitted non-exported module-scope declarations are in a runtime entrypoint that must be self-contained and cannot import siblings, such as raw source loaded in a worker. Explain that necessity in a comment.
|
|
@@ -120,6 +122,15 @@ Store child managers in `#` fields and expose readonly getters typed as their in
|
|
|
120
122
|
- Keep its interfaces in module-root `types.ts`, factories in module-root `factories.ts`, and exports in the module barrel.
|
|
121
123
|
- Entity subfolders never grow their own centralized files.
|
|
122
124
|
|
|
125
|
+
### Kind or folder
|
|
126
|
+
|
|
127
|
+
- A word is either a centralized kind or a domain folder, never both.
|
|
128
|
+
- A folder named for a centralized kind—`helpers/`, `validators/`, `handlers/`—is that kind's file, not a folder.
|
|
129
|
+
- Read a function domain from the fleet-canon register (`tests/setupPolicy.ts`,
|
|
130
|
+
`FUNCTION_DOMAIN_FOLDERS`). Never infer one from a folder's name; a camelCase module inside an
|
|
131
|
+
undesignated folder is misplaced.
|
|
132
|
+
- Request a new domain through a fleet-canon change. There is no workspace-local registration path.
|
|
133
|
+
|
|
123
134
|
### Extension categories
|
|
124
135
|
|
|
125
136
|
- A designed extension point—drivers, stores, transports—gets its category folder even with one concrete class.
|
|
@@ -153,6 +164,12 @@ Both obey:
|
|
|
153
164
|
barrel row.
|
|
154
165
|
- Never re-export a symbol originating in another package; fix consumer imports to the originating package.
|
|
155
166
|
- Implementation files export their own classes directly.
|
|
167
|
+
- Expose every intentional top-level source export through its correct environment barrel.
|
|
168
|
+
- Never let current consumer count gate later exposure. Developers receive the same supported
|
|
169
|
+
mechanisms the package uses, so they retain full control and customization.
|
|
170
|
+
- If a declaration should not be public, make it a true local or runtime-private detail, or remove
|
|
171
|
+
the capability for a substantive reason. Never leave an intentional reusable export stranded
|
|
172
|
+
outside the barrel.
|
|
156
173
|
- When a symbol moves, update every import; never leave a compatibility re-export.
|
|
157
174
|
|
|
158
175
|
```ts
|
|
@@ -167,12 +184,14 @@ export * from './greeters/Greeter.js'
|
|
|
167
184
|
|
|
168
185
|
## System constraints
|
|
169
186
|
|
|
170
|
-
- Build a capability with its first real consumer; do not speculate.
|
|
187
|
+
- Build or substantively expand a capability with its first real consumer; do not speculate. This
|
|
188
|
+
gate applies only when creating or expanding the capability, not to its later barrel exposure.
|
|
171
189
|
- Keep interfaces to the smallest primitives the capability requires.
|
|
172
190
|
- For multiple backends, implement shared querying/paging/aggregation in one engine over those primitives. A backend may override an operation only with a genuine native fast path and otherwise falls back to the engine.
|
|
173
191
|
- Centralize any pattern repeated twice.
|
|
174
192
|
- Keep everything generic/reusable and free of unrelated-project logic.
|
|
175
|
-
- Do not expand
|
|
193
|
+
- Do not expand the capability set without concrete need. Once that capability exists intentionally,
|
|
194
|
+
its reusable top-level exports follow the barrel rule above without a second consumer gate.
|
|
176
195
|
- Do not remove structural files because they are currently empty.
|
|
177
196
|
- Prefer the smallest complete implementation that preserves architecture.
|
|
178
197
|
- No deprecation aliases, compatibility shims, or backward-compatibility branches; update all consumers atomically.
|
|
@@ -14,7 +14,8 @@ paths:
|
|
|
14
14
|
|
|
15
15
|
# Documentation and parity rules
|
|
16
16
|
|
|
17
|
-
Documentation is an enforced contract, not explanatory decoration.
|
|
17
|
+
Documentation is an enforced contract, not explanatory decoration. The Writing rules in
|
|
18
|
+
`AGENTS.md` govern its prose and are not restated here.
|
|
18
19
|
|
|
19
20
|
## Authority and workflow
|
|
20
21
|
|
|
@@ -174,12 +174,13 @@ For `_` bindings:
|
|
|
174
174
|
|
|
175
175
|
## Files and folders
|
|
176
176
|
|
|
177
|
-
| Kind
|
|
178
|
-
|
|
|
179
|
-
| Domain folder
|
|
180
|
-
| Implementation
|
|
181
|
-
|
|
|
182
|
-
|
|
|
177
|
+
| Kind | Pattern |
|
|
178
|
+
| --------------- | -------------------------------------------------------------------------------- |
|
|
179
|
+
| Domain folder | lowercase plural entity: `agents/`, `tools/` |
|
|
180
|
+
| Implementation | PascalCase entity: `Agent.ts` |
|
|
181
|
+
| Function module | camelCase function: `renderGrid.ts` |
|
|
182
|
+
| Test | source filename without extension + `.test`: `Agent.test.ts`, `useTheme.test.ts` |
|
|
183
|
+
| Guide | lowercase domain: `agents.md` |
|
|
183
184
|
|
|
184
185
|
## Fixed lifecycle vocabulary
|
|
185
186
|
|
|
@@ -15,43 +15,90 @@ paths:
|
|
|
15
15
|
|
|
16
16
|
## Evidence before change
|
|
17
17
|
|
|
18
|
-
- Research
|
|
19
|
-
- Use current primary sources for external capabilities and exact installed declarations
|
|
20
|
-
- Read authoritative types and named decision-bearing implementation files first-hand. Delegate bulk supporting context,
|
|
21
|
-
- Treat existing code, tests, `old/`, branches, and copied projects as evidence
|
|
18
|
+
- Research when the user asks for it, when comparing an upstream, protocol, or legacy implementation, or when current external behavior materially affects design.
|
|
19
|
+
- Use current primary sources for external capabilities, and the exact installed declarations and guides for dependencies. Separate verified fact from inference.
|
|
20
|
+
- Read authoritative types and named decision-bearing implementation files first-hand. Delegate bulk supporting context, never the owning design decision.
|
|
21
|
+
- Treat existing code, tests, `old/`, branches, and copied projects as evidence, not authority.
|
|
22
22
|
- Build a capability/defect matrix before a broad API or production-readiness change. Every row ends as implement, repair, retain, or intentionally exclude with evidence.
|
|
23
|
+
- Fix that matrix when the change starts. It is the definition of done, and the change closes when every row closes.
|
|
24
|
+
- Never end a row as "hardened further." Replace any evaluative phrase with the concrete condition that closes the row.
|
|
25
|
+
- Record a finding outside the matrix against the row that owns it, for the next matrix. Do not reopen this one.
|
|
26
|
+
|
|
27
|
+
## Run it, don't argue it
|
|
28
|
+
|
|
29
|
+
A question a probe can settle is settled by the probe, whether or not anyone has disputed it. Reasoning decides what to run and what the result means. It does not replace the run.
|
|
30
|
+
|
|
31
|
+
This is a habit for your own work first, and a rule about disagreements second. Most unverified beliefs are never challenged by anyone — they are simply built on.
|
|
32
|
+
|
|
33
|
+
- Test your own assumptions before you rely on them. You do not need a disagreement to justify a probe. If you are about to depend on what a function returns, what a config resolves to, what a flag does, or whether a path is even reached, run it and find out.
|
|
34
|
+
- Treat a long deliberation about behaviour as the signal to stop and run something. Deliberation that a ten-line probe would have ended is the most expensive habit in this process, and it is invisible because it feels like rigour.
|
|
35
|
+
- Verify a belief before stating it, or label it as unverified. An unverified assertion put into context becomes a fact for everything downstream, including other agents, and correcting it later costs more than the check would have.
|
|
36
|
+
- Prefer the check over the chain of reasoning whenever the check is cheap. Reading the installed declaration, running one line, or counting the call sites beats three paragraphs inferring the same thing, and it produces evidence you can hand to someone else.
|
|
37
|
+
- Write the probe before the argument gets long. The moment a claim about behaviour is disputed — between engines, between a report and a rule, or in your own head — stop and run it. Get the smallest real input through the real code and read the real output.
|
|
38
|
+
- Bound the search before starting it, and put the bound in the brief. Name the benchmark, the population, or the row that ends it. An investigation with no stated stopping condition runs until attention runs out. This includes the case where the honest answer is that the limit is inherent and belongs in documentation rather than in code.
|
|
39
|
+
- Treat a negative probe as evidence about the probe until its input is shown to reach the code under test. A pass proves nothing if the vector never arrived. Instrument the path, assert an observable side effect, or drive it through a door you can see.
|
|
40
|
+
- When a report names a defect and your reproduction comes back clean, assume first that your vector was weaker than theirs, and go get their exact vector. Treating a failed reproduction as a disproof is the most common way a true finding is lost.
|
|
41
|
+
- Do not read a result into a tool's failure to find your probe. "No tests found", an empty match, a skipped file, a runner that resolved nothing — these report on the harness, not the subject. Confirm the probe was collected and executed first.
|
|
42
|
+
- Prefer an observation over a derivation, including your own. When a measurement and an argument disagree, the argument is wrong until the measurement is shown to be broken.
|
|
43
|
+
- Diagnose from the artifact the work produces — the file, the count, the exit code, the timestamp on what changed — never from a wrapper or a proxy signal that merely correlates with progress.
|
|
44
|
+
- Verify a comment or an agent's report against the call sites before relying on it. A code comment is not evidence. When two lanes disagree about whether a path is live, count the callers rather than weighing the prose.
|
|
45
|
+
- What a round proves is what it ran. A conclusion carried from one door to another is a hypothesis at the second door. Re-run it there.
|
|
23
46
|
|
|
24
47
|
## Falsification
|
|
25
48
|
|
|
26
|
-
A review that reads a diff finds what the diff shows
|
|
49
|
+
A review that reads a diff finds what the diff shows. A review that tries to break named claims finds what the diff hides. Code that has passed diff review several times can still carry a defect nobody has tried to trigger.
|
|
50
|
+
|
|
51
|
+
### Writing the claims
|
|
27
52
|
|
|
28
|
-
- State
|
|
29
|
-
- Instruct the auditor to attempt refutation
|
|
53
|
+
- State the subject as a numbered list of the claims the work makes, never as "review this diff." Each claim is falsifiable: a property some concrete input, state, or interleaving could show false.
|
|
54
|
+
- Instruct the auditor to attempt refutation, not confirmation. A claim it cannot break is CONFIRMED with the evidence that convinced it. A claim it breaks is BROKEN with the exact failing input, state, or interleaving, plus the smallest correct fix.
|
|
30
55
|
- Derive claims from what the change asserts under adverse conditions: cancellation, restart, concurrency, partial failure, hostile input, resource exhaustion, and the orderings a happy path never reaches.
|
|
31
56
|
- Read the installed declaration or implementation of every substrate a claim depends on. A claim about `stop()` is unfalsifiable until you know what `stop()` does when the status is not the one the caller assumed.
|
|
32
|
-
|
|
57
|
+
|
|
58
|
+
### Instruments
|
|
59
|
+
|
|
60
|
+
- An instrument is not evidence until it has failed. Pair every probe, comparison, or matrix with a negative control that must report failure, run under the same conditions. An identity check whose control reports "same" has measured nothing.
|
|
61
|
+
- Draw the negative control from outside the population the instrument covers. Name the instrument's membership rule first, then pick a control that rule excludes. A control sampled from constructs the instrument already handles proves only that it discriminates among those constructs, and says nothing about the class it silently cannot reach.
|
|
62
|
+
- State what the controls established and what they did not. An instrument certified only from the inside is trusted exactly where it has never been tested.
|
|
63
|
+
- Treat a gap between what an instrument says it checks and what it actually matches as a defect in the instrument, not as a documented limit. A recorded blind spot buys trust only when everything outside it is genuinely covered.
|
|
64
|
+
- Measure the product, not the harness. A recorded baseline that counts something about its own fixture is not evidence about the shipped surface, however often a guide quotes it.
|
|
65
|
+
- Adopt an instrument that settled a claim as a test before accepting the work it settled. The probe that proved a fix, carrying the control that proved the probe, is that fix's regression guard. A verification that runs once is a rehearsal, not a gate.
|
|
66
|
+
|
|
67
|
+
### Rounds and verdicts
|
|
68
|
+
|
|
69
|
+
- Treat an all-confirmed round as a legitimate result, and put the brief on trial rather than the subject. Re-read the claims and ask whether any could have been falsified by evidence the round actually had. If none could, the claims were descriptive and the round proved nothing — sharpen them and re-run. If they could have been and were not, the pass stands.
|
|
70
|
+
- Name the claims you could not break either way, so the next round knows what has already been attacked.
|
|
71
|
+
- Never tell an auditor that a clean round means it did not try. That instructs it to manufacture a finding, and a manufactured finding costs a fix unit, an argument, and the credibility of the true findings beside it.
|
|
72
|
+
- Treat a repaired claim as a new claim, not a settled one. Re-ask it at every entry point that reaches the same rule, not only the door the defect arrived through. The engine that wrote the fix is least able to see this, because re-verifying where the fix is feels like verifying the fix.
|
|
73
|
+
- Let reachability bound the fix. A defect reachable through the package's own shipped code or a documented extension seam falsifies its claim and is repaired now.
|
|
74
|
+
- Document the obligation instead when a defect is reachable only through a hypothetical foreign implementation of a contract this package publishes. State it on the interface that owns it and prove the documentation. Do not build coordination machinery against a requirement nobody wrote down. Attacks are unlimited; reachable ones are not, and only the reachable set is a work list.
|
|
75
|
+
- **Three rounds at one seam is the budget.** Repeated rounds against one seam are evidence about the design, not evidence of diligence. At the third round the next unit is a ruling — on the threat model, the mechanism, or the boundary — taken with the same adversarial pass a design gets, not a fourth repair.
|
|
76
|
+
- Write the round count down when the seam opens, so it is a fact rather than a feeling. A seam that has consumed more rounds than the rest of the matrix combined has already answered the question.
|
|
77
|
+
- Give every behavioural audit the means to run its attacks. An auditor that cannot execute cannot falsify a behavioural claim: it returns derivations, and a derivation reads exactly like a verdict while being a different thing — it will confirm a claim one probe would break. Treat a report with no executed evidence as a review of the source, and label it as such.
|
|
33
78
|
|
|
34
79
|
## Ecosystem reuse
|
|
35
80
|
|
|
36
|
-
The root laws on inspecting declared `@orkestrel/*` capabilities, reusing a matching primitive, and updating every consumer without shims bind here without restatement.
|
|
81
|
+
The root laws on inspecting declared `@orkestrel/*` capabilities, reusing a matching primitive, and updating every consumer without shims bind here without restatement. This file adds the judgment calls:
|
|
37
82
|
|
|
38
|
-
- Prove the semantic difference before keeping a local variant
|
|
39
|
-
-
|
|
83
|
+
- Prove the semantic difference before keeping a local variant. Similar names are not evidence of different behavior.
|
|
84
|
+
- Treat downstream friction as valid evidence of a reusable upstream defect, not as automatic proof. Fix the lowest package that owns the general mechanism and keep product policy downstream.
|
|
40
85
|
- Never re-export a dependency's symbol to soften a consumer's import.
|
|
41
86
|
|
|
42
87
|
## Production hardening
|
|
43
88
|
|
|
44
|
-
- Translate
|
|
89
|
+
- Translate "enterprise-grade" or "production-ready" into an explicit risk and seam matrix covering applicable inputs, states, failures, cleanup, cancellation, concurrency, resource ownership, hostile boundaries, environment isolation, serialization and restore, and package consumption.
|
|
90
|
+
- Grade that matrix on coverage, not optimization: whether every applicable seam exists, works, and stays proven. Do not grade on how many further interleavings can be invented against the one seam already proven. A surface polished past its row buys less than the next uncovered seam would have.
|
|
45
91
|
- Test observable invariants at each applicable seam with real implementations.
|
|
46
|
-
- Use dedicated real-service projects for external model
|
|
47
|
-
- Audit test discovery, counts, skipped
|
|
92
|
+
- Use dedicated real-service projects for external model or service behavior. Require readiness and tune each request to the smallest robust proof.
|
|
93
|
+
- Audit test discovery, counts, skipped and todo tests, cleanup, and assertion adequacy. Passing discovered tests alone is insufficient.
|
|
48
94
|
- Inspect public exports, declarations, supported runtime targets, and generated outputs.
|
|
49
|
-
-
|
|
95
|
+
- Treat a claim that a surface works with an external client as unproven until one representative real client of that class has driven it end to end. Protocol tests prove the protocol, not the integration.
|
|
50
96
|
- Add an independent adversarial review for security, destructive paths, concurrency, protocols, or untrusted external input.
|
|
51
97
|
|
|
52
98
|
## Completion
|
|
53
99
|
|
|
54
|
-
The root completion law — finish every in-scope capability now, leave no TODO, deferral, or hidden follow-up, and run the applicable repository skill for comprehensive work — binds here without restatement.
|
|
100
|
+
The root completion law — finish every in-scope capability now, leave no TODO, deferral, or hidden follow-up, and run the applicable repository skill for comprehensive work — binds here without restatement. This file adds three obligations:
|
|
55
101
|
|
|
56
|
-
- Perform a final centralization
|
|
57
|
-
-
|
|
102
|
+
- Perform a final centralization, wrapper, test-helper, and text-integrity sweep after implementation and before gates.
|
|
103
|
+
- Produce local quality gates and relevant output inspection as required evidence.
|
|
104
|
+
- Stop once the enumerated scope is closed and those gates are green. Stopping there is correct, and the next scope is the deliverable. A further pass over the same surface requires a new instruction from the user, not an auditor's remaining appetite. Depth is owed to what the scope names, not to what an engine can still imagine about it.
|
|
@@ -35,7 +35,7 @@ SCSS mirrors TypeScript centralization. Concrete token prefixes are project-spec
|
|
|
35
35
|
|
|
36
36
|
## Prohibitions
|
|
37
37
|
|
|
38
|
-
- Verify every treatment against the shipped resolved cascade
|
|
38
|
+
- Verify every treatment against the shipped resolved cascade before accepting it: the compiled output plus the stylesheet of every dependency the consumer loads. A dependency's own default rules decide what a bare element renders as — not documentation, and not memory.
|
|
39
39
|
- Check `_tokens.scss` before inventing a token.
|
|
40
40
|
- Put global tokens in `_tokens.scss`; put truly component-scoped custom properties on the component selector.
|
|
41
41
|
- Never bury tokens in unrelated partials.
|
|
@@ -11,13 +11,14 @@ paths:
|
|
|
11
11
|
## Test contract
|
|
12
12
|
|
|
13
13
|
- Mirror source/application structure:
|
|
14
|
-
`tests/{src,app}/[environment]/[domain]/[
|
|
14
|
+
`tests/{src,app}/[environment]/[domain]/[source].test.ts`.
|
|
15
15
|
- Prefer test filenames matching entrypoints: `index.test.ts` for `index.ts`, `main.test.ts` for `main.ts`.
|
|
16
16
|
- Tests are deterministic: identical inputs produce identical results.
|
|
17
17
|
- Keep default suites fast: timers normally use 10–50 ms and tests make no network calls.
|
|
18
18
|
- Use real implementations and small scenarios. Never use mocks, behavioral fakes, module replacement, or framework spies for project-owned or integrated behavior.
|
|
19
19
|
- Use recorders for calls/events, temporary resources for stateful boundaries, protocol-faithful fixture servers for deterministic network peers, and the real external service when its behavior is the claim.
|
|
20
|
-
- Prefer inert customizable data
|
|
20
|
+
- Prefer inert customizable data and input stubs.
|
|
21
|
+
- Allow a scripted boundary stub only when it implements the real interface or protocol minimally, to drive the system under test. It never reimplements project-owned behavior and never stands in for the integration being claimed.
|
|
21
22
|
- Cover happy paths, error paths, empty input, boundary values, `NaN`, positive/negative zero, cycles, and Map/Set order where relevant.
|
|
22
23
|
- Test observable behavior, not implementation details.
|
|
23
24
|
- A regression test records the exact command and its failing count before the fix, and the same command's passing count after.
|
|
@@ -115,11 +116,16 @@ Keep Vitest/provider configuration minimal:
|
|
|
115
116
|
|
|
116
117
|
Before accepting that a behavior cannot be tested, look for the seam that would make it testable.
|
|
117
118
|
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
119
|
+
- Treat a collaborator reached through a hard-coded global — a stream, a clock source, a spawn, a fetch — as a missing injection point, not an untestable truth.
|
|
120
|
+
- An injected collaborator with a real minimal implementation is a sanctioned boundary stub, not a mock of project-owned behavior.
|
|
121
|
+
- Add the seam rather than shipping the gap whenever the design would welcome it anyway, and whenever a sibling collaborator is already injected.
|
|
122
|
+
- Record a genuinely irreducible gap where a reader meets it: what is unproven, why it cannot be driven, and what would change that. A silent untested guard reads exactly like a tested one.
|
|
121
123
|
|
|
122
|
-
Coverage
|
|
124
|
+
Coverage rules:
|
|
125
|
+
|
|
126
|
+
- Read a coverage report as a discovery input, never as evidence of proof. It answers one cheap mechanical question — which code no test executed — and that reliably finds forgotten branches and rules nothing calls.
|
|
127
|
+
- Never cite coverage as the adequacy audit's result. It cannot tell you whether an executed line is asserted, so a fully covered file can still be entirely unproven.
|
|
128
|
+
- Never let a percentage become the target.
|
|
123
129
|
|
|
124
130
|
## Discovery and adequacy audit
|
|
125
131
|
|
|
@@ -63,7 +63,7 @@ type Result<T, E = Error> = Success<T> | Failure<E>
|
|
|
63
63
|
|
|
64
64
|
## Comments and API documentation
|
|
65
65
|
|
|
66
|
-
- Comments explain why, never restate what self-explanatory code does.
|
|
66
|
+
- Comments explain why, never restate what self-explanatory code does. The Writing rules in `AGENTS.md` govern their prose.
|
|
67
67
|
- Every public export has complete TSDoc: description, `@param`, `@returns`, and `@example` where applicable.
|
|
68
68
|
- Document an options object as one `@param`; describe its short fields under `@remarks`.
|
|
69
69
|
- Private methods and overload-specific notes use single-line `//` comments, not public TSDoc.
|
|
@@ -30,8 +30,8 @@ Use only the environments a project needs, and keep the root dependency model in
|
|
|
30
30
|
| `configs/` | Thin target wrappers around root configs |
|
|
31
31
|
|
|
32
32
|
- Dependency direction is the root project model in `AGENTS.md` and is not restated here; this file governs where the environments live and how they are configured.
|
|
33
|
-
- Typical browser-app domains: `components/`, `pages/`, `composables
|
|
34
|
-
- Typical server-app domains: `handlers
|
|
33
|
+
- Typical browser-app domains: `components/`, `pages/`, `composables/`, `controllers/`, `services/`, `stores/`.
|
|
34
|
+
- Typical server-app domains: `handlers.ts`, `middlewares.ts`, `routes.ts`.
|
|
35
35
|
- `src/styles/index.ts` is a side-effect entry importing `./index.scss`.
|
|
36
36
|
|
|
37
37
|
## Aliases
|
|
@@ -127,7 +127,10 @@ then runs the configured scoped checks that prove environment isolation.
|
|
|
127
127
|
| `src:server`, `app:server` | `["ESNext"]` | `["node"]` | Node; no DOM |
|
|
128
128
|
| `src:styles` | `["ESNext"]` | `["vite/client"]` | Vite SCSS module declaration only |
|
|
129
129
|
|
|
130
|
-
Strict core is load-bearing
|
|
130
|
+
Strict core is load-bearing:
|
|
131
|
+
|
|
132
|
+
- Put a host-dependent helper in its host environment. A `generateId` reading `node:crypto` belongs in server, not core.
|
|
133
|
+
- Core declares `WebWorker` to widen the WHATWG interop surface, not to admit a worker host. Policy fences these worker-only globals out of core sources: `name`, `onrtctransform`, `close`, `postMessage`, `dispatchEvent`, `location`, `onerror`, `onlanguagechange`, `onoffline`, `ononline`, `onrejectionhandled`, `onunhandledrejection`, `self`, `importScripts`, `fonts`, `caches`, `crossOriginIsolated`, `indexedDB`, `isSecureContext`, `origin`, `scheduler`, `createImageBitmap`, `reportError`, `cancelAnimationFrame`, `requestAnimationFrame`, `onmessage`, `onmessageerror`, `addEventListener`, `removeEventListener`.
|
|
131
134
|
|
|
132
135
|
Build/check config alignment:
|
|
133
136
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: orkestrel-falsify
|
|
3
|
+
description: Run an adversarial audit round against work that already looks finished — write the subject as numbered falsifiable claims, dispatch independent auditors instructed to break them rather than confirm them, reconcile their evidence, and rule. Use before accepting a fix round, before a version bump or publication, when green gates are the only evidence a change works, when a defect has recurred across rounds, or whenever a review would otherwise read a diff and agree with it.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Load the canonical workflow
|
|
7
|
+
|
|
8
|
+
Read `.agents/skills/orkestrel-falsify/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.
|
|
@@ -6,14 +6,23 @@ sandbox_mode = "read-only"
|
|
|
6
6
|
developer_instructions = """
|
|
7
7
|
Read AGENTS.md, applicable rules, the dispatch-named skill and references, the
|
|
8
8
|
governing guide/spec, and the exact scope. For design, take the same brief as Opus
|
|
9
|
-
independently and argue what contracts, evidence, and constraints permit.
|
|
9
|
+
independently and argue what contracts, evidence, and constraints permit.
|
|
10
|
+
|
|
11
|
+
You hold the objective lane by default. When the Claude CLI is dark the dispatch may
|
|
12
|
+
assign you the subjective lane instead — shape, taste, naming, ergonomics, and design
|
|
13
|
+
fit. Hold whichever perspective the dispatch names, in full, and say which one you
|
|
14
|
+
held. Do not drift back to the objective case because it is your usual one.
|
|
15
|
+
|
|
16
|
+
For audit,
|
|
10
17
|
read the actual diff and examine correctness, security, concurrency, failure modes,
|
|
11
18
|
dependency reuse, boundary behavior, tests, cleanup, and guide parity. Require
|
|
12
19
|
file:line evidence and drop unsupported claims. When the brief states its subject as
|
|
13
20
|
numbered falsifiable claims, attempt refutation rather than confirmation and return
|
|
14
|
-
each claim
|
|
15
|
-
|
|
16
|
-
|
|
21
|
+
each claim per the Falsification section of .claude/rules/quality.md. When the
|
|
22
|
+
dispatch names a skill that fixes the verdict shape, return that shape and its
|
|
23
|
+
single terminal line — it may carry values beyond CONFIRMED and BROKEN, and a claim
|
|
24
|
+
you cannot decide belongs in the one it provides rather than being forced into
|
|
25
|
+
BROKEN. For a rendered or externally driven
|
|
17
26
|
surface, the supplied capture portfolio is primary evidence and source is
|
|
18
27
|
corroboration; mark a claim the portfolio cannot show NOT-EVIDENCED rather than
|
|
19
28
|
inferring it from source. Never edit, implement, reconcile, accept, or spawn. Return
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name = "checker"
|
|
2
2
|
description = "Fast read-only mechanical conformance audit against acceptance criteria, rules, scope, and guide parity."
|
|
3
|
-
model = "gpt-5.6-
|
|
3
|
+
model = "gpt-5.6-luna"
|
|
4
4
|
model_reasoning_effort = "medium"
|
|
5
5
|
sandbox_mode = "read-only"
|
|
6
6
|
developer_instructions = """
|
|
@@ -6,7 +6,8 @@ sandbox_mode = "read-only"
|
|
|
6
6
|
developer_instructions = """
|
|
7
7
|
Act only as a cheap bridge to Cursor Grok. Read AGENTS.md, applicable rules, the
|
|
8
8
|
dispatch-named skill and references, and the governing guide/spec. Require a bounded
|
|
9
|
-
question and scope. Resolve the exact model from CURSOR_GROK_MODEL
|
|
9
|
+
question and scope. Resolve the exact model from CURSOR_GROK_MODEL, currently
|
|
10
|
+
cursor-grok-4.5-high; re-read `agent models` if it fails and never guess or
|
|
10
11
|
substitute. Invoke Cursor in ask mode only for a short bounded ask:
|
|
11
12
|
agent -p --trust --mode=ask --model "$CURSOR_GROK_MODEL" "<brief>"
|
|
12
13
|
For longer work do not launch anything: return the brief path, the exact resolved
|
|
@@ -23,5 +23,5 @@ forbids dependency installation, commits, pushes, publishing, credentials,
|
|
|
23
23
|
destructive commands, shared-file edits, and tree-wide mutating gates. After it
|
|
24
24
|
returns, verify with git status, the diff, and scoped validation, then return
|
|
25
25
|
touched files, diffstat, validation evidence, and deviation state labeled
|
|
26
|
-
untrusted. Never
|
|
26
|
+
untrusted. Never route orchestration or acceptance across this bridge. Never read credentials or spawn another agent.
|
|
27
27
|
"""
|
|
@@ -18,7 +18,7 @@ design pass itself and record that Opus was unavailable for this round.
|
|
|
18
18
|
The brief asks for coherent API shape, vocabulary, ergonomics, at most two
|
|
19
19
|
alternatives, bounded units that each name their role and engine, subjective tensions,
|
|
20
20
|
and risks. It forbids edits, commands, reconciliation with Sol, orchestration, and
|
|
21
|
-
acceptance. Never
|
|
21
|
+
acceptance. Never route orchestration or acceptance across this bridge,
|
|
22
22
|
read credentials, edit, or spawn. Return the Opus proposal labeled untrusted plus
|
|
23
23
|
any CLI/auth deviation.
|
|
24
24
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name = "researcher"
|
|
2
|
-
description = "
|
|
3
|
-
model = "gpt-5.6-
|
|
2
|
+
description = "Luna read-only primary-source research: external capabilities, upstream comparisons, installed dependency surfaces, capability/defect matrices with citations."
|
|
3
|
+
model = "gpt-5.6-luna"
|
|
4
4
|
model_reasoning_effort = "medium"
|
|
5
5
|
sandbox_mode = "read-only"
|
|
6
6
|
developer_instructions = """
|
|
@@ -20,6 +20,6 @@ tested by asking whether the shipped artifact still matches it, and anything not
|
|
|
20
20
|
settleable on subjective grounds to come back as an Analyst referral. For a rendered or externally
|
|
21
21
|
driven surface, require capture citations as primary evidence and the verdict shape
|
|
22
22
|
of the dispatch-named skill. Forbid edits, commands, orchestration, reconciliation,
|
|
23
|
-
and acceptance. Never
|
|
23
|
+
and acceptance. Never route orchestration or acceptance across this bridge, read credentials,
|
|
24
24
|
edit, or spawn. Return the Opus audit labeled untrusted plus any CLI/auth deviation.
|
|
25
25
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name = "scout"
|
|
2
|
-
description = "
|
|
3
|
-
model = "gpt-5.6-
|
|
2
|
+
description = "Luna read-only repository reconnaissance: locate files, symbols, seams, and structures; return file:line pointers and shape summaries, never judgment."
|
|
3
|
+
model = "gpt-5.6-luna"
|
|
4
4
|
model_reasoning_effort = "low"
|
|
5
5
|
sandbox_mode = "read-only"
|
|
6
6
|
developer_instructions = """
|