clearotron 0.4.1 → 0.5.0-beta.0
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/README.md +1 -0
- package/THIRD-PARTY-NOTICES.md +1 -1
- package/bin/start.mjs +33 -8
- package/build-info.json +2 -2
- package/driver/CHANGELOG.md +23 -0
- package/driver/ask-ledger.mjs +86 -15
- package/driver/band-shape.mjs +61 -11
- package/driver/band-size.mjs +10 -0
- package/driver/close-verify.mjs +29 -2
- package/driver/common-law-coverage-status.mjs +1 -1
- package/driver/connotation-search.mjs +7 -9
- package/driver/contract-e3-backlog.mjs +34 -34
- package/driver/contract-e3-baseline.json +5 -5
- package/driver/contract-vocabulary.mjs +12 -12
- package/driver/corrections-delivered.mjs +113 -0
- package/driver/corrections-feedforward.mjs +16 -6
- package/driver/corrective-arm.mjs +11 -8
- package/driver/coverage-form.mjs +3 -0
- package/driver/coverage-union.mjs +11 -2
- package/driver/digest-queue.mjs +1 -1
- package/driver/disposition-call.mjs +1 -1
- package/driver/document-coverage.mjs +3 -2
- package/driver/effective-scope.mjs +2 -2
- package/driver/engine/mcp/band-server.mjs +77 -13
- package/driver/engine/mcp/dispositions-server.mjs +2 -2
- package/driver/engine/mcp/recording-server.mjs +10 -6
- package/driver/findings-model.mjs +16 -4
- package/driver/floor-duty.mjs +9 -0
- package/driver/gate-metrics.mjs +7 -1
- package/driver/gateway.mjs +28 -14
- package/driver/goods-evidence.mjs +295 -0
- package/driver/knockout-assess-record.mjs +1 -1
- package/driver/narrative-refutation-record.mjs +40 -2
- package/driver/package.json +1 -1
- package/driver/pipeline.mjs +1945 -314
- package/driver/placement-decisions.mjs +243 -0
- package/driver/placement-form.mjs +42 -8
- package/driver/placement-union.mjs +14 -6
- package/driver/provider-usage.mjs +10 -7
- package/driver/publish/audit-from-spine.mjs +5 -2
- package/driver/publish/index.mjs +19 -4
- package/driver/publish/xlsx.mjs +6 -6
- package/driver/recall-reconciliation.mjs +15 -5
- package/driver/record-carry.mjs +70 -6
- package/driver/record-discard.mjs +7 -1
- package/driver/record-fold.mjs +14 -0
- package/driver/record-goods.mjs +101 -5
- package/driver/register-plan.mjs +89 -0
- package/driver/registry-fidelity.mjs +34 -3
- package/driver/remedy-accounting.mjs +52 -14
- package/driver/repair-composers.mjs +265 -105
- package/driver/repair-scope.mjs +327 -0
- package/driver/repair-targets.mjs +92 -0
- package/driver/result-noun-fields.mjs +3 -3
- package/driver/screen-gate.mjs +96 -0
- package/driver/skills/clearance-common-law/SKILL.md +8 -0
- package/driver/skills/clearance-register/SKILL.md +5 -5
- package/driver/skills/clearance-register/digest.md +14 -14
- package/driver/skills/clearance-register/unit.md +3 -3
- package/driver/skills/clearance-search/delivery-contract.md +2 -58
- package/driver/skills/clearance-search/report-prose.md +12 -3
- package/driver/skills/clearance-search/risk-framework-triage.md +1 -1
- package/driver/skills/clearance-search/synthesis-rules.md +10 -13
- package/driver/skills/clearance-variants/SKILL.md +4 -4
- package/driver/skills/knockout-assess/SKILL.md +9 -14
- package/driver/skills/knockout-frame/SKILL.md +5 -5
- package/driver/skills/narrative-refutation/SKILL.md +1 -1
- package/driver/skills/placement-inquiry/SKILL.md +1 -1
- package/driver/skills/whatif-memo/SKILL.md +1 -1
- package/driver/stage-context.mjs +2 -1
- package/driver/stages-knockout.mjs +1 -1
- package/driver/stages.mjs +95 -60
- package/driver/suite-census.json +367 -19
- package/driver/synthesis-record.mjs +310 -8
- package/driver/terminal-clamp.mjs +53 -2
- package/driver/verify-knockout.mjs +22 -4
- package/driver/verify.mjs +23 -3
- package/mcp-server/CHANGELOG.md +4 -0
- package/mcp-server/lib/driver.mjs +5 -0
- package/mcp-server/lib/events.mjs +25 -4
- package/mcp-server/lib/findings.mjs +4 -2
- package/mcp-server/package.json +1 -1
- package/package.json +1 -1
- package/portal-ui/package.json +1 -1
- package/providers/jx/src/core.js +3 -4
- package/providers/jx/src/judge.js +2 -2
- package/providers/jx/src/nativeread.js +1 -2
- package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/scripts/e2e-first-time.mjs +29 -12
|
@@ -152,18 +152,36 @@ function classify(e, st, rat) {
|
|
|
152
152
|
return { ts, kind: "manual-rerun", phase: phaseFor(e.stage), stage: e.stage ?? null, decision: "manual-rerun", snapshot: e.snapshot ?? null };
|
|
153
153
|
case "failed":
|
|
154
154
|
return { ts, kind: "failed", phase: phaseFor(e.stage), stage: e.stage ?? null, decision: "run-failed", reason: e.reason ?? null };
|
|
155
|
+
// AN ENGINE-INTERNAL RECORD, NEVER A DECISION. How the synthesis transport read a call — a marker decoded, rows
|
|
156
|
+
// lifted, keys a call carried that the transport ignores — is a fact about the engine's own plumbing, and
|
|
157
|
+
// whether each reviewer correction reached the delivered record is the reviewer's business, which never
|
|
158
|
+
// reaches a client page, and which part of the report each delivery-check fault was sent to repair is the
|
|
159
|
+
// repair's own routing, named in the check's own identifiers. None has a reader on a surface read out in front
|
|
160
|
+
// of lawyers and clients, so each is projected out of the timeline (`isInternalEntry`) rather than passed
|
|
161
|
+
// through under its own name.
|
|
162
|
+
case "synthesis-call-normalised":
|
|
163
|
+
case "corrections-delivered":
|
|
164
|
+
case "report-repair-targets":
|
|
165
|
+
return { ts, kind: e.event, decision: "engine-internal", internal: true };
|
|
155
166
|
default:
|
|
156
167
|
return { ts, kind: e.event ?? "unknown", decision: e.event ?? "unknown" }; // generic passthrough
|
|
157
168
|
}
|
|
158
169
|
}
|
|
159
170
|
|
|
160
|
-
// THE KINDS classify() INTERPRETS — one per `case` above,
|
|
161
|
-
//
|
|
162
|
-
// view's to keep; a client account's
|
|
171
|
+
// THE KINDS classify() INTERPRETS — one per `case` above, the engine-internal kinds below excepted; the two sets
|
|
172
|
+
// together are pinned to the cases by events.test.mjs. Every other event reaches the timeline through the
|
|
173
|
+
// passthrough, under the engine's own name for it. That is the engineering view's to keep; a client account's
|
|
174
|
+
// timeline keeps these kinds alone (audit-view.mjs accountTimeline).
|
|
163
175
|
export const INTERPRETED_EVENT_KINDS = new Set(["start", "axes", "stage", "skip", "failover", "attempt", "skeptic-escalation",
|
|
164
176
|
"escalation-skipped", "escalation-noop", "verdict", "verdict-2", "delivered-with-open-questions", "screen-gate-clean",
|
|
165
177
|
"screen-gate-violation", "audit", "provider-usage", "manual-rerun", "failed"]);
|
|
166
178
|
|
|
179
|
+
// THE ENGINE-INTERNAL KINDS — classify() has a `case` for each, so that none passes through under its own name,
|
|
180
|
+
// and projectTimeline drops every one of them (`isInternalEntry`). They are records about the engine's own
|
|
181
|
+
// plumbing, not decisions, so they are listed apart from the interpreted kinds: a client account's timeline,
|
|
182
|
+
// which keeps the interpreted kinds alone, would drop them even if one ever reached it.
|
|
183
|
+
export const ENGINE_INTERNAL_EVENT_KINDS = new Set(["synthesis-call-normalised", "corrections-delivered", "report-repair-targets"]);
|
|
184
|
+
|
|
167
185
|
// A SUCCEEDED attempt is not a decision. put one `attempt` row on run.jsonl per model dispatch, and
|
|
168
186
|
// with no kind filter here every stage began emitting BOTH `attempt-succeeded` and `stage-completed` —
|
|
169
187
|
// +61 entries on 269 (+23%) on the 2026-07-29 delivered run, roughly double on a correction-heavy one, on
|
|
@@ -175,6 +193,9 @@ export const INTERPRETED_EVENT_KINDS = new Set(["start", "axes", "stage", "skip"
|
|
|
175
193
|
// one-sided — attempts survive here only when they say something `stage-completed` does not. Presentation
|
|
176
194
|
// only: no gate, verdict path or delivery decision reads the projected timeline.
|
|
177
195
|
const isNoiseEntry = (t) => t.kind === "attempt" && t.decision === "attempt-succeeded";
|
|
196
|
+
// An engine-internal record (see classify) is folded out the same way, and for a stronger reason: it is not a
|
|
197
|
+
// decision at all, and its name and fields would reach a client's timeline through the generic passthrough.
|
|
198
|
+
const isInternalEntry = (t) => t.internal === true;
|
|
178
199
|
|
|
179
200
|
/**
|
|
180
201
|
* projectTimeline(events, P, {sinceTs}) → { timeline, verdictHistory }.
|
|
@@ -192,7 +213,7 @@ export function projectTimeline(events, P, { sinceTs, sinceSeq } = {}) {
|
|
|
192
213
|
// unused, never compact the ones after it, or a `sinceSeq` cursor held by a poller would renumber (and
|
|
193
214
|
// re-emit or skip) history it has already read.
|
|
194
215
|
entry.seq = seq++;
|
|
195
|
-
if (isNoiseEntry(entry)) continue;
|
|
216
|
+
if (isNoiseEntry(entry) || isInternalEntry(entry)) continue;
|
|
196
217
|
full.push(entry);
|
|
197
218
|
}
|
|
198
219
|
const verdictHistory = events.filter((e) => e.event === "verdict" || e.event === "verdict-2").map((e) => e.verdict ?? null);
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// (on-field / off-field / out-of-scope) lives on the report cards, so we expose those separately. Read-only.
|
|
9
9
|
|
|
10
10
|
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
-
import { parseAudit, parseReport, parseBlocks, parseFront, parseSections, buildAuditMd } from "./driver.mjs";
|
|
11
|
+
import { parseAudit, parseReport, parseBlocks, parseFront, parseSections, buildAuditMd, placementAuditRows } from "./driver.mjs";
|
|
12
12
|
|
|
13
13
|
// id-stamp the three block lists so callers (get_finding / trace) can address a single record.
|
|
14
14
|
function idStamp(lists) {
|
|
@@ -64,7 +64,9 @@ export function loadFindings(P) {
|
|
|
64
64
|
//
|
|
65
65
|
// Best-effort by construction: an unreadable or absent findings.json yields undefined, which is
|
|
66
66
|
// exactly the no-op this path already had. It can only add fidelity, never remove it.
|
|
67
|
-
|
|
67
|
+
// …and placement's standing decisions, the rows the driver's own builder adds to the Audit Trail: without them the
|
|
68
|
+
// rebuilt trail would lose the very set-asides recall reconciliation accepted.
|
|
69
|
+
const { md } = buildAuditMd(reg, cl, { findings: readRunFindings(P), placementRows: placementAuditRows(P) });
|
|
68
70
|
return { ...idStamp(parseAuditText(md)), source: "rebuilt-from-spine" };
|
|
69
71
|
}
|
|
70
72
|
} catch { /* fall through */ }
|
package/mcp-server/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trademark-artifacts-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0-beta.0",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"private": true,
|
|
6
6
|
"description": "MCP server to interrogate clearotron trademark-clearance runs — list/read artifacts, trace the full decision flow, telemetry/cost, coverage, single-run search, and a gated single-step what-if. Imports the clearotron-driver read-only; touches no driver/template/deploy files.",
|
package/package.json
CHANGED
package/portal-ui/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "portal-ui",
|
|
3
3
|
"private": true,
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.5.0-beta.0",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
7
7
|
"description": "The unified trademark portal UI. One address, one login: who you are decides what you see. Built as a static bundle, served by driver/portal-service.mjs — the browser never reaches profile-service or recipe-service.",
|
|
8
8
|
"engines": {
|
package/providers/jx/src/core.js
CHANGED
|
@@ -64,8 +64,7 @@ const LANE_PROMPTS = {
|
|
|
64
64
|
`Mark: "${mark}". Product context: ${productContext || "general consumer goods/services"}.`,
|
|
65
65
|
``,
|
|
66
66
|
`Task: the SIMPLIFIED-CHINESE register forms a mainland-China market actor (distributor, fan base,`,
|
|
67
|
-
`or bad-faith filer) would plausibly use for this mark. Emit up to ${MAX_CANDIDATES} candidates
|
|
68
|
-
`emit_candidates tool:`,
|
|
67
|
+
`or bad-faith filer) would plausibly use for this mark. Emit up to ${MAX_CANDIDATES} candidates:`,
|
|
69
68
|
`- "phonetic": transliterations by SOUND (the characters a Chinese speaker would pick to say the mark);`,
|
|
70
69
|
`- "semantic": translations by MEANING (when the mark has translatable meaning);`,
|
|
71
70
|
`- "nickname": the shorthand the Chinese market actually adopts for foreign brands of this kind.`,
|
|
@@ -80,7 +79,7 @@ const LANE_PROMPTS = {
|
|
|
80
79
|
``,
|
|
81
80
|
`Task: the JAPANESE register forms a Japan-market actor (brand owner, distributor, media, fan base,`,
|
|
82
81
|
`or bad-faith filer) would plausibly use or register for this mark at the JPO. Emit up to`,
|
|
83
|
-
`${MAX_CANDIDATES} candidates
|
|
82
|
+
`${MAX_CANDIDATES} candidates:`,
|
|
84
83
|
`- "phonetic": the katakana transliteration(s) — the standard form FIRST, plus genuinely current variants`,
|
|
85
84
|
` (e.g. with/without the middle dot, alternative long-vowel renderings actually seen in the market);`,
|
|
86
85
|
`- "semantic": meaning-based kanji/kana renderings (only when the mark has translatable meaning);`,
|
|
@@ -97,7 +96,7 @@ const LANE_PROMPTS = {
|
|
|
97
96
|
``,
|
|
98
97
|
`Task: the KOREAN (hangul) register forms a South-Korea market actor (brand owner, distributor, media,`,
|
|
99
98
|
`fan base, or bad-faith filer) would plausibly use or register for this mark at KIPO. Emit up to`,
|
|
100
|
-
`${MAX_CANDIDATES} candidates
|
|
99
|
+
`${MAX_CANDIDATES} candidates:`,
|
|
101
100
|
`- "phonetic": the hangul transliteration(s) — the standard form FIRST, plus genuinely current variants`,
|
|
102
101
|
` (Korean brand practice keeps older or stylized spellings alive, e.g. 까르푸, 써브웨이 — include them`,
|
|
103
102
|
` when they are the forms the market really uses);`,
|
|
@@ -54,8 +54,8 @@ export function buildJudgeRequest({ mark, hits, model = DEFAULT_MODEL }) {
|
|
|
54
54
|
`Mark under trademark clearance: "${String(mark).trim()}".`,
|
|
55
55
|
``,
|
|
56
56
|
`Below are ${rows.length} search hits from Chinese e-commerce platforms and the general Chinese web,`,
|
|
57
|
-
`found while searching the mark and its Chinese-script forms. Classify EVERY hit
|
|
58
|
-
`
|
|
57
|
+
`found while searching the mark and its Chinese-script forms. Classify EVERY hit`,
|
|
58
|
+
`(one judgment per id, ids verbatim):`,
|
|
59
59
|
`- "use-evidence": an actual product/store/listing page appearing to USE this or a confusingly`,
|
|
60
60
|
` similar sign in trade;`,
|
|
61
61
|
`- "listing-candidate": commerce-adjacent and possibly relevant, but the title/snippet alone`,
|
|
@@ -61,8 +61,7 @@ export function buildNativereadRequest({ mark, lane = "zh", payload, model = DEF
|
|
|
61
61
|
``,
|
|
62
62
|
`Below is the complete Chinese evidence slice assembled for this run — CNIPA register rows,`,
|
|
63
63
|
`native-script candidate forms, sub-class (similarity-group) notes, and platform search findings.`,
|
|
64
|
-
`Read it as a Chinese trademark practitioner would and emit up to ${MAX_ITEMS} items
|
|
65
|
-
`emit_read_items tool:`,
|
|
64
|
+
`Read it as a Chinese trademark practitioner would and emit up to ${MAX_ITEMS} items:`,
|
|
66
65
|
`- "conflict-read": what a specific register record actually is (goods coverage, sub-class overlap,`,
|
|
67
66
|
` status nuance a Latin-only read misses) — record_uri REQUIRED, from the slice;`,
|
|
68
67
|
`- "subclass-note": CNIPA similarity-group practice that changes how close a class conflict really is;`,
|
|
@@ -73,9 +73,10 @@ export const COUNTED_EVENTS = {
|
|
|
73
73
|
"connotation-unfinished-disclosed": FAILED, "core-artifact-invalid": FAILED, "corrections-applied-failed": FAILED,
|
|
74
74
|
"coverage-form-absent": FAILED, "coverage-ledger-fallback": FAILED, "coverage-ledger-render-failed": FAILED,
|
|
75
75
|
"crowd-context-failed": FAILED, "delivery-stale-blocked": FAILED, "digest-flush-failed": FAILED,
|
|
76
|
+
"post-repair-correction-unrecoverable": FAILED, "post-repair-state-not-kept": FAILED,
|
|
76
77
|
"digest-flush-timeout": FAILED, "document-coverage-render-failed": FAILED, "doubts-failed": FAILED,
|
|
77
78
|
"evidence-claim-invariant": { kind: FAILED, when: (e) => e.ok === false || Number(e.violations) > 0 },
|
|
78
|
-
"floor-duty-failed": FAILED, "frame-reopen-redigest-failed": FAILED, "house-element-ownership-failed": FAILED,
|
|
79
|
+
"floor-duty-failed": FAILED, "frame-reopen-redigest-failed": FAILED, "goods-evidence-failed": FAILED, "placement-decisions-failed": FAILED, "placement-band-ids-failed": FAILED, "late-evidence-failed": FAILED, "band-refused-records-failed": FAILED, "verdict-write-deferred": FAILED, "ranking-read-by-writer-failed": FAILED, "audit-rebuild-failed": FAILED, "audit-build-failed": FAILED, "write-up-goods-from-failed": FAILED, "house-element-ownership-failed": FAILED,
|
|
79
80
|
"intake-asks-missing": FAILED, "invalid-artifact-strikes": FAILED, "knockout-band-checks-inert": FAILED,
|
|
80
81
|
"knockout-in-use-as-unanswered": FAILED, "knockout-ladder-unreadable": FAILED, "knockout-method-checks-inert": FAILED,
|
|
81
82
|
"knockout-owner-checks-failed": FAILED, "knockout-register-records-failed": FAILED, "knockout-sweep-outage": FAILED,
|
|
@@ -86,7 +87,7 @@ export const COUNTED_EVENTS = {
|
|
|
86
87
|
"record-carry-failed": FAILED, "record-discard-failed": FAILED, "register-digest-facts-failed": FAILED,
|
|
87
88
|
"register-plan-infeasible": FAILED, "register-positions-failed": FAILED, "register-presence-failed": FAILED,
|
|
88
89
|
"remedy-accounting-failed": FAILED, "report-cards-rate-limited": FAILED, "restamp-miss": FAILED,
|
|
89
|
-
"reviewer-degenerate": FAILED, "salvage-lane-no-target": FAILED, "searched-jurisdictions-unresolved": FAILED, "foreign-record-links-recheck": FAILED,
|
|
90
|
+
"reviewer-degenerate": FAILED, "salvage-lane-no-target": FAILED, "screen-gate-evidence-failed": FAILED, "searched-jurisdictions-unresolved": FAILED, "foreign-record-links-recheck": FAILED,
|
|
90
91
|
"skeptic-skipped": FAILED, "stage-input-over-ceiling": FAILED, "status-write-failed": FAILED,
|
|
91
92
|
"stale-repair-entry-done": { kind: FAILED, when: (e) => (Array.isArray(e.failed) ? e.failed.length : Number(e.failed)) > 0 },
|
|
92
93
|
// written only where the step threw
|
|
@@ -120,6 +121,9 @@ export const COUNTED_EVENTS = {
|
|
|
120
121
|
"registry-record-closure": { kind: FAILED, when: (e) => (Array.isArray(e.failed) ? e.failed.length : 0) > 0 },
|
|
121
122
|
"silently-lost-findings": { kind: FAILED, when: (e) => Number(e.lost) > 0 },
|
|
122
123
|
"correction-kinds": { kind: FAILED, when: (e) => e.ok === false },
|
|
124
|
+
// the delivery check of the reviewer's corrections could not read the record the report was built from;
|
|
125
|
+
// its outcomes themselves are a note about the answer's content, which the quality read judges
|
|
126
|
+
"corrections-delivered": { kind: FAILED, when: (e) => e.ok === false },
|
|
123
127
|
"reasoning-integrity": { kind: FAILED, when: (e) => e.ok === false },
|
|
124
128
|
"screen-gate-postflush": [{ kind: FAILED, when: (e) => Number(e.count) > 0 }, { kind: REPAIR, when: (e) => e.recovered === true }],
|
|
125
129
|
// a duty or carry the run could not compute, or whose arithmetic does not reconcile
|
|
@@ -132,7 +136,7 @@ export const COUNTED_EVENTS = {
|
|
|
132
136
|
"remedy-accounting": { kind: FAILED, when: (e) => e.computable === false },
|
|
133
137
|
// asked or run again, where no dispatch records it
|
|
134
138
|
"connotation-reissue": REASK, "plan-qids-missing": REASK, "plan-qids-deferred-suspect": REASK,
|
|
135
|
-
"screen-gate-violation": REASK, "stage-floor-duty-rerun": REASK, "lane-wedge-retry": RETRY,
|
|
139
|
+
"screen-gate-violation": REASK, "stage-floor-duty-rerun": REASK, "lane-wedge-retry": RETRY, "verdict-write-retried": RETRY,
|
|
136
140
|
// code changed an answer it did not accept
|
|
137
141
|
"band-truth-rebuilt": REPAIR, "client-condition-dropped": REPAIR, "common-law-downgrade-clamp": REPAIR,
|
|
138
142
|
"commonlaw-channels-unstated": REPAIR, "commonlaw-channels-unusable": REPAIR,
|
|
@@ -140,12 +144,17 @@ export const COUNTED_EVENTS = {
|
|
|
140
144
|
"knockout-next-step-removed": REPAIR, "recall-reconciliation-positions-rederived": REPAIR, "registry-auto-correct": REPAIR,
|
|
141
145
|
"repair-attempted": REPAIR, "terminal-guard-clamp": REPAIR, "verdict-conditions-dropped": REPAIR, "foreign-record-links-blanked": REPAIR,
|
|
142
146
|
"verdict-hardened-by-repair": REPAIR, "verdict-rederive-repair": REPAIR,
|
|
147
|
+
// The synthesis transport decoded a marker sent as a JSON string, or lifted rows sent inside the findings
|
|
148
|
+
// object, on a call it then accepted. Its other notes — an override the merge has always applied, keys and
|
|
149
|
+
// rows a whole call carries and the transport ignores — changed nothing that was accepted.
|
|
150
|
+
"synthesis-call-normalised": { kind: REPAIR, when: (e) => e.accepted === true
|
|
151
|
+
&& ((Array.isArray(e.decoded) && e.decoded.length > 0) || Number(e.lifted) > 0) },
|
|
143
152
|
"common-law-half-quarantined": QUARANTINE, "coverage-ledger-quarantined": QUARANTINE,
|
|
144
153
|
"findings-actions-quarantined": QUARANTINE, "named-band-state-quarantined": QUARANTINE, "quarantine": QUARANTINE,
|
|
145
154
|
"taint-quarantine": QUARANTINE,
|
|
146
155
|
"ask-closure-unverified": REFUSED, "doubt-closure-unverified": REFUSED, "frame-reopen-fold-refused": REFUSED,
|
|
147
156
|
"jx-entry-refused": REFUSED, "knockout-register-records-refused": REFUSED, "register-xcheck-refused": REFUSED,
|
|
148
|
-
"supplemental-fold-refused": REFUSED, "verdict-softening-not-adopted": REFUSED, "register-recall-refused": REFUSED,
|
|
157
|
+
"supplemental-fold-refused": REFUSED, "verdict-softening-not-adopted": REFUSED, "named-band-remerge-over-ceiling": REFUSED, "register-recall-refused": REFUSED,
|
|
149
158
|
"auto-recovery-exhausted": RECOVERY, "auto-recovery-parked": RECOVERY, "corrective-rollback": RECOVERY,
|
|
150
159
|
"parked-for-human": RECOVERY, "postponed": RECOVERY, "recovery-parked": RECOVERY, "taint-park": RECOVERY,
|
|
151
160
|
"cancelled": "cancelled", "failed": "run failed", "form-repair": "form repair turn",
|
|
@@ -170,7 +179,7 @@ export const NOT_COUNTED_EVENTS = {
|
|
|
170
179
|
"escalation-skipped", "experiment", "experiment-refused",
|
|
171
180
|
"form-neighbourhood-derived", "frame-diff",
|
|
172
181
|
"frame-diff-source-directives-dropped", "frame-reopen-reconcile-not-needed", "frame-reopen-skipped", "frame-web-grid",
|
|
173
|
-
"framework", "grid-ledger-saved", "grid-spec", "grid-split", "grid-split-skipped", "hit-list-minted",
|
|
182
|
+
"framework", "goods-evidence", "grid-ledger-saved", "grid-spec", "grid-split", "grid-split-skipped", "hit-list-minted",
|
|
174
183
|
"house-element-ownership", "intake-artifacts", "intake-asks", "jurisdiction-scope", "jurisdiction-scope-register-deferred",
|
|
175
184
|
"jx-aim-consumed", "jx-candidate-fold", "jx-nativeread",
|
|
176
185
|
"jx-serp-grid", "jx-serp-grid-overflow", "jx-serp-grid-spec", "jx-slices-stated",
|
|
@@ -188,21 +197,26 @@ export const NOT_COUNTED_EVENTS = {
|
|
|
188
197
|
// The target moved off this line to the run's own, above: the bar is about a run and this span is
|
|
189
198
|
// one stage of it.
|
|
190
199
|
"knockout-sweep-total", "level-scope-note",
|
|
191
|
-
"named-band-merged", "one-shot-stamp-settled", "order-probe", "output-snapshot", "owner-screen-derived",
|
|
200
|
+
"named-band-merged", "named-band-remerged", "late-evidence", "one-shot-stamp-settled", "order-probe", "output-snapshot", "owner-screen-derived",
|
|
192
201
|
"placement-borderline", "placement-form-written", "plan-execution", "plan-execution-census",
|
|
193
|
-
"plan-execution-refresh", "plan-qids-deferred",
|
|
202
|
+
"plan-execution-refresh", "plan-qids-deferred",
|
|
203
|
+
// the review after a delivery-check repair: its record, the record of its one correction, a reviewer queued
|
|
204
|
+
// for a change to the findings record only, and a repair that saved the same values again (no review run)
|
|
205
|
+
"post-repair-fix-pass", "post-repair-review", "post-repair-review-not-needed", "post-repair-review-queued",
|
|
206
|
+
"probe-over-cap-undispatched", "profile", "profile-exclusion-seed",
|
|
194
207
|
"profile-resolved", "profile-selection", "provider-usage", "quote",
|
|
195
208
|
"record-artifacts", "register-digest-facts-written",
|
|
196
209
|
"register-only", "register-plan", "register-plan-axis-deferred", "register-plan-deferred-coverage",
|
|
197
210
|
"register-plan-variant-dropped", "register-positions-derived", "register-presence",
|
|
198
211
|
"register-presence-skipped", "register-xcheck", "register-xcheck-decided", "run-integrity",
|
|
199
|
-
"scope-facts", "scope-frontmatter", "scope-ledger-derived", "scope-ledger-skipped", "screen-gate-clean",
|
|
212
|
+
"scope-facts", "scope-frontmatter", "scope-ledger-derived", "scope-ledger-skipped", "screen-gate-clean", "screen-gate-evidence",
|
|
200
213
|
"seam-reapplied", "search-policy", "searched-jurisdictions", "senior-rights", "skip",
|
|
201
214
|
"stage-contract", "stage-limit-derived", "stage-stamps-reconciled", "start", "supplemental-fold", "token-rollup",
|
|
202
215
|
"turnaround-reconciliation", "verdict", "verdict-conditions-recorded", "verdict-frontmatter",
|
|
203
216
|
"whatif-settled-on-archive", "write-up-forms",
|
|
204
217
|
],
|
|
205
218
|
"a note about the answer's content that changes nothing in the run; the quality read judges it": [
|
|
219
|
+
"audit-not-built-no-findings", "recall-reconciliation-unended-delivered", "late-evidence-no-digest-work", "changed-decision-unread-delivered", "ranking-changed-unread-delivered", "late-evidence-unassessed-delivered",
|
|
206
220
|
"ask-closure-mark-owed", "classifier-gap",
|
|
207
221
|
"connotation-addressed-not-discharged", "connotation-ruling-drift", "default-territory-unrecognized", "delivery-flags",
|
|
208
222
|
"enforcer-signals", "findings-actions-legacy", "findings-schema-legacy", "floor-duty-undischarged",
|
|
@@ -214,11 +228,11 @@ export const NOT_COUNTED_EVENTS = {
|
|
|
214
228
|
"the twin of an incident counted under another record — its dispatch, its repair, its clamp or its failure": [
|
|
215
229
|
"action-reemit", "ask-answer-reemit", "authority-write-denied", "connotation-remedy", "corrections-applied",
|
|
216
230
|
"corrective-cycle-receipt", "corrective-cycle-settled", "corrective-findings-stale", "coverage-absence-rendered",
|
|
217
|
-
"coverage-closure", "coverage-ledger-recovered", "delivery-stale-repair", "envelope-close-rows", "escalation-noop",
|
|
231
|
+
"coverage-closure", "coverage-ledger-recovered", "delivery-stale-repair", "delivery-stale-requeued", "envelope-close-rows", "escalation-noop", "floor-duty-after-repair", "writer-duty-after-repair", "writer-duty-after-correction", "guard-clause-replaced", "guard-gap-closed", "verdict-recomputed-gap-closed", "guard-clause-named-elsewhere", "audit-rebuilt", "audit-withdrawn", "record-carry-doubts-again",
|
|
218
232
|
"finding-reemit", "findings-actions-absent", "findings-schema-downlevel", "form-oracle-gap", "frame-reopen",
|
|
219
|
-
"frame-reopen-reattempt", "grid-ledger-missing", "knockout-assess-invalidated", "lint-redo-skipped-structural",
|
|
233
|
+
"frame-reopen-reattempt", "grid-ledger-missing", "knockout-assess-invalidated", "lint-redo-skipped", "lint-redo-skipped-structural",
|
|
220
234
|
"meaning-gap-coverage", "park-resumed", "plan-qids-sticky-gap", "recall-reconciliation-unended",
|
|
221
|
-
"recovery-classified", "record-discard", "screen-gate-unresolved", "skeptic-escalation", "stage-stale",
|
|
235
|
+
"recovery-classified", "record-discard", "report-repair-targets", "screen-gate-unresolved", "skeptic-escalation", "stage-stale",
|
|
222
236
|
"stale-repair-entry", "taint-disclose", "unsettled-inputs", "verdict-2", "verdict-3",
|
|
223
237
|
],
|
|
224
238
|
"read from its own record: the stage records, the dispatch records and the tool-call log": [
|
|
@@ -258,7 +272,10 @@ export const COUNTED_TRIGGERS = {
|
|
|
258
272
|
// the blind frame or the form oracle named what the first frame and sweep missed
|
|
259
273
|
"frame-reopen": REASK,
|
|
260
274
|
"frame-reopen-retry": RETRY, "grid-ledger": REASK, "intake-asks-followup": REASK, "lint-repair": REPAIR,
|
|
261
|
-
"plan-join": REASK, "plan-join-fresh": REASK, "schema-downlevel": REASK, "stale-repair": REPAIR,
|
|
275
|
+
"plan-join": REASK, "plan-join-fresh": REASK, "schema-downlevel": REASK, "stale-repair": REPAIR, "late-evidence": REPAIR,
|
|
276
|
+
// the review after a delivery-check repair re-reads what that repair changed; its one correction applies the
|
|
277
|
+
// flags that review raised
|
|
278
|
+
"post-repair-review": REPAIR, "post-repair-corrective": REASK,
|
|
262
279
|
"stale-repair-entry": REPAIR, "taint-rerun": REASK, "verdict-recheck": REASK,
|
|
263
280
|
};
|
|
264
281
|
// The two reasons built at run time: a recall reconciliation re-asking the digest, and a flush retried.
|