Small tooling chip, split out of the #1478 P5 follow-ups and named a prerequisite by #1557 (S1) — previously untracked.
Gap (verified on main ≥ 761317deb): scripts/layering/package-boundaries.test.ts pins @agent-device/ad-script only at the export-map level (exportTargets keys = ['@agent-device/ad-script'], workspace deps), while @agent-device/ad-replay additionally gets the readNamedExports exact exported-symbol pin on packages/ad-replay/src/index.ts (the #1555 review's "reviewer-required exact exported-symbol gate", with export * / export default rejection). ad-script's façade widened during P5 (identity vocabulary, classifyTargetBindingMatch, the vars module moved in) with no symbol-level ratchet — a stray export currently slips through the exports-subpath check.
Scope: mirror the ad-replay pattern — one readNamedExports assertion pinning the exact symbol list of packages/ad-script/src/index.ts, added beside the existing ad-script boundary rows. Pure test/tooling change; no production code.
Sequencing: land before the S1 spike (#1557) runs, per that issue's "after #1555 merges and the façade-ratchet follow-up lands".
Small tooling chip, split out of the #1478 P5 follow-ups and named a prerequisite by #1557 (S1) — previously untracked.
Gap (verified on
main≥761317deb):scripts/layering/package-boundaries.test.tspins@agent-device/ad-scriptonly at the export-map level (exportTargetskeys =['@agent-device/ad-script'], workspace deps), while@agent-device/ad-replayadditionally gets thereadNamedExportsexact exported-symbol pin onpackages/ad-replay/src/index.ts(the #1555 review's "reviewer-required exact exported-symbol gate", withexport */export defaultrejection). ad-script's façade widened during P5 (identity vocabulary,classifyTargetBindingMatch, the vars module moved in) with no symbol-level ratchet — a stray export currently slips through the exports-subpath check.Scope: mirror the ad-replay pattern — one
readNamedExportsassertion pinning the exact symbol list ofpackages/ad-script/src/index.ts, added beside the existing ad-script boundary rows. Pure test/tooling change; no production code.Sequencing: land before the S1 spike (#1557) runs, per that issue's "after #1555 merges and the façade-ratchet follow-up lands".