← back to Gmc Titlefix
Reject unresolved MDC sample title sources before inserts
71e1db5876d84cc680d274a8f67804ed940c68a1 · 2026-09-09 11:49:19 -0700 · Steve Abrams
Files touched
M build-mdc-sample-titles.mjsM push-mdc-sample-titles.mjsA resolve-mdc-sample-source.mjsA test-mdc-source-guard.mjsM verification/e2e-proof.json
Diff
commit 71e1db5876d84cc680d274a8f67804ed940c68a1
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Sep 9 11:49:19 2026 -0700
Reject unresolved MDC sample title sources before inserts
---
build-mdc-sample-titles.mjs | 24 ++-------
push-mdc-sample-titles.mjs | 13 ++---
resolve-mdc-sample-source.mjs | 56 +++++++++++++++++++
test-mdc-source-guard.mjs | 123 ++++++++++++++++++++++++++++++++++++++++++
verification/e2e-proof.json | 81 ++++++++--------------------
5 files changed, 214 insertions(+), 83 deletions(-)
diff --git a/build-mdc-sample-titles.mjs b/build-mdc-sample-titles.mjs
index 5d5b4ac..68d0d7a 100644
--- a/build-mdc-sample-titles.mjs
+++ b/build-mdc-sample-titles.mjs
@@ -29,8 +29,8 @@ import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
-const { hasShowroomTag } = require(process.env.HOME + '/Projects/fix-live-board/config/showroom-vendor.cjs');
-const { token, MERCHANT } = require('./_auth');
+import { resolveSampleTitleDS } from './resolve-mdc-sample-source.mjs';
+export { resolveSampleTitleDS };
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
@@ -63,25 +63,11 @@ export function sampleVariant(variants) {
* source RESOURCE NAME that is actually referenced by a primary feed's takeFromDataSources.
* (exported so the pusher reuses the identical resolution.)
*/
-export async function resolveSampleTitleDS(tok) {
- const rd = await fetch(`https://merchantapi.googleapis.com/datasources/v1/accounts/${MERCHANT}/dataSources`, { headers: { Authorization: 'Bearer ' + tok } });
- const jd = await rd.json();
- const all = jd.dataSources || [];
- // candidate supplementals named "DW Sample Title Overrides"
- const named = all.filter(d => d.supplementalProductDataSource && /DW Sample Title Overrides/i.test(d.displayName || ''));
- // linked set = every supplemental referenced by any primary's defaultRule.takeFromDataSources
- const linked = new Set();
- for (const d of all) {
- const takes = d.primaryProductDataSource?.defaultRule?.takeFromDataSources || [];
- for (const t of takes) if (t.supplementalDataSourceName) linked.add(t.supplementalDataSourceName);
- }
- const chosen = named.find(d => linked.has(d.name)) || named[0];
- if (!chosen) throw new Error('no "DW Sample Title Overrides" supplemental data source found — create ONE and link it to the primary first');
- return { name: chosen.name, linked: linked.has(chosen.name), duplicates: named.filter(d => d.name !== chosen.name).map(d => d.name) };
-}
const isMain = process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);
if (isMain) {
+ const { token, MERCHANT } = require('./_auth');
+ const { hasShowroomTag } = require(process.env.HOME + '/Projects/fix-live-board/config/showroom-vendor.cjs');
const TOKEN = (fs.readFileSync(process.env.HOME + '/Projects/secrets-manager/.env', 'utf8')
.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m) || [])[1]?.trim();
if (!TOKEN) { console.error('no Shopify token'); process.exit(1); }
@@ -101,6 +87,7 @@ if (isMain) {
(async () => {
const tok = await token();
+ const ds = await resolveSampleTitleDS(tok, { merchant: MERCHANT });
// 1. Real GMC offerId set (paginate products.list) — so we only override offers that EXIST.
process.stderr.write('pulling GMC offerId set…\n');
const gmcOffers = new Set();
@@ -143,7 +130,6 @@ if (isMain) {
has = d.products.pageInfo.hasNextPage; cursor = d.products.pageInfo.endCursor;
}
- const ds = await resolveSampleTitleDS(tok).catch(e => ({ error: e.message }));
const DIR = path.join(__dirname, 'data'); fs.mkdirSync(DIR, { recursive: true });
const out = path.join(DIR, 'mdc-sample-title-overrides.json');
fs.writeFileSync(out, JSON.stringify(rows, null, 1));
diff --git a/push-mdc-sample-titles.mjs b/push-mdc-sample-titles.mjs
index 478d44b..4ae0e8a 100644
--- a/push-mdc-sample-titles.mjs
+++ b/push-mdc-sample-titles.mjs
@@ -8,13 +8,13 @@
* A real run requires BOTH: --apply AND --i-am-steve.
* Overrides ONLY the GOOGLE title via the supplemental source — NEVER Shopify, price,
* availability, or the on-site PDP. Idempotent: re-inserting the same offerId just
- * re-writes the same override (Google merges by offerId). Reversible: delete the
- * productInputs (or drop the supplemental source's overrides) — see the memo.
+ * re-writes the same override (Google merges by offerId). Restoration requires
+ * separately reviewed per-offer preimages and a verified restoration procedure.
*
* IDEMPOTENCY: reuses the SINGLE existing linked datasource resolved by displayName — it does
* NOT create a datasource, so a re-fire can never spawn duplicates.
* GUARD: HARD-ABORTS unless EVERY row's proposedTitle begins with "Sample".
- * Optional: pass an explicit `accounts/146735262/dataSources/<id>` to override the resolver.
+ * Optional: pass an explicit `accounts/146735262/dataSources/<id>` to select the same verified, uniquely linked source.
*/
import fs from 'node:fs';
import path from 'node:path';
@@ -22,7 +22,7 @@ import { fileURLToPath } from 'node:url';
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const { token, MERCHANT } = require('./_auth');
-const { resolveSampleTitleDS } = await import('./build-mdc-sample-titles.mjs');
+import { resolveSampleTitleDS } from './resolve-mdc-sample-source.mjs';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const argv = process.argv.slice(2);
@@ -42,8 +42,9 @@ if (bad.length) {
const sleep = ms => new Promise(r => setTimeout(r, ms));
(async () => {
const tok = await token();
- let DS = DS_ARG;
- if (!DS) { const r = await resolveSampleTitleDS(tok); DS = r.name; console.log(`resolved datasource: ${DS} ${r.linked ? '(linked to primary ✓)' : '(NOT LINKED — override will not merge!)'}`); }
+ const resolved = await resolveSampleTitleDS(tok, { merchant: MERCHANT, explicitSource: DS_ARG });
+ const DS = resolved.name;
+ console.log(`resolved datasource: ${DS} (linked to primary ✓)`);
console.log(`push-mdc-sample-titles — mode: ${APPLY ? '⚠️ LIVE APPLY' : 'DRY-RUN (no writes)'}`);
console.log(`overrides: ${list.length} (all begin with "Sample" ✓) → ${DS}`);
if (!APPLY) {
diff --git a/resolve-mdc-sample-source.mjs b/resolve-mdc-sample-source.mjs
new file mode 100644
index 0000000..b7d280d
--- /dev/null
+++ b/resolve-mdc-sample-source.mjs
@@ -0,0 +1,56 @@
+/** Auth-free, fail-closed selection of the unique primary-linked sample-title source. */
+export async function resolveSampleTitleDS(tok, {
+ merchant = '146735262', fetchImpl = globalThis.fetch, explicitSource,
+ maxPages = 100,
+} = {}) {
+ if (!/^[0-9]+$/.test(String(merchant))) throw new Error('invalid merchant');
+ if (!Number.isInteger(maxPages) || maxPages < 1) throw new Error('invalid page limit');
+ const prefix = `accounts/${merchant}/dataSources/`;
+ const validName = name => typeof name === 'string' && name.startsWith(prefix) && /^[0-9]+$/.test(name.slice(prefix.length));
+ if (explicitSource !== undefined && !validName(explicitSource)) throw new Error('explicit source is malformed or belongs to another account');
+ const isObject = value => value !== null && typeof value === 'object' && !Array.isArray(value);
+ const all = [], seenTokens = new Set(), seenNames = new Set();
+ let pageToken;
+ for (let page = 0; page < maxPages; page++) {
+ const url = new URL(`https://merchantapi.googleapis.com/datasources/v1/accounts/${merchant}/dataSources`);
+ if (pageToken) url.searchParams.set('pageToken', pageToken);
+ const response = await fetchImpl(url.toString(), { headers: { Authorization: 'Bearer ' + tok } });
+ if (!response.ok) throw new Error(`source listing failed: HTTP ${response.status}`);
+ const body = await response.json();
+ if (!isObject(body) || body.error || !Array.isArray(body.dataSources)) throw new Error('source listing is malformed or incomplete');
+ for (const source of body.dataSources) {
+ if (!isObject(source) || !validName(source.name) || seenNames.has(source.name)) throw new Error('source listing has invalid or duplicate resource names');
+ for (const key of ['primaryProductDataSource', 'supplementalProductDataSource']) {
+ if (source[key] !== undefined && !isObject(source[key])) throw new Error('source listing has malformed source type');
+ }
+ const rule = source.primaryProductDataSource?.defaultRule;
+ if (rule !== undefined && !isObject(rule)) throw new Error('source listing has malformed default rule');
+ seenNames.add(source.name);
+ all.push(source);
+ }
+ pageToken = body.nextPageToken;
+ if (pageToken === undefined || pageToken === '') break;
+ if (typeof pageToken !== 'string' || seenTokens.has(pageToken)) throw new Error('source listing has invalid or repeated page token');
+ seenTokens.add(pageToken);
+ if (page === maxPages - 1) throw new Error('source listing incomplete: page limit reached');
+ }
+ const linked = new Set();
+ for (const source of all) {
+ const takes = source.primaryProductDataSource?.defaultRule?.takeFromDataSources;
+ if (takes === undefined) continue;
+ if (!Array.isArray(takes)) throw new Error('source listing has malformed primary links');
+ for (const take of takes) {
+ if (!isObject(take)) throw new Error('source listing has malformed primary link');
+ if (take.supplementalDataSourceName !== undefined) {
+ if (!validName(take.supplementalDataSourceName)) throw new Error('source listing has invalid supplemental link');
+ linked.add(take.supplementalDataSourceName);
+ }
+ }
+ }
+ const named = all.filter(source => source.supplementalProductDataSource && source.displayName === 'DW Sample Title Overrides');
+ const candidates = named.filter(source => linked.has(source.name));
+ if (candidates.length !== 1) throw new Error(`expected one primary-linked sample title source; found ${candidates.length}`);
+ const chosen = candidates[0];
+ if (explicitSource !== undefined && explicitSource !== chosen.name) throw new Error('explicit source is not the unique primary-linked sample title source');
+ return { name: chosen.name, linked: true, duplicates: named.filter(source => source.name !== chosen.name).map(source => source.name) };
+}
diff --git a/test-mdc-source-guard.mjs b/test-mdc-source-guard.mjs
new file mode 100644
index 0000000..a3d91eb
--- /dev/null
+++ b/test-mdc-source-guard.mjs
@@ -0,0 +1,123 @@
+import assert from 'node:assert/strict';
+import fs from 'node:fs';
+import os from 'node:os';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { spawnSync } from 'node:child_process';
+import { resolveSampleTitleDS } from './resolve-mdc-sample-source.mjs';
+import { mdcSampleTitle } from './build-mdc-sample-titles.mjs';
+
+const root = path.dirname(fileURLToPath(import.meta.url));
+const temp = fs.mkdtempSync(path.join(os.tmpdir(), 'mdc-source-proof-'));
+const source = id => `accounts/146735262/dataSources/${id}`;
+const supplemental = id => ({ name: source(id), displayName: 'DW Sample Title Overrides', supplementalProductDataSource: {} });
+const primary = ids => ({ name: source(1), primaryProductDataSource: { defaultRule: { takeFromDataSources: ids.map(id => ({ supplementalDataSourceName: source(id) })) } } });
+const valid = { dataSources: [primary([2]), supplemental(2), supplemental(3)] };
+const preloader = path.join(temp, 'offline-preload.cjs');
+fs.writeFileSync(preloader, `
+const fs = require('node:fs');
+const Module = require('node:module');
+const fixture = JSON.parse(fs.readFileSync(process.env.MDC_FIXTURE, 'utf8'));
+const originalRead = fs.readFileSync;
+const events = [];
+process.on('exit', () => fs.writeFileSync(process.env.MDC_TRACE, JSON.stringify(events)));
+require('node:net').Socket.prototype.connect = () => { throw new Error('network forbidden'); };
+const originalLoad = Module._load;
+Module._load = function(id, parent, main) {
+ if (id === './_auth') { events.push({ type: 'stub-auth' }); return { MERCHANT: '146735262', token: async () => 'offline-token' }; }
+ if (String(id).endsWith('/config/showroom-vendor.cjs')) return { hasShowroomTag: tags => tags.includes('Showroom') };
+ return originalLoad.call(this, id, parent, main);
+};
+fs.readFileSync = function(file, ...args) {
+ if (String(file).endsWith('/secrets-manager/.env')) return 'SHOPIFY_ADMIN_TOKEN=offline-token';
+ if (String(file).endsWith('/data/mdc-sample-title-overrides.json')) return JSON.stringify([{ offerId: '99', currentTitle: 'Fixture', proposedTitle: 'Sample — Fixture — Memo Swatch' }]);
+ return originalRead.call(this, file, ...args);
+};
+let page = 0;
+globalThis.fetch = async (url, options = {}) => {
+ const u = new URL(String(url));
+ if (u.pathname.endsWith('/dataSources') && !options.method) {
+ events.push({ type: 'list', token: u.searchParams.get('pageToken') });
+ const response = fixture.pages[page++];
+ if (!response) throw new Error('fixture listing exhausted');
+ if (response.throw) throw new Error(response.throw);
+ return { ok: response.status === undefined || response.status === 200, status: response.status || 200, json: async () => { if (response.invalidJson) throw new Error('invalid JSON'); return response.body; } };
+ }
+ if (u.pathname.endsWith('/productInputs:insert') && options.method === 'POST') {
+ events.push({ type: 'insert', source: u.searchParams.get('dataSource'), body: JSON.parse(options.body) });
+ return { ok: true, status: 200 };
+ }
+ throw new Error('unexpected fetch: ' + url);
+};
+`);
+
+const tests = [
+ ['missing', [{ body: { dataSources: [primary([])] } }]],
+ ['unlinked', [{ body: { dataSources: [primary([]), supplemental(2)] } }]],
+ ['ambiguous', [{ body: { dataSources: [primary([2,3]), supplemental(2), supplemental(3)] } }]],
+ ['HTTP failure', [{ status: 503, body: valid }]],
+ ['error envelope', [{ body: { ...valid, error: { message: 'failure' } } }]],
+ ['malformed listing', [{ body: {} }]],
+ ['invalid JSON', [{ invalidJson: true }]],
+ ['network error', [{ throw: 'offline request failed' }]],
+ ['incomplete second page', [{ body: { ...valid, nextPageToken: 'page2' } }, { status: 503, body: {} }]],
+ ['repeated page token', [{ body: { dataSources: [primary([2])], nextPageToken: 'x' } }, { body: { dataSources: [supplemental(2)], nextPageToken: 'x' } }]],
+ ['duplicate resource name', [{ body: { dataSources: [...valid.dataSources, supplemental(2)] } }]],
+];
+let count = 0;
+function cli(label, pages, explicitSource, expectedSuccess = false, builder = false) {
+ const fixture = path.join(temp, `fixture-${count}.json`), trace = path.join(temp, `trace-${count}.json`);
+ fs.writeFileSync(fixture, JSON.stringify({ pages }));
+ const argv = ['--require', preloader, path.join(root, builder ? 'build-mdc-sample-titles.mjs' : 'push-mdc-sample-titles.mjs'), '--apply', '--i-am-steve'];
+ if (explicitSource) argv.push(explicitSource);
+ const result = spawnSync(process.execPath, argv, { encoding: 'utf8', timeout: 5000, env: { ...process.env, MDC_FIXTURE: fixture, MDC_TRACE: trace } });
+ assert.ifError(result.error);
+ const events = JSON.parse(fs.readFileSync(trace));
+ fs.writeFileSync(path.join(temp, `cli-${count}.txt`), result.stdout + result.stderr);
+ const inserts = events.filter(e => e.type === 'insert');
+ if (expectedSuccess) {
+ assert.equal(result.status, 0, result.stderr);
+ assert.equal(inserts.length, 1);
+ assert.equal(inserts[0].source, source(2));
+ assert.equal(events.at(-1).type, 'insert');
+ } else {
+ assert.notEqual(result.status, 0, label);
+ assert.equal(inserts.length, 0, label + ' must stop before insert');
+ }
+ count++;
+ console.log('PASS | ' + label + ' | ' + (builder ? 'builder' : explicitSource ? 'explicit pusher' : 'default pusher'));
+}
+for (const malformed of [null, [], 'not-an-object']) {
+ for (const key of ['primaryProductDataSource', 'supplementalProductDataSource']) {
+ const rows = structuredClone(valid.dataSources);
+ const index = key === 'primaryProductDataSource' ? 0 : 1;
+ rows[index][key] = malformed;
+ tests.push(['malformed ' + key + ': ' + JSON.stringify(malformed), [{ body: { dataSources: rows } }]]);
+ }
+ const rows = structuredClone(valid.dataSources);
+ rows[0].primaryProductDataSource.defaultRule = malformed;
+ tests.push(['malformed default rule: ' + JSON.stringify(malformed), [{ body: { dataSources: rows } }]]);
+ const links = structuredClone(valid.dataSources);
+ links[0].primaryProductDataSource.defaultRule.takeFromDataSources.push(malformed);
+ tests.push(['malformed link: ' + JSON.stringify(malformed), [{ body: { dataSources: links } }]]);
+}
+for (const [label, pages] of tests) {
+ cli(label, pages);
+ cli(label, pages, source(2));
+ cli(label, pages, undefined, false, true);
+}
+for (const id of [source(3), source(999), 'accounts/999/dataSources/2', source('invalid')]) cli('explicit bypass rejected: ' + id, [{ body: valid }], id);
+cli('valid uniquely linked', [{ body: valid }], undefined, true);
+cli('valid explicit linked', [{ body: valid }], source(2), true);
+const paginated = [{ body: { dataSources: [primary([2])], nextPageToken: 'next with + /' } }, { body: { dataSources: [supplemental(2)] } }];
+cli('valid complete pagination', paginated, undefined, true);
+const pageLimitFetch = async () => ({ ok: true, json: async () => ({ ...valid, nextPageToken: 'more' }) });
+await assert.rejects(resolveSampleTitleDS('offline-token', { fetchImpl: pageLimitFetch, maxPages: 1 }), /page limit reached/);
+count++;
+console.log('PASS | resolver page limit rejects incomplete listing');
+assert.ok(mdcSampleTitle('Fixture | Phillipe Romano').startsWith('Sample'));
+count++;
+console.log('PASS | builder import and transform remain auth-free');
+const report = { status: 'PASS', assertions: count, evidence: temp, scope: 'offline rejection boundary; live source outcome remains blocked', retainedFixtures: true };
+fs.writeFileSync(path.join(temp, 'audit.json'), JSON.stringify(report, null, 2));
+console.log(JSON.stringify(report));
diff --git a/verification/e2e-proof.json b/verification/e2e-proof.json
index b0ab3e8..b3072ad 100644
--- a/verification/e2e-proof.json
+++ b/verification/e2e-proof.json
@@ -1,73 +1,38 @@
{
- "ticket": "TK-10993",
- "agent": "codex-run-10993",
- "intent": "Execute and independently verify Steve-approved 19 Google landing-link and 14 description corrections",
- "risk_tier": "R4",
- "environment": {
- "merchant": "146735262",
- "shopify": "designer-laboratory-sandbox",
- "api": "Merchant products/v1 single-field PATCH"
- },
- "timestamp": "2026-09-05T07:25:07.335226+00:00",
- "authorization": {
- "ticket": "TK-10993",
- "approved_by": "Steve",
- "authorization": "22TK-10993 is blocked at your live- feed gate approve ungate!!!",
- "scope": "19 link and 14 description corrections from manifest",
- "manifest_sha256": "ead4af90c8e149947e23f77add89cd02ea87f0a7e251d769db8a198b07d24818",
- "recorded_at": "2026-09-05T07:03:08.328723+00:00"
- },
- "manifest_sha256": "ead4af90c8e149947e23f77add89cd02ea87f0a7e251d769db8a198b07d24818",
- "documented_preflight_refinement": "verification/tk10993-20260905-link-preflight-amendment.json",
+ "intent": "Fail closed before insert for unresolved sample-title source selection",
+ "risk_tier": "R1 isolated code; external deployment remains blocked",
+ "environment": "Isolated worktree; offline auth/fetch stubs; real CLI subprocesses",
+ "base_commit": "8bc8356720606be4cc06ab60f3c03737cc4d9247",
+ "timestamp": "2026-09-09T18:49:17.695633+00:00",
+ "ticket": "TK-11307",
+ "correlation": "dm-mtug50la-61688-skhph3",
+ "commands": [
+ "node test-mdc-source-guard.mjs",
+ "git diff --check"
+ ],
"checks": [
{
- "name": "Pinned scope, field-mask/negative tests, rollback rehearsal",
- "verdict": "PASS",
- "evidence": "6 tests; reverse PATCH restores only affected field; no real rollback fired"
- },
- {
- "name": "Six live canary responses",
- "verdict": "PASS",
- "evidence": "6 accepted with full before snapshots, manifest-bound hashes and prior intent records"
- },
- {
- "name": "Canary served view",
- "verdict": "PASS",
- "evidence": "verify-2026-09-05T07-08-00-350Z.json: correct6, errors0, collateral0, age218s"
- },
- {
- "name": "Customer destinations",
"verdict": "PASS",
- "evidence": "public-landings-2026-09-05T07-09-43-087Z.json: all19 HTTP200 with public JSON requested variant present"
+ "name": "CLI boundary negatives and stub happy path",
+ "assertions": 78,
+ "evidence": "/var/folders/rq/j8g1f7nn6jv6_lr1cfmqym6w0000gn/T/mdc-source-proof-rG50t7"
},
{
- "name": "720-second canary observation before rest",
"verdict": "PASS",
- "evidence": "canary-pass.json: 741 seconds, six correct, zero errors/collateral/new disapprovals"
+ "name": "Main HEAD, all tracked file hashes, dirty/untracked status preserved",
+ "evidence": "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260909T1836Z.rZWqkR/mdc-main-preserved.json"
},
{
- "name": "All33 live field corrections verified",
"verdict": "PASS",
- "evidence": "data/tk10993-approved-residual-20260905/verify-2026-09-05T07-22-08-600Z.json: correct33/33, errors0, unrelated changes0, new disapprovals0"
+ "name": "No real auth reads or networking; stub imports intercept before reading; fetch constrained; socket guard installed"
},
{
- "name": "Independent post-apply regression audit",
- "verdict": "PASS",
- "evidence": "verification/tk10993-20260905-post-apply-final.json: destamp40/40, protected10/10, F3links22/22, identitycopy82/82"
+ "verdict": "SKIP",
+ "name": "Live processed product state, source identity, preimages, canary, runtime integration",
+ "reason": "Out of scope and unapproved; source outcome remains blocked"
}
],
- "side_effect_boundary": "No inserts/deletes, Shopify writes, price changes, shipping-setting changes, or remote pushes. Only approved link/description PATCHes.",
- "commands": [
- "node --test test/tk10993-residual-executor.test.mjs",
- "node tk10993-residual-executor.mjs preflight",
- "node tk10993-residual-executor.mjs canary --apply-approved",
- "node tk10993-residual-executor.mjs verify",
- "node tk10993-residual-executor.mjs public-landings",
- "node tk10993-residual-executor.mjs rollback-plan",
- "node tk10993-residual-executor.mjs rest --apply-approved"
- ],
- "rollback": "Per-record before snapshots and reverse single-field PATCH requests; simulated restore tested. No live reversal was needed.",
- "verdict": "PASS_APPROVED_33_CORRECTIONS",
- "broader_ticket_status": "Still open: overnight durability observation and fresh Canada full-coverage assessment. Approved33-field gate resolved.",
- "rollback_plan": "data/tk10993-approved-residual-20260905/rollback-plan-2026-09-05T07-22-54-719Z.json"
+ "retained_state": "All temporary fixtures and worktree retained; no cleanup deletion",
+ "verdict": "PARTIAL overall; bounded offline increment passes",
+ "safest_next_action": "Parent independently reruns suite and reviews isolated commit; leave runtime unchanged"
}
← 042d3cd TK-11233: reporting-context hypothesis for the LPE count gap
·
back to Gmc Titlefix
·
Require MDC CLI tests to prove intended source rejection 6ed630b →