fix(schedule): close absolute-time review gaps

This commit is contained in:
Tianyi Cui
2026-08-09 20:29:37 +08:00
parent b7ec8429a9
commit 139b4f421e
23 changed files with 220 additions and 29 deletions

View File

@@ -141,7 +141,30 @@ describe('time-context invariants', () => {
`2026-07-14T00:00:00+00:00[${timeZone}]`,
policy,
)))
}).toThrow(/browser zone cannot format/)
}).toThrow(/browser time zone is unsupported/)
})
it('rejects one corrupt zone even when another zone would classify the turn as mixed', async () => {
const ctx = await setup()
const session = preparing(1, 1, 'Asia/Shanghai')
session.append('user/message', createUserMessage({
content: [{ type: 'text', text: 'second browser prompt' }],
source: {
kind: 'user',
rpcId: 'turn-1-invalid',
clientTimeZone: 'Not/A_Real_Zone',
} as never,
}), { surfaceOp: 'append' })
expect(() => {
ctx.emit('session/event', session, event(reading(
'1',
'1',
'model-visible message',
'2026-07-14T00:00:00+00:00[UTC]',
'Browser time zone for this request: mixed ["Asia/Shanghai","Not/A_Real_Zone"]. '
+ 'Ask the user to clarify otherwise-unqualified dates and times.',
)))
}).toThrow(/browser time zone is unsupported/)
})
it('validates each existing reading against its preceding durable prefix', async () => {

View File

@@ -33,6 +33,19 @@ describe('browser request-zone context', () => {
})
})
it('validates every browser zone before classifying a mixed turn', () => {
expect(() => deriveBrowserTimeZoneContext([
browserMessage('+08:00'),
])).toThrow(/canonical UTC or IANA Area\/Location/)
expect(() => deriveBrowserTimeZoneContext([
browserMessage('Asia/Shanghai'),
browserMessage('Not/A_Real_Zone'),
])).toThrow(/browser time zone is unsupported/)
expect(() => deriveBrowserTimeZoneContext([
browserMessage('Etc/UTC'),
])).toThrow(/browser time zone must be canonical/)
})
it('renders one explicit model policy for every context', () => {
expect(renderBrowserTimeZoneContext({ kind: 'resolved', timeZone: 'Asia/Shanghai' }))
.toContain('Interpret otherwise-unqualified dates and times in this zone.')