merge: sync test and stabilize full acceptance

This commit is contained in:
2026-09-09 21:14:25 +08:00
40 changed files with 595 additions and 134 deletions
@@ -47,7 +47,7 @@ function context(resources = {}) {
if (token === this.overseasToken) return response(path, null, 403, 'A0403')
if (path.includes('/overview')) return response(path, { container: {
id: '3001', containerNo: 'MSCU1234567', unloadingCompletedAt: '2026-08-24T10:00:00Z',
unloadingPhotoUploadedAt: '2026-08-24T09:00:00Z', estimatedEmptyReportedAt: '2026-08-26T09:00:00Z',
unloadingPhotoUploadedAt: '2026-08-24T09:00:00Z', estimatedEmptyReportedAt: '2026-08-27T10:00:00Z',
actualEmptyReportedAt: null, emptyReportSourceVersion: 7,
} })
return response(path, { records: [{ container: { id: '3001', containerNo: 'MSCU1234567' } }] })
@@ -103,6 +103,13 @@ test('cross-region producers do not repeat the destructive A0 snapshot mutation'
assert.match(fixtureCall, /preparePhase3LoadingFixture\('', false\)/)
})
test('tail controls receive their own completed producer matrix before they consume it', async () => {
const entry = await import('node:fs/promises').then((fs) => fs.readFile(
new URL('../admin-test-env-acceptance.mjs', import.meta.url), 'utf8'))
assert.match(entry, /module === 'phase4-tail-order-controls' \|\| module === 'phase4-overseas-pda'/)
assert.match(entry, /await this\.ensurePhase4PdaProducerMatrix\(\)/)
})
test('contract covers dual audience, canonical 403, both event directions and diagnostics', () => {
for (const token of [
'context.token)', 'context.overseasToken)', 'cn-overseas-event-not-delivered',