clearotron 0.3.2-beta.8 → 0.3.2-beta.9
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/.env.example +34 -3
- package/CONTRIBUTING.md +8 -8
- package/INSTALL.md +6 -6
- package/SECURITY.md +3 -3
- package/bin/brandowner.mjs +3 -3
- package/bin/framework-preflight.mjs +1 -1
- package/bin/start.mjs +18 -4
- package/build-info.json +2 -2
- package/docs/DELIVERY.md +2 -1
- package/docs/INTAKE.md +1 -1
- package/docs/ONBOARDING.md +1 -1
- package/docs/architecture/03-run-lifecycle.md +6 -6
- package/docs/architecture/04-configuration-reference.md +6 -3
- package/docs/architecture/05-config-governance.md +6 -1
- package/docs/architecture/05-customer-profiles.md +2 -2
- package/docs/architecture/06-operations-runbook.md +3 -3
- package/docs/architecture/08-development-guide.md +6 -6
- package/docs/configuration.md +5 -5
- package/docs/decisions/0003-credential-model.md +1 -1
- package/docs/writing-standard.md +4 -0
- package/driver/CHANGELOG.md +48 -0
- package/driver/README.md +3 -3
- package/driver/binding-layers.mjs +1 -1
- package/driver/citation-census.json +3 -3
- package/driver/{prelim-variants-record.mjs → clearance-variants-record.mjs} +24 -24
- package/driver/common-law-receipts.mjs +2 -2
- package/driver/company-bundle.mjs +3 -3
- package/driver/compose-read.mjs +8 -14
- package/driver/consumption-ledger.mjs +2 -2
- package/driver/contract-arm2-baseline.json +2 -3
- package/driver/contract-dictation-registry.mjs +19 -19
- package/driver/contract-e3-backlog.mjs +19 -19
- package/driver/contract-e3-baseline.json +14 -14
- package/driver/contract-vocabulary.mjs +24 -17
- package/driver/deliver-trigger.sh +16 -16
- package/driver/demo-container.mjs +3 -3
- package/driver/dev-portal.mjs +3 -3
- package/driver/disposition-call.mjs +1 -1
- package/driver/doubt-ledger.mjs +2 -2
- package/driver/drainer-identity.mjs +34 -8
- package/driver/driver.config.mjs +95 -45
- package/driver/engine/mcp/README.md +1 -1
- package/driver/engine/mcp/dispositions-server.mjs +3 -3
- package/driver/engine/mcp/gather-config.mjs +9 -9
- package/driver/engine/mcp/perplexity-server.mjs +2 -2
- package/driver/engine/mcp/recording-server.mjs +5 -5
- package/driver/enqueue-schema.mjs +6 -2
- package/driver/findings-model.mjs +5 -2
- package/driver/flag-snapshot.mjs +6 -3
- package/driver/form-neighbourhood.mjs +54 -7
- package/driver/framework.mjs +4 -4
- package/driver/gateway.mjs +12 -6
- package/driver/jx-lanes.mjs +2 -2
- package/driver/jx-units.mjs +1 -1
- package/driver/jx.mjs +30 -2
- package/driver/knockout-review-record.mjs +56 -4
- package/driver/known-conflicts.mjs +1 -1
- package/driver/named-band.mjs +1 -33
- package/driver/ordinary-words.mjs +51 -0
- package/driver/outbox-backoff.mjs +31 -16
- package/driver/package.json +1 -1
- package/driver/partial-payload-baseline.json +2 -2
- package/driver/phase0.mjs +3 -3
- package/driver/pipeline-knockout.mjs +5 -5
- package/driver/pipeline.mjs +206 -68
- package/driver/placement-form.mjs +77 -1
- package/driver/placement-model.mjs +1 -1
- package/driver/portal-report.mjs +92 -5
- package/driver/portal-service.mjs +34 -8
- package/driver/portal-upstream.mjs +1 -1
- package/driver/preserve-merge.mjs +3 -3
- package/driver/product-rows.mjs +2 -2
- package/driver/products.mjs +1 -1
- package/driver/profiles/README.md +3 -3
- package/driver/profiles/demo-brand-owner.json +2 -2
- package/driver/profiles.mjs +55 -17
- package/driver/progress.mjs +18 -8
- package/driver/provider-usage.mjs +8 -8
- package/driver/publish/index.mjs +110 -5
- package/driver/publish/knockout.mjs +29 -4
- package/driver/publish/pool-admin.mjs +1 -1
- package/driver/publish/publish-inputs.mjs +18 -2
- package/driver/publish/render-knockout.mjs +115 -24
- package/driver/publish/render.mjs +153 -34
- package/driver/publish/search-depth.mjs +133 -4
- package/driver/publish/templates/report.css +60 -3
- package/driver/publish/xlsx.mjs +8 -1
- package/driver/queue-order.mjs +2 -2
- package/driver/recording-agreement.mjs +1 -1
- package/driver/reference-score.mjs +1 -1
- package/driver/register-count.mjs +50 -5
- package/driver/register-coverage.mjs +67 -0
- package/driver/register-grant-vocabulary.mjs +1 -1
- package/driver/register-plan.mjs +19 -2
- package/driver/registry-fidelity.mjs +3 -3
- package/driver/repair-composers.mjs +1 -1
- package/driver/repair-contract.mjs +1 -1
- package/driver/replay-archive.mjs +6 -6
- package/driver/report-overview-record.mjs +2 -2
- package/driver/run-requirements.mjs +3 -3
- package/driver/runner.mjs +2 -2
- package/driver/scope-facts.mjs +20 -5
- package/driver/scope-ledger.mjs +5 -5
- package/driver/search-policy.mjs +22 -12
- package/driver/skills/README.md +15 -15
- package/driver/skills/blind-frame/SKILL.md +2 -2
- package/driver/skills/case-law-citation/SKILL.md +4 -4
- package/driver/skills/case-law-citation/sources/eurlex.md +1 -1
- package/driver/skills/{prelim-common-law → clearance-common-law}/SKILL.md +22 -22
- package/driver/skills/{prelim-common-law → clearance-common-law}/perplexity-prompts.md +1 -1
- package/driver/skills/{prelim-register → clearance-register}/SKILL.md +10 -10
- package/driver/skills/{prelim-register → clearance-register}/digest.md +2 -2
- package/driver/skills/{prelim-register → clearance-register}/providers/README.md +1 -1
- package/driver/skills/{prelim-register → clearance-register}/providers/clarivate.md +37 -35
- package/driver/skills/{prelim-register → clearance-register}/providers/corsearch.md +20 -11
- package/driver/skills/{prelim-register → clearance-register}/providers/signa.md +5 -5
- package/driver/skills/{prelim-register → clearance-register}/register-recipes.md +3 -3
- package/driver/skills/{prelim-register → clearance-register}/status-rules.md +2 -2
- package/driver/skills/{prelim-register → clearance-register}/stealth-filer-indicators.md +1 -1
- package/driver/skills/{prelim-register → clearance-register}/unit.md +2 -2
- package/driver/skills/{prelim-search → clearance-search}/SKILL.md +31 -31
- package/driver/skills/{prelim-search → clearance-search}/delivery-contract.md +1 -1
- package/driver/skills/{prelim-search → clearance-search}/phase2-execution.md +18 -18
- package/driver/skills/{prelim-search → clearance-search}/synthesis-rules.md +7 -7
- package/driver/skills/{prelim-variants → clearance-variants}/SKILL.md +18 -18
- package/driver/skills/{prelim-variants → clearance-variants}/transliteration-scripts.md +5 -5
- package/driver/skills/frame-diff/SKILL.md +1 -1
- package/driver/skills/knockout-assess/SKILL.md +10 -7
- package/driver/skills/matter-frame/SKILL.md +3 -3
- package/driver/skills/narrative-refutation/SKILL.md +9 -9
- package/driver/skills/placement-inquiry/SKILL.md +5 -5
- package/driver/stage-context.mjs +1 -1
- package/driver/stages-knockout.mjs +4 -4
- package/driver/stages.mjs +53 -53
- package/driver/status-snapshot.mjs +2 -2
- package/driver/suite-census.json +218 -92
- package/driver/surface-exit-verdict.mjs +58 -0
- package/driver/systemd/README.md +2 -2
- package/driver/systemd/clearotron-worker.service +1 -1
- package/driver/terminal-clamp.mjs +2 -0
- package/driver/usage-ledger.mjs +1 -1
- package/driver/variant-manifest-model.mjs +4 -4
- package/driver/verify-knockout.mjs +27 -0
- package/driver/verify.mjs +67 -6
- package/driver/whatif-queue.mjs +1 -1
- package/driver/wordlists/en.txt +63906 -0
- package/mcp-server/CHANGELOG.md +4 -0
- package/mcp-server/README.md +1 -1
- package/mcp-server/lib/README.md +1 -1
- package/mcp-server/lib/options.mjs +8 -7
- package/mcp-server/lib/plan.mjs +18 -2
- package/mcp-server/lib/runs.mjs +1 -1
- package/mcp-server/lib/usage.mjs +3 -3
- package/mcp-server/lib/whatif.mjs +1 -1
- package/mcp-server/package.json +1 -1
- package/mcp-server/server.mjs +3 -0
- package/package.json +12 -11
- package/portal-ui/dist/assets/{index-CVOIvdhc.css → index-CtvwLCti.css} +207 -3
- package/portal-ui/dist/assets/{index-6jzO9HiX.js → index-EVaSo5-g.js} +1459 -482
- package/portal-ui/dist/index.html +2 -2
- package/portal-ui/package.json +1 -1
- package/providers/README.md +1 -1
- package/providers/_shared/enumerate.mjs +6 -6
- package/providers/_shared/execute-plan.mjs +3 -3
- package/providers/_shared/ledger.mjs +119 -5
- package/providers/_shared/provider-text.mjs +2 -2
- package/providers/_shared/screen.mjs +2 -2
- package/providers/_shared/script-form.mjs +3 -3
- package/providers/_shared/territory-codes.mjs +23 -3
- package/providers/clarivate/README.md +1 -1
- package/providers/clarivate/src/capabilities.js +12 -12
- package/providers/clarivate/src/core.js +37 -43
- package/providers/corsearch/README.md +1 -1
- package/providers/corsearch/src/capabilities.js +5 -5
- package/providers/corsearch/src/core.js +3 -3
- package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/providers/perplexity/src/core.js +1 -1
- package/providers/signa/README.md +1 -1
- package/providers/signa/src/capabilities.js +42 -49
- package/providers/signa/src/core.js +106 -29
- package/providers/uspto-local/src/sync.js +1 -1
- package/scripts/README.md +1 -0
- package/scripts/ask-ai-render-check.mjs +127 -1
- package/scripts/authority-boundary-probe.mjs +4 -4
- package/scripts/backfill-started-at.mjs +2 -2
- package/scripts/census-merge-driver.mjs +33 -2
- package/scripts/citation-anchor-report.mjs +181 -0
- package/scripts/dead-names.mjs +1 -1
- package/scripts/deprecate-below.mjs +66 -8
- package/scripts/drain-preflight.mjs +1 -1
- package/scripts/e2e.mjs +174 -0
- package/scripts/env-audit.mjs +27 -0
- package/scripts/env-classify.mjs +20 -2
- package/scripts/freeze-example-run.mjs +20 -10
- package/scripts/live-surface-check.mjs +124 -41
- package/scripts/markdown-link-check.mjs +1 -1
- package/scripts/merge-shape-check.mjs +242 -0
- package/scripts/mint-names-in-force.mjs +5 -5
- package/scripts/mint-offered-territories.mjs +72 -0
- package/scripts/mint-public-residue.mjs +2 -2
- package/scripts/mint-reference-strip-backlog.mjs +2 -2
- package/scripts/mint-suite-census.mjs +75 -2
- package/scripts/mint-writing-standard-backlog.mjs +2 -2
- package/scripts/purge-runs.mjs +7 -7
- package/scripts/reconcile-runs.mjs +2 -2
- package/scripts/release-approve-parked.mjs +20 -2
- package/scripts/release-await-cut.mjs +120 -1
- package/scripts/release-note-required.mjs +76 -8
- package/scripts/report-header-render-check.mjs +164 -0
- package/shared/brand.mjs +27 -0
- package/shared/connect-clients.mjs +39 -11
- package/shared/env-aliases.mjs +1 -1
- package/shared/identifier-scan.mjs +65 -9
- package/shared/identifier-sentinels.mjs +22 -0
- package/shared/names-in-force.mjs +3 -1
- package/shared/offered-territories.json +738 -0
- package/shared/pre-rename-spellings.mjs +53 -0
- package/shared/reference-guard-classes.mjs +40 -2
- package/shared/stdio-connect.mjs +39 -4
- package/shared/tree-commit.mjs +48 -0
- /package/driver/skills/{prelim-register → clearance-register}/providers/euipo.md +0 -0
- /package/driver/skills/{prelim-register → clearance-register}/providers/free-tier.md +0 -0
- /package/driver/skills/{prelim-register → clearance-register}/providers/uspto-local.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/field-doctrine-pharma.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/firm-wide-reasoning.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/report-prose.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/risk-framework-demo.manifest.json +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/risk-framework-demo.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/risk-framework-triage.manifest.json +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/risk-framework-triage.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/risk-framework.manifest.json +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/risk-framework.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/template-formatting.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/templates/email/generic.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/templates/search-request-form.html +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/worked-examples-demo.md +0 -0
- /package/driver/skills/{prelim-search → clearance-search}/worked-examples.md +0 -0
package/driver/stages.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
|
|
3
3
|
// stages.mjs — the SINGLE source of truth for per-stage {agent, model, thinking, timeout, skillReads,
|
|
4
4
|
// output file, validator, message}. Centralizing this fixes the live cross-file tier drift
|
|
5
|
-
// (
|
|
5
|
+
// (clearance-register/SKILL.md vs clearance-search/SKILL.md vs phase2-execution.md vs narrative-refutation/SKILL.md).
|
|
6
6
|
//
|
|
7
7
|
// Tiers: the three register SWEEP axes are sonnet (Haiku 4.5 rejects `adaptive`); saturation-probe stays
|
|
8
8
|
// haiku (count-only); common-law stays haiku/low. Judgment = opus. Phase-4 resourcing: the six
|
|
@@ -451,7 +451,7 @@ export function axisTier(axis) {
|
|
|
451
451
|
|
|
452
452
|
// Active register provider — the single source of truth (driver.config.REGISTER_PROVIDER; flip + redeploy
|
|
453
453
|
// to switch). ONE provider per run, never both. The provider-specific tool names + operator vocabulary
|
|
454
|
-
// live in skills/
|
|
454
|
+
// live in skills/clearance-register/providers/<provider>.md, which the register spawns are told to read.
|
|
455
455
|
const PROVIDER = REGISTER_PROVIDER;
|
|
456
456
|
// THE FOURTH SILENT FALLBACK, and the only one that fabricates rather than defaults. An id with
|
|
457
457
|
// no PROVIDERS entry used to synthesise a meta pointing at `providers/<whatever>.md`, and stages.mjs
|
|
@@ -852,7 +852,7 @@ const inputsForReference = (paths) =>
|
|
|
852
852
|
// opened this: 345 B were cut from matter-frame's watchlist-reference.md and the ratchet did not move.
|
|
853
853
|
//
|
|
854
854
|
// MEASURED, over the SKILL.md files a stage actually reads: 9 companions across 4 skills, 101,077 B,
|
|
855
|
-
// none of it counted. `
|
|
855
|
+
// none of it counted. `clearance-register` alone carries 77,994 B of it.
|
|
856
856
|
//
|
|
857
857
|
// ── WHY A SECOND LIST RATHER THAN MORE `skillReads` ─────────────────────────────────────────────────
|
|
858
858
|
//
|
|
@@ -866,13 +866,13 @@ const inputsForReference = (paths) =>
|
|
|
866
866
|
// exactly one consumer: driver/test/skill-instruction-load.mjs.
|
|
867
867
|
//
|
|
868
868
|
// DECLARED PER SKILL, NOT PER STAGE, because that is the shape of the fact. Two stages read
|
|
869
|
-
//
|
|
869
|
+
// clearance-register/SKILL.md and both therefore carry its companions; declaring the pair twice is how the
|
|
870
870
|
// two drift. A stage picks these up by reading the SKILL.md they belong to, which is also what makes the
|
|
871
871
|
// guard in skill-instruction-load.test.mjs able to check the list against the documents themselves.
|
|
872
872
|
export const SKILL_COMPANIONS = Object.freeze({
|
|
873
873
|
"matter-frame": Object.freeze(["watchlist-reference.md"]),
|
|
874
|
-
"
|
|
875
|
-
"
|
|
874
|
+
"clearance-common-law": Object.freeze(["perplexity-prompts.md"]),
|
|
875
|
+
"clearance-register": Object.freeze([
|
|
876
876
|
"register-recipes.md", "status-rules.md", "stealth-filer-indicators.md",
|
|
877
877
|
"providers/corsearch.md", "providers/clarivate.md",
|
|
878
878
|
]),
|
|
@@ -882,8 +882,8 @@ export const SKILL_COMPANIONS = Object.freeze({
|
|
|
882
882
|
/**
|
|
883
883
|
* The companion documents a dispatch's SKILL.md points its seat at — measured, never emitted.
|
|
884
884
|
*
|
|
885
|
-
* A CROSS-SKILL LINK IS NOT ONE OF THESE. `
|
|
886
|
-
* `
|
|
885
|
+
* A CROSS-SKILL LINK IS NOT ONE OF THESE. `clearance-variants/SKILL.md` cites a step of
|
|
886
|
+
* `clearance-register/SKILL.md`, and clearance-register's own stages already measure that file: counting it
|
|
887
887
|
* here too would inflate the ratchet with 28,535 B nobody dispatched twice, and a ratchet that moves for
|
|
888
888
|
* reasons no stage can be traced to is worse than one that under-counts.
|
|
889
889
|
*/
|
|
@@ -990,23 +990,23 @@ export const pharmaMatter = (job) =>
|
|
|
990
990
|
// EXPLICITLY in all three resolvers rather than left to a relative link the agent may or may not follow.
|
|
991
991
|
// The reach is pinned by report-prose-standard.test.mjs, because nothing FAILS if these rules never
|
|
992
992
|
// arrive: the stage simply writes to model defaults and every other test still passes.
|
|
993
|
-
const REPORT_PROSE = "skills/
|
|
993
|
+
const REPORT_PROSE = "skills/clearance-search/report-prose.md";
|
|
994
994
|
// THE SPINE RIDES WITH synthesis-rules.md EVERYWHERE IT IS READ. 412 lines MOVED
|
|
995
995
|
// out of that file into `firm-wide-reasoning.md` so the knockout lane can read the same copy instead of
|
|
996
996
|
// carrying its own retired transcription. A move, not a copy — which means every stage that read
|
|
997
997
|
// synthesis-rules.md for that material must now read both, or it silently LOSES doctrine it has had all
|
|
998
998
|
// along. That is the one way this extraction could do harm, so the two lists are edited together and
|
|
999
999
|
// the pairing is stated rather than left to be noticed.
|
|
1000
|
-
const SPINE_DOC = "skills/
|
|
1000
|
+
const SPINE_DOC = "skills/clearance-search/firm-wide-reasoning.md";
|
|
1001
1001
|
const synthesisSkillReads = ({ profile, job }) => [
|
|
1002
|
-
"skills/
|
|
1003
|
-
...(pharmaMatter(job) ? ["skills/
|
|
1002
|
+
"skills/clearance-search/synthesis-rules.md", SPINE_DOC, frameworkFor(profile), workedExamplesFor(profile),
|
|
1003
|
+
...(pharmaMatter(job) ? ["skills/clearance-search/field-doctrine-pharma.md"] : []),
|
|
1004
1004
|
REPORT_PROSE,
|
|
1005
1005
|
];
|
|
1006
1006
|
const reportOverviewSkillReads = ({ profile }) =>
|
|
1007
|
-
["skills/
|
|
1007
|
+
["skills/clearance-search/synthesis-rules.md", SPINE_DOC, frameworkFor(profile), "skills/clearance-search/delivery-contract.md", REPORT_PROSE];
|
|
1008
1008
|
const reportCardSkillReads = ({ profile }) =>
|
|
1009
|
-
["skills/
|
|
1009
|
+
["skills/clearance-search/delivery-contract.md", frameworkFor(profile), REPORT_PROSE];
|
|
1010
1010
|
|
|
1011
1011
|
// spec-48 C1 — the territories whose legal system scopes the marketplace-risk directive, and whose
|
|
1012
1012
|
// registration scripts set the script floor. THE SHARED LADDER (effective-scope.mjs resolveTerritories),
|
|
@@ -1072,7 +1072,7 @@ export const writeReturn = (out, checked = []) => {
|
|
|
1072
1072
|
};
|
|
1073
1073
|
|
|
1074
1074
|
// Doubt hand-off (2026-07-22 — the copper-gantry defect): a gather layer that identifies a check it
|
|
1075
|
-
// CANNOT perform itself used to bury that need in free prose ("requires
|
|
1075
|
+
// CANNOT perform itself used to bury that need in free prose ("requires clearance-register layer
|
|
1076
1076
|
// cross-check…") that nothing downstream parses — the question died unasked and the contradiction it
|
|
1077
1077
|
// would have resolved shipped unresolved. This one dictated line is the fix: the driver parses EXACTLY
|
|
1078
1078
|
// this shape (doubt-ledger.mjs mintCrossCheckDoubts), mints it as a doubt, stitches it to whatever
|
|
@@ -1203,7 +1203,7 @@ export const VARIANT_CATEGORY_BRIEF =
|
|
|
1203
1203
|
//
|
|
1204
1204
|
// `tokens` lists the validator failure tokens that SPEAK ABOUT that element. PER STAGE, never global:
|
|
1205
1205
|
// `too_short` and `missing` come from the shared nonEmpty()/needs() helpers (verify.mjs:123-133) and are
|
|
1206
|
-
// legitimately owned by DIFFERENT elements in matter-frame,
|
|
1206
|
+
// legitimately owned by DIFFERENT elements in matter-frame, clearance-variants and frame-diff. A global
|
|
1207
1207
|
// token→element map sees several owners for one token and "fixes" a partition that was never violated.
|
|
1208
1208
|
//
|
|
1209
1209
|
// An EMPTY `tokens` array is a finding, not an omission: it says no validator polices that element. 139
|
|
@@ -1223,7 +1223,7 @@ export const STAGES = {
|
|
|
1223
1223
|
// The output contract THIS prompt holds the frame to — the dictated "Meaning angles:" line below.
|
|
1224
1224
|
// Recorded by the driver at DISPATCH (pipeline.mjs recordStageContract → _driver/stage-contracts.json)
|
|
1225
1225
|
// and the ONLY thing validators.matterContext gates the line requirement on — the romanisation-floor
|
|
1226
|
-
// pattern (
|
|
1226
|
+
// pattern (clearance-variants below). It is evidence of PROMPT VINTAGE, never of run freshness: a
|
|
1227
1227
|
// completed legacy frame is re-validated (crash/parked-resume skip, replay-archive) without the
|
|
1228
1228
|
// marker and keeps passing under the rules it was minted under. The instructed-scope sentinel proved
|
|
1229
1229
|
// the wrong thing here exactly as it did for the romanisation floor (present on every current-era
|
|
@@ -1385,9 +1385,9 @@ export const STAGES = {
|
|
|
1385
1385
|
),
|
|
1386
1386
|
},
|
|
1387
1387
|
|
|
1388
|
-
"
|
|
1388
|
+
"clearance-variants": {
|
|
1389
1389
|
model: "opus", thinking: "high", timeoutSec: 600, stallSec: 450,
|
|
1390
|
-
skillReads: ["skills/
|
|
1390
|
+
skillReads: ["skills/clearance-variants/SKILL.md", "skills/clearance-variants/transliteration-scripts.md"],
|
|
1391
1391
|
out: (P) => P.variantManifest,
|
|
1392
1392
|
validate: validators.variantManifest,
|
|
1393
1393
|
// The output contract THIS prompt holds the artifact to — recorded by the driver at DISPATCH
|
|
@@ -1482,7 +1482,7 @@ export const STAGES = {
|
|
|
1482
1482
|
},
|
|
1483
1483
|
"Famous-mark flags per element + famous_mark_calls_needed[]": {
|
|
1484
1484
|
class: "judgment", tokens: [],
|
|
1485
|
-
why: "recognising that an element is also a band, a celebrity or a famous brand is the judgment; but the HAND-OFF is prose that makes
|
|
1485
|
+
why: "recognising that an element is also a band, a celebrity or a famous brand is the judgment; but the HAND-OFF is prose that makes clearance-common-law fire a dedicated Perplexity call, with no structured slot and no token — the same shape as the CROSS-CHECK line #850 classed M for its line shape",
|
|
1486
1486
|
},
|
|
1487
1487
|
"Scope statement — 2-4 sentences opening the deliverable narrative, with the class scope reasoned and advisory additions marked": {
|
|
1488
1488
|
class: "judgment", tokens: [],
|
|
@@ -1505,7 +1505,7 @@ export const STAGES = {
|
|
|
1505
1505
|
// deleted was a mechanism no surface could carry, and `search_floor` is a surface.
|
|
1506
1506
|
"search_floor — the AXES this mark's search floor obliges, which a coverage-limited row may not demote": {
|
|
1507
1507
|
class: "judgment", tokens: ["variantmodel_search_floor_invalid"],
|
|
1508
|
-
why: "A PER-MARK call, not a statable rule, so it stays judgment: which axes are this mark's search floor depends on where conflict concentrates for THIS mark — the same read the archetype and risk-theory rows carry. Code applies and audits the floor; it does not choose it. Designated HERE and judged by
|
|
1508
|
+
why: "A PER-MARK call, not a statable rule, so it stays judgment: which axes are this mark's search floor depends on where conflict concentrates for THIS mark — the same read the archetype and risk-theory rows carry. Code applies and audits the floor; it does not choose it. Designated HERE and judged by clearance-register's coverage row, which is the whole mechanism — a floor field on the coverage row itself would let the seat that missed the work decide the work was never obliged. The token covers the shape (an array of REGISTER_AXES); WHICH axes is the judgment, and nothing polices that. Do not confuse it with the FORM floor, which IS code doctrine (scope-ledger.mjs `radiusFor`) and generates its axes mechanically.",
|
|
1509
1509
|
},
|
|
1510
1510
|
"Per-jurisdiction sub-queries": {
|
|
1511
1511
|
class: "judgment", tokens: [],
|
|
@@ -1528,7 +1528,7 @@ export const STAGES = {
|
|
|
1528
1528
|
// Force-load the companion: the everyday-first meaning-SET rule lives there; leaving it to a prose
|
|
1529
1529
|
// pointer let it silently revert run-to-run (quartz-vault emitted the set, marble-foundry dropped it
|
|
1530
1530
|
// to one technical guess with no skill change). Force-loaded, it can't be skipped under output pressure.
|
|
1531
|
-
reads(["skills/
|
|
1531
|
+
reads(["skills/clearance-variants/SKILL.md", "skills/clearance-variants/transliteration-scripts.md"]),
|
|
1532
1532
|
// lever 3 — the manifest rung. Empty on a one-country run; `lines` drops it.
|
|
1533
1533
|
variantRungDirective(depth),
|
|
1534
1534
|
`Read the matter frame: ${P.matterContext}.`,
|
|
@@ -1544,7 +1544,7 @@ export const STAGES = {
|
|
|
1544
1544
|
// strict-parsed what came back. The seat hand-formatted a structure the driver already validates,
|
|
1545
1545
|
// and O3c caught it doing `python3 -c` over its own JSON to check the formatting first.
|
|
1546
1546
|
//
|
|
1547
|
-
// The `
|
|
1547
|
+
// The `record_clearance_variants` schema IS that shape now, so the key-set and enum families stop being
|
|
1548
1548
|
// reachable from a typed call rather than merely being caught after the file is written.
|
|
1549
1549
|
//
|
|
1550
1550
|
// WORTH KNOWING: the guard did NOT flag this sentence. Its write-order markers are the six
|
|
@@ -1585,7 +1585,7 @@ export const STAGES = {
|
|
|
1585
1585
|
// rule bans, and e2e has twice measured a seat obeying the prose while holding the tool.
|
|
1586
1586
|
//
|
|
1587
1587
|
// EACH FIELD CARRIES ITS OWN IMPERATIVE IN ITS OWN SENTENCE.
|
|
1588
|
-
`Hand the manifest back by calling the \`
|
|
1588
|
+
`Hand the manifest back by calling the \`record_clearance_variants\` tool. Send \`mark\` verbatim, \`dominant_element\`, and \`elements\` — one \`{value, kind}\` per token, kind from the closed set distinctive | common | saturated-common.`,
|
|
1589
1589
|
`Send \`variants\` — one \`{value, category, rationale, romanization}\` per search term, category from the closed set the skill names, and \`romanization\` on every non-Latin value and only on those.`,
|
|
1590
1590
|
`Send \`incumbent_classes\` and \`watchlist_owners\` where Step 5 names them, as arrays; omit or send empty where it does not.`,
|
|
1591
1591
|
// THE SCOPE LEDGER STOPS BEING A TABLE THE DRIVER RE-READS. It used to be dictated as markdown in
|
|
@@ -1607,7 +1607,7 @@ export const STAGES = {
|
|
|
1607
1607
|
// already carries the frame), it reads ONLY the raw instruction and re-derives the threat model cold across
|
|
1608
1608
|
// four layers, emitting a structured model. Runs IN PARALLEL with the gather (pipeline.mjs) — no tool calls,
|
|
1609
1609
|
// so it finishes inside the longest gather member's wall (zero added critical-path latency). NON-FATAL.
|
|
1610
|
-
// Opus: it is a PEER re-derivation of
|
|
1610
|
+
// Opus: it is a PEER re-derivation of clearance-variants/matter-frame (both opus) — a weaker tier cannot
|
|
1611
1611
|
// credibly out-imagine the frame; the independence is the input DIET (starvation), not a different family.
|
|
1612
1612
|
"blind-frame": {
|
|
1613
1613
|
model: "opus", thinking: "high", timeoutSec: 600, stallSec: 450,
|
|
@@ -1693,7 +1693,7 @@ export const STAGES = {
|
|
|
1693
1693
|
// The upstream fix for gather COST is still in-class scoping + the 600 enumerate ceiling; this wall just
|
|
1694
1694
|
// stops killing a gather that is legitimately working. Ship WITH the scoping/ceiling levers, not alone.
|
|
1695
1695
|
model: "haiku", thinking: "low", timeoutSec: 2250, stallSec: 1100,
|
|
1696
|
-
skillReads: ["skills/
|
|
1696
|
+
skillReads: ["skills/clearance-common-law/SKILL.md"],
|
|
1697
1697
|
out: (P) => P.commonLaw,
|
|
1698
1698
|
validate: validators.commonLaw,
|
|
1699
1699
|
// E1 — what this stage asks a model for, and what discharges each element. See THE STAGE-
|
|
@@ -1827,7 +1827,7 @@ export const STAGES = {
|
|
|
1827
1827
|
// truncation and the NOVA PULSE dropped-cell failures (no tier bump would fix the output ceiling).
|
|
1828
1828
|
if (gridSpecPath) {
|
|
1829
1829
|
return lines(
|
|
1830
|
-
reads(["skills/
|
|
1830
|
+
reads(["skills/clearance-common-law/SKILL.md"]),
|
|
1831
1831
|
`Inputs: variant manifest ${P.variantManifest}; matter frame ${P.matterContext}.`,
|
|
1832
1832
|
systemScope,
|
|
1833
1833
|
asksBlock,
|
|
@@ -1851,7 +1851,7 @@ export const STAGES = {
|
|
|
1851
1851
|
// truncated mid-matrix — ~14×7=98 cells/call is the proven-safe budget, scaled per profile).
|
|
1852
1852
|
const batch = profile?.batchSize ?? 14;
|
|
1853
1853
|
return lines(
|
|
1854
|
-
reads(["skills/
|
|
1854
|
+
reads(["skills/clearance-common-law/SKILL.md"]),
|
|
1855
1855
|
`Inputs: variant manifest ${P.variantManifest}; matter frame ${P.matterContext}.`,
|
|
1856
1856
|
systemScope,
|
|
1857
1857
|
asksBlock,
|
|
@@ -1894,7 +1894,7 @@ export const STAGES = {
|
|
|
1894
1894
|
// dead while looking authoritative. The wall and the stall stay here — they are the same for every
|
|
1895
1895
|
// seat and are about the grid tool's silence, not about the judgment tier.
|
|
1896
1896
|
timeoutSec: 2250, stallSec: 1100,
|
|
1897
|
-
skillReads: ["skills/
|
|
1897
|
+
skillReads: ["skills/clearance-common-law/SKILL.md"],
|
|
1898
1898
|
out: (P, half) => P.commonLawHalf(half),
|
|
1899
1899
|
validate: validators.commonLawHalf,
|
|
1900
1900
|
// — the run's own receipt of which prompt vintage minted this dispatch, written at DISPATCH
|
|
@@ -2003,7 +2003,7 @@ export const STAGES = {
|
|
|
2003
2003
|
// asking for those sections would be demanding ceremony a seat has no material for — which is how
|
|
2004
2004
|
// a floor teaches a model to fabricate rows to pass it.
|
|
2005
2005
|
if (half === MEANING_SEAT) return lines(
|
|
2006
|
-
reads(["skills/
|
|
2006
|
+
reads(["skills/clearance-common-law/SKILL.md"]),
|
|
2007
2007
|
`Inputs: variant manifest ${P.variantManifest}; matter frame ${P.matterContext}.`,
|
|
2008
2008
|
systemScope,
|
|
2009
2009
|
`You own this matter's MEANING SWEEP and nothing else. Two sibling members are running the marketplace grid concurrently and the driver merges all three in code — do NOT sweep marketplaces, do NOT judge listings, and do NOT widen beyond your dictated queries.`,
|
|
@@ -2025,7 +2025,7 @@ export const STAGES = {
|
|
|
2025
2025
|
...ownedAsks.map((a, i) => ` ${i + 1}. "${a.ask}"`),
|
|
2026
2026
|
) : "";
|
|
2027
2027
|
return lines(
|
|
2028
|
-
reads(["skills/
|
|
2028
|
+
reads(["skills/clearance-common-law/SKILL.md"]),
|
|
2029
2029
|
`Inputs: variant manifest ${P.variantManifest}; matter frame ${P.matterContext}.`,
|
|
2030
2030
|
systemScope,
|
|
2031
2031
|
asksBlock,
|
|
@@ -2063,7 +2063,7 @@ export const STAGES = {
|
|
|
2063
2063
|
// real fix is the in-class scoping (unit.md) + the 600 enumerate ceiling, which cap the silent page-loop to
|
|
2064
2064
|
// ~seconds; this is a safety margin only. stallSec stays < timeoutSec so a true silent wedge still trips.
|
|
2065
2065
|
timeoutSec: 1500, stallSec: 1100,
|
|
2066
|
-
skillReads: ["skills/
|
|
2066
|
+
skillReads: ["skills/clearance-register/SKILL.md", "skills/clearance-register/unit.md"],
|
|
2067
2067
|
out: (P, axis) => P.registerUnit(axis),
|
|
2068
2068
|
validate: validators.registerUnit,
|
|
2069
2069
|
// E1 — what this stage asks a model for, and what discharges each element. See THE STAGE-
|
|
@@ -2087,7 +2087,7 @@ export const STAGES = {
|
|
|
2087
2087
|
},
|
|
2088
2088
|
"proposal `romanization` beside a single non-Latin term — plain-ASCII Latin form, space-separated syllables": {
|
|
2089
2089
|
class: "judgment", tokens: [],
|
|
2090
|
-
why: "#850 keeps romanization at
|
|
2090
|
+
why: "#850 keeps romanization at clearance-variants as a language judgment and I hold the same line here. Recorded for E7: where the proposed term is a manifest translit variant, variant-manifest.json already carries its romanization, so that subset is code-extractable. No token at this stage.",
|
|
2091
2091
|
},
|
|
2092
2092
|
"proposal envelope — predicate enum {exact, default, wildcard, phonetic, owner}, term vs terms, rationale": {
|
|
2093
2093
|
class: "mechanical:tool-written", tokens: [],
|
|
@@ -2153,7 +2153,7 @@ export const STAGES = {
|
|
|
2153
2153
|
// once here so no branch below can drift out of step with what the model can actually call.
|
|
2154
2154
|
const supplementalLane = !!registerPlan?.contract?.supplemental_lane;
|
|
2155
2155
|
return lines(
|
|
2156
|
-
`First, read and follow exactly: skills/
|
|
2156
|
+
`First, read and follow exactly: skills/clearance-register/SKILL.md (the shared spine) then skills/clearance-register/unit.md (MODE A — UNIT). Do NOT read digest.md (digest-mode judgment a unit must never run).`,
|
|
2157
2157
|
// WHAT THE KEY ALSO CARRIES — COMPOSED, NOT DOCTRINE ( /).
|
|
2158
2158
|
// `unit.md` used to name three tools flat, and on a deployment withholding two of them the seat was
|
|
2159
2159
|
// told it holds tools its grant does not carry. The composer derives the list from the same table
|
|
@@ -2310,7 +2310,7 @@ export const STAGES = {
|
|
|
2310
2310
|
// — `placementForm: 1` joins it rather than replacing it. Under the form era placements.json is
|
|
2311
2311
|
// DRIVER-RENDERED from the accumulator, so validators.placement must stop demanding it from the seat;
|
|
2312
2312
|
// archived runs carry the old key alone and keep validating under the rules they were minted under.
|
|
2313
|
-
contract: { structuredPlacements: 1, placementForm: 1 },
|
|
2313
|
+
contract: { structuredPlacements: 1, placementForm: 1, placementAccount: 1 }, // placementAccount: see placementAccountArmed in verify.mjs
|
|
2314
2314
|
skillReads: ["skills/placement-inquiry/SKILL.md"],
|
|
2315
2315
|
out: (P) => P.placement,
|
|
2316
2316
|
// — `outSibs: [P.placementModel]` is DELETED, and the premise is retired rather than overruled.
|
|
@@ -2326,7 +2326,7 @@ export const STAGES = {
|
|
|
2326
2326
|
// CONTRACT DECLARATION above STAGES for the enum and the rules; contract-audit.mjs enforces them.
|
|
2327
2327
|
contractElements: {
|
|
2328
2328
|
"tier — EXACTLY one of headline-candidate / sheet-2 / watchlist-annex / out-of-scope-filtered, per placed candidate": {
|
|
2329
|
-
class: "judgment", tokens: ["placement_tier_invalid", "missing"],
|
|
2329
|
+
class: "judgment", tokens: ["placement_tier_invalid", "missing", "placement_unjudged"],
|
|
2330
2330
|
why: "The answer to 'does this conflict change the advice, or only complete the record?' No artifact on disk holds it — the band supplies records, never a deliverable position. #850 keeps it J.",
|
|
2331
2331
|
},
|
|
2332
2332
|
"reason — the short paragraph carrying the stated ground for the tier (owner characterisation, customer/channel read, decisive ground, Stage-2 mitigant)": {
|
|
@@ -2362,11 +2362,11 @@ export const STAGES = {
|
|
|
2362
2362
|
why: "Commercial-relevance reasoning, written once per SURFACED CANDIDATE — not per enumerated record; this element's own key overstates it and is left alone only because that string is frozen in contract-arm2-baseline.json. Measured on delivered run ed1d7248: SIX `**Inquiry trace:**` bullets against a band of 412 enumerated records, each one compressed bullet with inline (1)…(7), 2,096 of the md's 44,131 chars — 4.7%. NO CODE PARSES IT and it carries no token, but that is not the same as having no consumer, and the previous wording here ('lands only in md prose nothing parses') invited exactly that misreading: placement-recommendations.md is dispatched as model context to register-digest, synthesis and narrative-refutation, and a reviewing lawyer reads it. Its consumer is the human audit trail. The `reason` contract forbids restating it there — see the tier-enum dispatch line's 'NEVER the full 7-point inquiry trace' (cited by its text, not a line number: the pointer this comment used to carry had drifted 756 lines and aimed at a bare brace). #1339 D2 proposed dropping the order; owner ruled DROP THE TRIM on the re-derivation: the trace is ~8 s of emission at 70 tok/s, and deleting the whole md would be 2.6-3.0 min against a claim needing 25-33, so no trim inside this artifact could ever have been the dominant term.",
|
|
2363
2363
|
},
|
|
2364
2364
|
"placements.json — the structured mirror, keys EXACTLY {mark, owner, jurisdiction, records, tier, reason} + optional borderline": {
|
|
2365
|
-
class: "mechanical:code-rendered", tokens: ["placementmodel_missing", "placements_unparseable", "placements_key_unknown", "placement_invalid", "placement_key_unknown"],
|
|
2365
|
+
class: "mechanical:code-rendered", tokens: ["placementmodel_missing", "placements_unparseable", "placements_key_unknown", "placement_invalid", "placement_key_unknown", "placement_form_unreadable"],
|
|
2366
2366
|
why: "The driver renders it: renderPlacementsJson() in placement-form.mjs over the union, landed by `syncPlacementForm` in gateway.mjs (the union-then-render block). Cited by SYMBOL because the number has now moved twice: an earlier :507 pointed at an engine-resolution comment, and :706 went blank when an unrelated block was inserted above it. The skill file was not updated with #562, so the stage's two sources contradict each other — the contract that escapes if E1 is authored against stages.mjs alone.",
|
|
2367
2367
|
},
|
|
2368
2368
|
"mark / owner / records / territories / classes on a SELECTED row": {
|
|
2369
|
-
class: "mechanical:code-extracted", tokens: [],
|
|
2369
|
+
class: "mechanical:code-extracted", tokens: ["placement_register_unrendered"],
|
|
2370
2370
|
why: "renderEntry() in placement-form.mjs machine-copies all five from the canonical row built out of _driver/register-positions.json; SELECT_ROW_CONTRACT declared in placement-form.mjs states it in its do_not field. The driver already overwrites what the model types, which is the audit's own definition of mechanical.",
|
|
2371
2371
|
},
|
|
2372
2372
|
"retract: <row_id> — withdrawing a seat row already on the form": {
|
|
@@ -2440,7 +2440,7 @@ export const STAGES = {
|
|
|
2440
2440
|
// CAVEAT the probe carries in its own words: it ran on a band trimmed 2,596 -> 300 records. The tiering
|
|
2441
2441
|
// work is per-record, so the finding should hold at full size, but the first full-band arm is the test.
|
|
2442
2442
|
model: "opus", thinking: "low", timeoutSec: 2400, stallSec: 900,
|
|
2443
|
-
skillReads: ["skills/
|
|
2443
|
+
skillReads: ["skills/clearance-register/SKILL.md", "skills/clearance-register/digest.md"],
|
|
2444
2444
|
out: (P) => P.registerFindings,
|
|
2445
2445
|
validate: validators.registerFindings,
|
|
2446
2446
|
// E1 — what this stage asks a model for, and what discharges each element. See THE STAGE-
|
|
@@ -2448,7 +2448,7 @@ export const STAGES = {
|
|
|
2448
2448
|
contractElements: {
|
|
2449
2449
|
"coverage form `status` per row — EXACTLY one bare token of confirmed-clean / coverage-limited / deferred": {
|
|
2450
2450
|
class: "judgment", tokens: ["coverage_no_status", "coverage_clean_unexecuted", "coverage_clean_skipped", "coverage_clean_tainted"],
|
|
2451
|
-
why: "'Does this un-enumerated slice matter to whether I can sign' — the sufficiency call the funnel is forbidden to make (
|
|
2451
|
+
why: "'Does this un-enumerated slice matter to whether I can sign' — the sufficiency call the funnel is forbidden to make (clearance-register SKILL.md, `## Coverage = the band blocks`). The obligations are driver-computed with every identifier; the status is a VALUE the seat sends through record_coverage (typed transport), validated per row at call time. #850 keeps it J.",
|
|
2452
2452
|
},
|
|
2453
2453
|
"coverage form `reason` per row — the sentence the lawyer reads": {
|
|
2454
2454
|
class: "judgment", tokens: ["coverage_form_engine_vocabulary"],
|
|
@@ -2480,7 +2480,7 @@ export const STAGES = {
|
|
|
2480
2480
|
},
|
|
2481
2481
|
"findings prose — the relevance gate keep/drop, opposition read, owner aggregation and identity-conflict flags, Option-D cross-checks, watchlist application, which position earns a Sheet-1 row, and each row's `Flag reason` and `Verify?` cells": {
|
|
2482
2482
|
class: "judgment", tokens: ["too_short", "missing"],
|
|
2483
|
-
why: "'The only relevance judge' — the funnel pre-gated nothing (
|
|
2483
|
+
why: "'The only relevance judge' — the funnel pre-gated nothing (clearance-register SKILL.md, `## Coverage = the band blocks`). #850 keeps findings prose / relevance gate / opposition / Option-D / position rows as J.",
|
|
2484
2484
|
},
|
|
2485
2485
|
"every record the run carried into this stage ends somewhere — a findings row, a Negative-results drop, or a Disagreement resolution": {
|
|
2486
2486
|
class: "judgment", tokens: ["registerdigest_unaccounted_records", "registerdigest_nothing_judged", "registerdigest_accounting_unreadable", "registerdigest_model_missing", "registerdigest_batch_unknown", "registerdigest_double_counted", "registerdigest_model_write_failed"],
|
|
@@ -2496,7 +2496,7 @@ export const STAGES = {
|
|
|
2496
2496
|
},
|
|
2497
2497
|
"source attribution — the register name tagged on each record, plus the EUIPO `environment` word": {
|
|
2498
2498
|
class: "mechanical:tool-written", tokens: [],
|
|
2499
|
-
why: "CONVERTED (conversion 11): the driver stamps the provider and its environment word into the rendered document from the run config it already holds, and the tool takes no field for either. 'Exactly one register per run' (
|
|
2499
|
+
why: "CONVERTED (conversion 11): the driver stamps the provider and its environment word into the rendered document from the run config it already holds, and the tool takes no field for either. 'Exactly one register per run' (clearance-register SKILL.md, `## Provider`) and digest.md's `## Provider` note conceded 'the tag is constant across the findings file' — a constant the seat was retyping onto every record.",
|
|
2500
2500
|
},
|
|
2501
2501
|
"Negative-results drop rows — the Notes cell carrying URI, screen_verdict, class and status": {
|
|
2502
2502
|
class: "mechanical:tool-written", tokens: ["registerdigest_uri_unknown", "registerdigest_drop_reason_missing", "registerdigest_drop_ground_invalid", "registerdigest_drop_ground_contradicted"],
|
|
@@ -2554,7 +2554,7 @@ export const STAGES = {
|
|
|
2554
2554
|
},
|
|
2555
2555
|
},
|
|
2556
2556
|
message: ({ paths: P, axes, lateBind, intakeAsks }) => lines(
|
|
2557
|
-
`First, read and follow exactly: skills/
|
|
2557
|
+
`First, read and follow exactly: skills/clearance-register/SKILL.md (the shared spine) then skills/clearance-register/digest.md (MODE B — DIGEST).`,
|
|
2558
2558
|
`You are register DIGEST mode. Combine the unit digests into the register findings file.`,
|
|
2559
2559
|
// T9 (A2) — the owning stage executes its committed intake checks (see common-law twin).
|
|
2560
2560
|
// PR-8: this stage holds the READ-ONLY band tools, not the live register — the old wording
|
|
@@ -2653,7 +2653,7 @@ export const STAGES = {
|
|
|
2653
2653
|
// resource it. (It already ran on sonnet in-engine: anthropic-agent maps gemini-flash→sonnet, so the
|
|
2654
2654
|
// old "gemini-flash, fall back to sonnet" never fired; this just makes the config honest + lifts effort.)
|
|
2655
2655
|
model: "sonnet", thinking: "high", timeoutSec: 600, stallSec: 600,
|
|
2656
|
-
skillReads: ["skills/
|
|
2656
|
+
skillReads: ["skills/clearance-search/phase2-execution.md"],
|
|
2657
2657
|
out: (P) => P.skepticFlags,
|
|
2658
2658
|
validate: validators.skepticFlags,
|
|
2659
2659
|
// E1 — what this stage asks a model for, and what discharges each element. See THE STAGE-
|
|
@@ -2697,7 +2697,7 @@ export const STAGES = {
|
|
|
2697
2697
|
},
|
|
2698
2698
|
},
|
|
2699
2699
|
message: ({ paths: P, axes, registerOnly, depth }) => lines(
|
|
2700
|
-
`Read skills/
|
|
2700
|
+
`Read skills/clearance-search/phase2-execution.md, section "Step 2.6 — Skeptic review", and perform that fresh-eyes audit.`,
|
|
2701
2701
|
// lever 3 — the flagging rung. Empty on a one-country run; `lines` drops it.
|
|
2702
2702
|
skepticRungDirective(depth),
|
|
2703
2703
|
// A2 (addendum 2026-07-30): the two MACHINE artifacts are named as inputs beside the prose. The
|
|
@@ -2855,7 +2855,7 @@ export const STAGES = {
|
|
|
2855
2855
|
// F4 guaranteed-read: worked-examples.md is the analysis DEPTH TARGET (now carrying beverage exemplars
|
|
2856
2856
|
// alongside the gaming ones) — it was previously reachable only by a model-discretion second hop, so the
|
|
2857
2857
|
// depth target was silently absent on many runs. It is now in-context for every synthesis.
|
|
2858
|
-
skillReads: ["skills/
|
|
2858
|
+
skillReads: ["skills/clearance-search/synthesis-rules.md", "skills/clearance-search/firm-wide-reasoning.md", "skills/clearance-search/risk-framework.md", "skills/clearance-search/worked-examples.md", "skills/clearance-search/report-prose.md"],
|
|
2859
2859
|
skillReadsFor: synthesisSkillReads,
|
|
2860
2860
|
out: (P) => P.narrative,
|
|
2861
2861
|
validate: validators.narrative,
|
|
@@ -3144,7 +3144,7 @@ export const STAGES = {
|
|
|
3144
3144
|
// built — never a second predicate guessing at the builders, which is the drift b0ac330 removed.
|
|
3145
3145
|
//
|
|
3146
3146
|
// (2) THE COMMON-LAW CLAUSE OVERSHOT. De-authorising `common-law-findings.md` wholesale also
|
|
3147
|
-
// de-authorised its `## Coverage ledger` section, which
|
|
3147
|
+
// de-authorised its `## Coverage ledger` section, which clearance-common-law/SKILL.md writes for this
|
|
3148
3148
|
// seat ("feeds synthesis coverage-honesty") and synthesis-rules.md orders it to read before any
|
|
3149
3149
|
// clean statement — two opposed instructions about one file in one dispatch. The carve-out is
|
|
3150
3150
|
// DIRECTIONAL, which is what makes it safe: that ledger constrains (a `coverage-limited` row
|
|
@@ -3557,7 +3557,7 @@ export const STAGES = {
|
|
|
3557
3557
|
`REGISTER VERIFICATION TOOLS: you hold the read-only band tools — band_shape (the deterministic shape of the complete register band, incl. THE FLOORS: every live in-class identical/near-identical record, listed unconditionally), band_lookup (pull any record the narrative relies on or omits) and band_record (the official registry record fetched this run). Check the narrative's register assertions against them — a floor row the narrative neither rates nor reasons away is a FLAGGED CORRECTION. They are read-only and logged; you hold no live register tools (by design, never an outage).`,
|
|
3558
3558
|
registerOnly ? REGISTER_ONLY_NOTE : "",
|
|
3559
3559
|
// C4 — the pharma field module is binding on pharma matters; the review verifies it was honoured
|
|
3560
|
-
pharmaMatter(job) ? `This is a PHARMA matter (Nice 5 / pharma goods): verify the narrative honoured the pharma field module (skills/
|
|
3560
|
+
pharmaMatter(job) ? `This is a PHARMA matter (Nice 5 / pharma goods): verify the narrative honoured the pharma field module (skills/clearance-search/field-doctrine-pharma.md) — therapeutic-area goods discipline (same therapeutic area ≈ proximate goods regardless of formulation), NO-USE never softens a pharma risk (pipelines run 5-10 years pre-launch), and practitioner/pharmacist confusion including handwriting/verbal look-alikes was weighed. A violation is a FLAGGED CORRECTION.` : "",
|
|
3561
3561
|
// C5 — the generic correction: a registered right can support an injunction without the
|
|
3562
3562
|
// owner's use (country-dependent); "no use → procedural only / no injunction risk" is a forbidden inference.
|
|
3563
3563
|
`Flag as a CORRECTION any line reasoning "the owner does not use it → procedural risk only / no injunction exposure": non-use may open a revocation DEFENCE after the grace period, it does not neutralise an enforceable registration today.`,
|
|
@@ -3623,7 +3623,7 @@ export const STAGES = {
|
|
|
3623
3623
|
// judgment (the judgment was spent in synthesis). render.mjs already orders/groups/binds from findings.json.
|
|
3624
3624
|
"report-overview": {
|
|
3625
3625
|
model: "sonnet", thinking: "low", timeoutSec: 900,
|
|
3626
|
-
skillReads: ["skills/
|
|
3626
|
+
skillReads: ["skills/clearance-search/synthesis-rules.md", "skills/clearance-search/risk-framework.md", "skills/clearance-search/delivery-contract.md", "skills/clearance-search/report-prose.md"],
|
|
3627
3627
|
skillReadsFor: reportOverviewSkillReads,
|
|
3628
3628
|
out: (P) => P.reportOverview,
|
|
3629
3629
|
validate: validators.reportOverview,
|
|
@@ -3832,7 +3832,7 @@ export const STAGES = {
|
|
|
3832
3832
|
// the in-card "- ord:" line the driver orders + provenance-checks by).
|
|
3833
3833
|
"report-card": {
|
|
3834
3834
|
model: "sonnet", thinking: "low", timeoutSec: 600,
|
|
3835
|
-
skillReads: ["skills/
|
|
3835
|
+
skillReads: ["skills/clearance-search/delivery-contract.md", "skills/clearance-search/risk-framework.md", "skills/clearance-search/report-prose.md"],
|
|
3836
3836
|
skillReadsFor: reportCardSkillReads,
|
|
3837
3837
|
out: (P, axis) => P.reportCard(axis),
|
|
3838
3838
|
validate: validators.reportCard,
|
|
@@ -4246,7 +4246,7 @@ export const STAGE_ORDER = [
|
|
|
4246
4246
|
// — frame-diff moved AHEAD of placement-inquiry (2026-08-03). The frame settles before placement
|
|
4247
4247
|
// dispatches, so placement runs ONCE, on the settled frame. This list is what `--from <stage>` keys on,
|
|
4248
4248
|
// so it must track the executed order: `--from frame-diff` now forces placement + digest too.
|
|
4249
|
-
"matter-frame", "
|
|
4249
|
+
"matter-frame", "clearance-variants", "blind-frame", "common-law", "common-law-half", "register-unit",
|
|
4250
4250
|
"frame-diff", "placement-inquiry", "register-digest", "skeptic", "synthesis",
|
|
4251
4251
|
"case-law", "narrative-refutation", "report-overview", "report-card",
|
|
4252
4252
|
];
|
|
@@ -4351,7 +4351,7 @@ export function stageOutputs(name, P, { axes = [], axis = null } = {}) {
|
|
|
4351
4351
|
if (!def) return [];
|
|
4352
4352
|
const primary = def.out ? [def.out(P, axis)] : [];
|
|
4353
4353
|
const extra = {
|
|
4354
|
-
"
|
|
4354
|
+
"clearance-variants": [P.variantManifestModel, P.scopeLedger],
|
|
4355
4355
|
// blind-frame is NOT listed: since its structured model is `out` itself, which this function
|
|
4356
4356
|
// already includes. A second entry would claim a sibling the stage does not have.
|
|
4357
4357
|
"frame-diff": [P.frameDiffModel],
|
|
@@ -4416,7 +4416,7 @@ export function stageInputs(name, P, { axes = [], axis = null, registerOnly = fa
|
|
|
4416
4416
|
const units = (axes ?? []).map((a) => P.registerUnit(a));
|
|
4417
4417
|
const map = {
|
|
4418
4418
|
"matter-frame": [],
|
|
4419
|
-
"
|
|
4419
|
+
"clearance-variants": [P.matterContext],
|
|
4420
4420
|
// STARVED on purpose: ONLY the raw instruction — never matterContext (the --experiment sandbox copies
|
|
4421
4421
|
// exactly these inputs, so listing matterContext here would leak the frame the blind pass must not see).
|
|
4422
4422
|
"blind-frame": [P.inboundRequest],
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// • run SLOTS — live <pid>:<nonce>[:<tag>] lock files in runLockDir (slot-lock.mjs). A TURN
|
|
8
8
|
// slot count sat beside it until; the turn cap fenced an agent gateway's
|
|
9
9
|
// command lanes, and it left the product with the delivery mode that used it.
|
|
10
|
-
// • QUEUE — <id>.json (+ prose sidecars) waiting in each agent's studio/
|
|
10
|
+
// • QUEUE — <id>.json (+ prose sidecars) waiting in each agent's studio/clearance-search/queue/,
|
|
11
11
|
// plus a .processing count (claimed-but-not-yet-published).
|
|
12
12
|
// • IN-FLIGHT + POSTPONED + RECENT — enumerateRuns() over every workspace status.json (running /
|
|
13
13
|
// postponed [rate-limit paused, auto-resuming] / delivered / failed).
|
|
@@ -42,7 +42,7 @@ function countSlots(dir) {
|
|
|
42
42
|
return { inUse, tags };
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
// …/<prefix><id>/studio/
|
|
45
|
+
// …/<prefix><id>/studio/clearance-search/queue → "<id>"; "?" if the path isn't an agent queue dir.
|
|
46
46
|
function agentOfQueue(qdir) {
|
|
47
47
|
return config.agentIdFromQueueDir(qdir) ?? "?";
|
|
48
48
|
}
|