Skip to content

capabilities: kline/intraday/news 把 epoch 秒写进 provenance.marketTime(应为毫秒) #162

Description

@wxrbyte

问题

三个 capability manifest 直接把 epoch 的时间戳写进 provenance.marketTime
而该字段在所有其它产出方都是 epoch 毫秒

// packages/shared/src/capabilities/manifests/market-kline.ts:51
marketTime: klines[klines.length - 1]?.timestamp
// packages/shared/src/capabilities/manifests/market-intraday.ts:32
marketTime: data[data.length - 1]?.timestamp
// packages/shared/src/capabilities/manifests/research-news.ts:37
marketTime: news[0]?.timestamp

marketTime 是毫秒而非秒的依据

  1. market-quote.ts:51marketTime: quote.timestamp * 1000
  2. longbridge adapter 的 marketTimeMsFrom() 名字就带 Ms,实现是 return seconds * 1000
  3. 同一个 provenance 对象里的 fetchedAtDate.now(),即毫秒。

这些 timestamp 是秒的依据

同文件的格式化函数都乘了 1000:

  • market-kline.ts:66new Date(kline.timestamp * 1000).toLocaleDateString()
  • market-intraday.ts:47new Date(item.timestamp * 1000).toLocaleTimeString()
  • research-news.ts:54new Date(item.timestamp * 1000).toLocaleString()

复现

const cap = createMarketKlineCapability(fetchers({
  getKline: async () => [{ symbol: 'AAPL.US', timestamp: 1710000000, open: 2, high: 2, low: 2, close: 2, volume: 2 }],
}))
const result = await cap.execute({ symbol: 'AAPL.US' }, { now: () => 12345 })
result.provenance.marketTime
  • 实际:1710000000
  • 预期:1710000000000

影响

buildFinancialEvidence()packages/shared/src/evidence/financial-evidence.ts:54):

const asOf = numberValue(provenance.marketTime) ?? inferAsOf(result.data);

直接把 marketTime 当作证据信封的 asOf。所以 kline / intraday / news 三类证据的
asOf 比正确值小 1000 倍(1.71e9 而非 1.71e12)——按日期渲染或做新鲜度比较时会
落到 1970 年。research/runner.ts:355 也把这个值原样带上。

预期修复

三处统一改为 latest.timestamp * 1000,序列为空时保持 undefined

(注:phase-two.tsmarket.trades / market.capitalFlow 有同样的写法,但那些
类型的时间戳单位没有同文件证据可以确认,本次不一并改动,留待单独确认。)

环境

  • Bun 1.4.2 / Windows

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

claimedClaimed by a contributor and currently in progress

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions