diff --git a/tests/runner-e2e/CHAT-FEATURES.md b/tests/runner-e2e/CHAT-FEATURES.md index a2267a42242..c1ce3eca7e7 100644 --- a/tests/runner-e2e/CHAT-FEATURES.md +++ b/tests/runner-e2e/CHAT-FEATURES.md @@ -217,10 +217,20 @@ overlap. Exact requirements and limitations appear in each case's preconditions. A declared credential does not establish whether its runtime reference exists. This lane runs the app and fixtures from candidate -`3b66c3c144360ddf32714a0742fd774b8ceafb16`. Its app and domain definitions are -unchanged from `de0941835cc8f0d01c982574ee258e110babdbeb`; the successor adds only -finite TestOps host admission. Trusted selection, evidence transfer and publishing -use the workflow's immutable master revision. Each result records both revisions. +`9ab0f951a5b5990c266ef4456610e0a0775aa334`. It retains the evaluated app from +`3b66c3c144360ddf32714a0742fd774b8ceafb16` with four bounded fixture repairs: +owned SDK staging, public membership for three incidental human fixtures, +company settings observation inside its original case deadline, and exact +controller-secret baseline handling for secure human entry. The last repair +uses the explicit `company-secret-controller-baseline.v2` oracle. Its deployment +secret, Morgan-only binding and privacy checks remain required. + +The manifest retains the original `de0941835cc8f0d01c982574ee258e110babdbeb` +definition provenance and records each changed row field in `source.repairMetadata`. +Queries, case limits, models and the other feature predicates remain unchanged. +Original failed measurements stay historical. Trusted selection, evidence transfer +and publishing use the workflow's immutable master revision. Each result records +both revisions. A pass qualifies that candidate measurement, not the current master app. Other lanes sharing a case retain their own sources. This integration does not merge the broad catalog branch or its core fixes, reset earlier campaign ordinals, or diff --git a/tests/runner-e2e/chat-full-catalog-testops-manifest.json b/tests/runner-e2e/chat-full-catalog-testops-manifest.json index f5da21569f1..ff93faaee37 100644 --- a/tests/runner-e2e/chat-full-catalog-testops-manifest.json +++ b/tests/runner-e2e/chat-full-catalog-testops-manifest.json @@ -1,6 +1,6 @@ { "schema": "paperclip.chat-full-catalog-testops-manifest/v1", - "targetSha": "3b66c3c144360ddf32714a0742fd774b8ceafb16", + "targetSha": "9ab0f951a5b5990c266ef4456610e0a0775aa334", "metadataSourceSha": "de0941835cc8f0d01c982574ee258e110babdbeb", "profile": "runner-opencode", "model": "openrouter/deepseek/deepseek-v4.1-flash-1017", @@ -167,7 +167,100 @@ "snapshots/fixtures.json", "snapshots/api-state.json", "blob-report/*.zip" - ] + ], + "repairMetadata": { + "baseTargetSha": "3b66c3c144360ddf32714a0742fd774b8ceafb16", + "definitionSourceSha": "de0941835cc8f0d01c982574ee258e110babdbeb", + "changedFields": [ + { + "key": "companies.agent-observability", + "field": "sourceFiles", + "previous": [ + "chat-catalog-domains/identity-observability.ts", + "chat-catalog-domains/identity-private-browser.ts", + "chat-catalog-domains/identity-private-browser-worker.ts", + "chat-catalog-domains/identity-wizard.ts", + "chat-catalog-domains/identity-support.ts", + "chat-catalog-domains/internal-support.ts", + "chat-scenarios/companies.yaml" + ], + "current": [ + "chat-catalog-domains/identity-observability.ts", + "chat-catalog-domains/identity-company-observer.ts", + "chat-catalog-domains/identity-private-browser.ts", + "chat-catalog-domains/identity-private-browser-worker.ts", + "chat-catalog-domains/identity-wizard.ts", + "chat-catalog-domains/identity-support.ts", + "chat-catalog-domains/internal-support.ts", + "chat-scenarios/companies.yaml" + ] + }, + { + "key": "companies.configure-decision-model", + "field": "sourceFiles", + "previous": [ + "chat-catalog-domains/identity-company-models.ts", + "chat-catalog-domains/identity-support.ts", + "chat-catalog-domains/internal-support.ts", + "chat-scenarios/companies.yaml" + ], + "current": [ + "chat-catalog-domains/identity-company-models.ts", + "chat-catalog-domains/identity-company-observer.ts", + "chat-catalog-domains/identity-support.ts", + "chat-catalog-domains/internal-support.ts", + "chat-scenarios/companies.yaml" + ] + }, + { + "key": "companies.fast-responses", + "field": "sourceFiles", + "previous": [ + "chat-catalog-domains/identity-company-models.ts", + "chat-catalog-domains/identity-support.ts", + "chat-catalog-domains/internal-support.ts", + "chat-scenarios/companies.yaml" + ], + "current": [ + "chat-catalog-domains/identity-company-models.ts", + "chat-catalog-domains/identity-company-observer.ts", + "chat-catalog-domains/identity-support.ts", + "chat-catalog-domains/internal-support.ts", + "chat-scenarios/companies.yaml" + ] + }, + { + "key": "companies.prompt-injection-guard", + "field": "sourceFiles", + "previous": [ + "chat-catalog-domains/identity-company-models.ts", + "chat-catalog-domains/identity-support.ts", + "chat-catalog-domains/internal-support.ts", + "chat-scenarios/companies.yaml" + ], + "current": [ + "chat-catalog-domains/identity-company-models.ts", + "chat-catalog-domains/identity-company-observer.ts", + "chat-catalog-domains/identity-support.ts", + "chat-catalog-domains/internal-support.ts", + "chat-scenarios/companies.yaml" + ] + }, + { + "key": "secrets.configure-company-secret", + "field": "oracleVersion", + "previous": "paperclip.chat-catalog.external.v1", + "current": "paperclip.chat-catalog.company-secret-controller-baseline.v2" + } + ], + "conditions": [ + "Initialize owned SDK evidence staging before retention.", + "Use real public scoped membership only for three incidental human fixtures.", + "Company settings observation uses the original setup-inclusive deadline; no larger case cap.", + "Company secret setup and v2 oracle permit only exact immutable controller-bootstrap secret references." + ], + "originalMeasurements": "Preserved. These are new candidate conditions, not retroactive passes." + } }, "cases": [ { @@ -3828,6 +3921,7 @@ "oracleVersion": "paperclip.chat-catalog.identity.v1", "sourceFiles": [ "chat-catalog-domains/identity-observability.ts", + "chat-catalog-domains/identity-company-observer.ts", "chat-catalog-domains/identity-private-browser.ts", "chat-catalog-domains/identity-private-browser-worker.ts", "chat-catalog-domains/identity-wizard.ts", @@ -3917,6 +4011,7 @@ "oracleVersion": "paperclip.chat-catalog.identity.v1", "sourceFiles": [ "chat-catalog-domains/identity-company-models.ts", + "chat-catalog-domains/identity-company-observer.ts", "chat-catalog-domains/identity-support.ts", "chat-catalog-domains/internal-support.ts", "chat-scenarios/companies.yaml" @@ -4003,6 +4098,7 @@ "oracleVersion": "paperclip.chat-catalog.identity.v1", "sourceFiles": [ "chat-catalog-domains/identity-company-models.ts", + "chat-catalog-domains/identity-company-observer.ts", "chat-catalog-domains/identity-support.ts", "chat-catalog-domains/internal-support.ts", "chat-scenarios/companies.yaml" @@ -4090,6 +4186,7 @@ "oracleVersion": "paperclip.chat-catalog.identity.v1", "sourceFiles": [ "chat-catalog-domains/identity-company-models.ts", + "chat-catalog-domains/identity-company-observer.ts", "chat-catalog-domains/identity-support.ts", "chat-catalog-domains/internal-support.ts", "chat-scenarios/companies.yaml" @@ -9469,7 +9566,7 @@ "connection-setup/credentials" ], "checks": null, - "oracleVersion": "paperclip.chat-catalog.external.v1", + "oracleVersion": "paperclip.chat-catalog.company-secret-controller-baseline.v2", "sourceFiles": [ "chat-catalog-domains/external-company-secret.ts", "chat-catalog-domains/external-private-browser.ts", diff --git a/tests/runner-e2e/chat-full-catalog-testops-manifest.test.mjs b/tests/runner-e2e/chat-full-catalog-testops-manifest.test.mjs index a5108f97094..afcd3ec2e09 100644 --- a/tests/runner-e2e/chat-full-catalog-testops-manifest.test.mjs +++ b/tests/runner-e2e/chat-full-catalog-testops-manifest.test.mjs @@ -94,3 +94,25 @@ test('foreign identity, duplicated case and changed run-bound metadata are rejec const bounds = copy(); bounds.cases[0].minimumRuns = bounds.cases[0].maximumRuns + 1; assert.throws(() => validateFullCatalogManifest(bounds), /row_invalid/); }); + + +test('repair source metadata preserves original definitions and declares scoped observer and oracle changes', () => { + const repair = manifest.source.repairMetadata; + assert.equal(repair.baseTargetSha, '3b66c3c144360ddf32714a0742fd774b8ceafb16'); + assert.equal(manifest.targetSha, '9ab0f951a5b5990c266ef4456610e0a0775aa334'); + assert.equal(repair.definitionSourceSha, manifest.metadataSourceSha); + assert.deepEqual(repair.changedFields.map(value => [value.key, value.field]), [ + ['companies.agent-observability', 'sourceFiles'], ['companies.configure-decision-model', 'sourceFiles'], + ['companies.fast-responses', 'sourceFiles'], ['companies.prompt-injection-guard', 'sourceFiles'], + ['secrets.configure-company-secret', 'oracleVersion'], + ]); + for (const change of repair.changedFields) { + assert.deepEqual(row(change.key)[change.field], change.current); + if (change.field === 'sourceFiles') { + assert.deepEqual(change.current.filter(value => value !== 'chat-catalog-domains/identity-company-observer.ts'), change.previous); + } else { + assert.equal(change.previous, 'paperclip.chat-catalog.external.v1'); + assert.equal(change.current, 'paperclip.chat-catalog.company-secret-controller-baseline.v2'); + } + } +});