fix(rectification): use candidate dates for cross-midnight dasha scoring

Add date-isolated caches and regression coverage, align scoring identity, and freeze full research reruns while preserving historical artifacts. Record unresolved cache/receipt identity and end-to-end acceptance gaps for branch review only.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
jesse-ux
2026-09-20 13:56:11 +08:00
co-authored by Claude Code
parent 03cba4780a
commit aa46da1016
49 changed files with 62080 additions and 109 deletions
@@ -0,0 +1,89 @@
{
"scope": "cross_midnight_regression_acceptance",
"baseline_commit": "03cba4780a220b132cf4f06d22e14608aaf9ad3c",
"baseline_test_tree": "932f2fffba820a47fa4e1a7b825d6b38c310a4d6",
"baseline_test_tree_reason": "The two later commits contain task documentation only; baseline executable sources are unchanged.",
"python_globs": ["test_rectification_*.py", "test_active_rectification_*.py", "test_minute_rectification_*.py"],
"baseline": {
"collected": 284,
"passed": 280,
"failed": 4,
"failure_ids": [
"tests/test_active_rectification_api.py::test_long_real_conversation_reaches_vedastro_after_local_range_is_narrow",
"tests/test_active_rectification_selector.py::test_selector_changes_do_not_change_legacy_or_v5_score_bytes",
"tests/test_minute_rectification_development.py::test_v3_development_result_stays_shadow_only",
"tests/test_minute_rectification_holdout_validator.py::test_frozen_implementation_hash_matches_manifest"
]
},
"current": {
"collected": 300,
"passed": 296,
"failed": 4,
"seconds": 609.52,
"exit_code": 1,
"failure_ids": [
"tests/test_active_rectification_api.py::test_long_real_conversation_reaches_vedastro_after_local_range_is_narrow",
"tests/test_active_rectification_selector.py::test_selector_changes_do_not_change_legacy_or_v5_score_bytes",
"tests/test_minute_rectification_development.py::test_v3_development_result_stays_shadow_only",
"tests/test_minute_rectification_holdout_validator.py::test_frozen_implementation_hash_matches_manifest"
],
"baseline_only_failures": [],
"current_only_failures": [],
"baseline_failure_assertion_values_unchanged": true,
"full_suite_passed": false,
"zero_new_failures": true
},
"metadata_alignment_independent_targeted": {
"passed": 25,
"failed": 0,
"seconds": 2.04
},
"pre_metadata_alignment_run": {
"collected": 300,
"passed": 294,
"failed": 6,
"baseline_failures_unchanged": true,
"new_failure_ids": [
"tests/test_rectification_engine_memoization.py::test_score_candidates_matches_baseline_golden",
"tests/test_rectification_relative_support.py::RelativeSupportScaleTest::test_holdout_gate_keeps_proportional_default"
],
"observed_new_failures": [
"decision_receipt.representative_candidate_id differs from the existing golden; root cause under verification",
"ALGORITHM_VERSION is rectification-v5-matrix-scoring-8; existing assertion expects rectification-v5-matrix-scoring-7"
]
},
"metadata_alignment": {
"reason": "Authorized algorithm identity bump from rectification-v5-matrix-scoring-7 to rectification-v5-matrix-scoring-8",
"golden_updated_paths": [
"decision_receipt.representative_candidate_id",
"candidate_feature_snapshot.algorithm_version"
],
"golden_source": "Two identity leaves extracted from the real engine after old/new identity A/B comparison",
"all_other_golden_leaves_equal_to_git_baseline": true,
"comparison_logic_unchanged": true,
"relative_support_and_policy_assertions_unchanged": true,
"version_literal_assertion_updated": true
},
"final_integrity_and_privacy_targeted": {
"passed": 86,
"failed": 0,
"seconds": 13.17
},
"independent_research_audit": {
"passed": true,
"scope": "Real source hashes, archived bytes, 900/20 coverage and arithmetic summaries, 45 Markdown cells and final report references; not a second scoring rerun or end-to-end deployment test"
},
"preflight": {
"remote_verified": true,
"fragment_scan_ok": true,
"external_engine_adapters_ok": true,
"passed": false,
"failed_test": "test_preflight_fragment_scan_reports_authority_layers_and_risk_buckets"
},
"quick": {
"baseline_passed": false,
"current_passed": false,
"same_blocker": "interpretation_source_inventory_gate.py: ModuleNotFoundError: No module named 'mcp'"
},
"deployment_verified": false
}
@@ -0,0 +1,25 @@
# 跨午夜修复 · 部署与受控环境验收(2026-09-20)
> 本清单不是通过证明。执行记录见 `../tasks/PROGRESS-rectification-cross-midnight-20260920.md`。不使用或索取真实用户出生资料,不借用账号或读取密钥。
## 发布身份
- [ ] Gitea 本轮含门禁路径提交的质量门成功;镜像 digest 与 deploy-staging 运行绑定同一提交。
- [ ] staging `/api/health``deployment.gitCommit``apiGitCommit` 等于该提交;如 head 后续仅纯文档,执行 docs-only-range 检查。
- [ ] `/login` 正常、匿名 `/api/account` 返回 401;在授权的内部健康检查中 `swisseph_available=true`。不得发布 API 内网端口。
- [ ] 由授权运维只读核实 `RECTIFICATION_ENGINE_VERSION` 没有锁定修复前算法身份;不得输出环境文件。环境覆盖可能绕过默认串并使客户端版本探测优先使用旧身份。
- [ ] 版本接口与新评分响应实际算法标记均为 `rectification-v5-matrix-scoring-8`,成功回执同源;不把仅 started 回执新版当作成功结果新版。
## 历史与缓存(受控测试账号、明确虚构数据)
- [ ] 打开既有校正会话:仍按其绑定 Skill 包身份运行,旧回执不被重新标成新版,不出现 `skill_identity_mismatch`
- [ ] 使用已有旧算法分数缓存的测试会话再次计算同一输入:分别覆盖 minute 与 block_scan。minute 在版本探测成功且无旧环境覆盖时不得把旧缓存当新版;**block_scan 当前仍仅检查证据指纹,未做身份失效,属于已确认未通过项,不能勾选通过**。
- [ ] 分别检查成功回执原始来源与聚合展示,不能只看 started 的新版标记;现有 SQL `max(engine_version)` 可能覆盖成功阶段的旧版本,不得把聚合标签当作已重新计算的证据。
- [ ] 创建新测试会话并完成评分:started 与 succeeded 回执均有实际版本,最终展示可区分新旧结果;不改变历史数据或 SQL。
- [ ] 跨午夜申报窗口与 late-night 时段不被缩小或改映射;结果只作为候选参考,确认门仍关闭。
## 本机已知缺口的补验
- [ ] 在具备 mcp 等既有项目依赖的 Python 环境运行 `scripts/run_quality_gate.py --profile quick`;不得修改历史冻结哈希/弱化断言来求通过。
- [ ] 使用完整依赖与有效 symlink 的前端环境运行 tsc、lint、相关及全量测试、build;首页 `/` 保持 Static,首屏 gzip 与本轮基线相比在 ±2%。
- [ ] 若测试环境无 DB/浏览器/受控登录态,分别记为缺口;测试替身证明路由与身份传递,不替代线上数据库和真人开会话验收。
@@ -0,0 +1,255 @@
{
"phase": "Final rerun after confirmation-gate report-path update; earlier candidate run retained separately",
"baseline": {
"tests": 3486,
"pass": 3407,
"fail": 79,
"skipped": 0,
"failures": [
"admin code functions reject immutable codes, revoked redemption, and roll back on audit failure",
"operation-level admin email reauthentication is removed from routes and UI",
"rectification agent maps setup failures without calling the rest of the handler",
"public code never imports the internal dynamic choice contract",
"tests\\\\birth-time-guide-agent.test.ts",
"candidate scores stay out of the specified client ownership boundary",
"personal Agent exposes the Jyotish Skill and named server tool",
"general agent runtime has no Jyotish skill package and no personal chart tool",
"the route's own strict checklist reaches the answer, not just the package listing",
"a route the skill declares no checklist for is reported, not filled in with another route's",
"health uses the skill's health-timing-strict checklist",
"wealth uses finance-timing-strict as the live checklist, with the wealth alias in the heading",
"a multi-domain plan carries every executed route's checklist once",
"no plan can spend the answer's context on method",
"the widest legal plan still fits the budget",
"further reading offers the references the skill names, and only ones that exist",
"the delivered method is quoted from the live skill tree",
"tests\\\\consultation-workflow-request.test.ts",
"admin customer reset clears only rebuildable application state",
"service and restricted admin database identities stay separated",
"Owner recovery grants only one currently loginable synced identity admin",
"staging backups are encrypted, atomic, private, and retain the newest three",
"rejects destructive backup directory aliases and symlink components before mutation",
"rejects unsafe writable backup parents before creating the target",
"rejects a direct canonical sticky shared backup directory before chmod",
"creates every absent backup path component privately despite a permissive caller umask",
"same-second backups publish once without overwriting the completed archive",
"find enumeration failures preserve existing backups and do not report completion",
"refuses full disks and removes a failed-pipeline partial file",
"billing order adjustments and redemption reasons are atomic and audited",
"billing, subscriptions, usage authorization, RBAC, and model publication remain transactional",
"saving a published product forks a draft and delete retires or removes it",
"append_consultation_question ignores thinking fields and enforces the physical JSON cap",
"database env validator accepts punctuated literal required secrets",
"database env validator rejects symlinks and unsafe modes",
"database env validator enforces an explicit staging owner uid without printing values",
"database env validator accepts a private valid file without printing values",
"local PostgreSQL applies the reviewed business schema and serves authenticated business calls",
"personal_reports.card_summary is nullable, owner-read, service-written, and length-capped",
"personal report job migration is atomic, lease-bound, recoverable, and owner read-only",
"longform appendices are owner-read, service-written, and never change report status",
"personal report sections enforce owner-read RLS and service-owned durable transitions",
"block_scan RPCs are service_role-only and advance a declared period",
"redeem security: case-sensitive hashing, rate limiting, idempotency and order ownership",
"read_report_candidate_range is service_role-only, returns only the window, and stays empty without rows",
"self-hosted identity migration creates Better Auth tables with least privilege",
"database roles have no cluster privileges",
"every color token used as a Tailwind utility is exposed through @theme",
"staging model provider env preparation removes legacy settings and keeps one stable key",
"staging env validator rejects selector drift, duplicates, and unsafe permissions",
"production env validators accept only self-hosted production selectors and role URLs",
"Better Auth supports shared user OTP/password sessions for admins",
"database drops secret refs, generates immutable codes, and invalidates evidence after key rotation",
"job migration mirror is exact and preserves personal_reports as the document projection",
"document v2 and durable job migrations are exact db/supabase mirrors",
"document v2 migration preserves v1 reads and adds explicit product depth",
"durable job migration defines the complete state, lease, retry, and identity contract",
"durable job migration atomically enqueues reports and exposes lease RPCs only to service_role",
"ingest P0: education kinds, batch confirm, opening focus reuse, precision lock",
"PR-4 candidate decisions use server UUIDs, receipt-derived gates and separate acceptance/confirmation",
"tests\\\\rectification-v9-agent.test.ts",
"v9 migration applies on a fresh database and re-applies idempotently",
"v9 open is atomic, idempotent and allows separate homepage cases",
"v9 enforces profile gating, ownership and terminal read-only",
"v9 evidence lifecycle: quote grounding, idempotency, confirm and revision lineage",
"v9 legacy backfill maps statuses, keeps one resumable per user and is idempotent",
"v9 agent api migration applies, seeds the runtime flag and guards consent",
"v9 ignores a historical active minute and allows reselection within the live result",
"tests\\\\skill-binding.test.ts",
"immutable Skill migration enforces RPC-only identity, legacy adoption, and cascade-safe receipts",
"checked-in registry verifies hashed product packages and leaves consult on the live skill",
"path traversal and symlink escape fail closed",
"symbolic links are rejected even when their target stays inside the project root",
"live consult skill reads a hand-updated tree without a registry hash",
"changed staging workflows are syntactically valid YAML",
"live staging sync preserves env, state, incoming files, and encrypted backups",
"live staging sync repairs nested deploy-tree drift without preserving foreign ownership",
"first immutable deployment rolls back to validated local image IDs",
"is-docs-only-range.sh decides from local history and refuses non-ancestor ranges"
]
},
"final": {
"tests": 3493,
"pass": 3414,
"fail": 79,
"skipped": 0,
"failures": [
"admin code functions reject immutable codes, revoked redemption, and roll back on audit failure",
"operation-level admin email reauthentication is removed from routes and UI",
"rectification agent maps setup failures without calling the rest of the handler",
"public code never imports the internal dynamic choice contract",
"tests\\\\birth-time-guide-agent.test.ts",
"candidate scores stay out of the specified client ownership boundary",
"personal Agent exposes the Jyotish Skill and named server tool",
"general agent runtime has no Jyotish skill package and no personal chart tool",
"the route's own strict checklist reaches the answer, not just the package listing",
"a route the skill declares no checklist for is reported, not filled in with another route's",
"health uses the skill's health-timing-strict checklist",
"wealth uses finance-timing-strict as the live checklist, with the wealth alias in the heading",
"a multi-domain plan carries every executed route's checklist once",
"no plan can spend the answer's context on method",
"the widest legal plan still fits the budget",
"further reading offers the references the skill names, and only ones that exist",
"the delivered method is quoted from the live skill tree",
"tests\\\\consultation-workflow-request.test.ts",
"admin customer reset clears only rebuildable application state",
"service and restricted admin database identities stay separated",
"Owner recovery grants only one currently loginable synced identity admin",
"staging backups are encrypted, atomic, private, and retain the newest three",
"rejects destructive backup directory aliases and symlink components before mutation",
"rejects unsafe writable backup parents before creating the target",
"rejects a direct canonical sticky shared backup directory before chmod",
"creates every absent backup path component privately despite a permissive caller umask",
"same-second backups publish once without overwriting the completed archive",
"find enumeration failures preserve existing backups and do not report completion",
"refuses full disks and removes a failed-pipeline partial file",
"billing order adjustments and redemption reasons are atomic and audited",
"billing, subscriptions, usage authorization, RBAC, and model publication remain transactional",
"saving a published product forks a draft and delete retires or removes it",
"append_consultation_question ignores thinking fields and enforces the physical JSON cap",
"database env validator accepts punctuated literal required secrets",
"database env validator rejects symlinks and unsafe modes",
"database env validator enforces an explicit staging owner uid without printing values",
"database env validator accepts a private valid file without printing values",
"local PostgreSQL applies the reviewed business schema and serves authenticated business calls",
"personal_reports.card_summary is nullable, owner-read, service-written, and length-capped",
"personal report job migration is atomic, lease-bound, recoverable, and owner read-only",
"longform appendices are owner-read, service-written, and never change report status",
"personal report sections enforce owner-read RLS and service-owned durable transitions",
"block_scan RPCs are service_role-only and advance a declared period",
"redeem security: case-sensitive hashing, rate limiting, idempotency and order ownership",
"read_report_candidate_range is service_role-only, returns only the window, and stays empty without rows",
"self-hosted identity migration creates Better Auth tables with least privilege",
"database roles have no cluster privileges",
"every color token used as a Tailwind utility is exposed through @theme",
"staging model provider env preparation removes legacy settings and keeps one stable key",
"staging env validator rejects selector drift, duplicates, and unsafe permissions",
"production env validators accept only self-hosted production selectors and role URLs",
"Better Auth supports shared user OTP/password sessions for admins",
"database drops secret refs, generates immutable codes, and invalidates evidence after key rotation",
"job migration mirror is exact and preserves personal_reports as the document projection",
"document v2 and durable job migrations are exact db/supabase mirrors",
"document v2 migration preserves v1 reads and adds explicit product depth",
"durable job migration defines the complete state, lease, retry, and identity contract",
"durable job migration atomically enqueues reports and exposes lease RPCs only to service_role",
"ingest P0: education kinds, batch confirm, opening focus reuse, precision lock",
"PR-4 candidate decisions use server UUIDs, receipt-derived gates and separate acceptance/confirmation",
"tests\\\\rectification-v9-agent.test.ts",
"v9 migration applies on a fresh database and re-applies idempotently",
"v9 open is atomic, idempotent and allows separate homepage cases",
"v9 enforces profile gating, ownership and terminal read-only",
"v9 evidence lifecycle: quote grounding, idempotency, confirm and revision lineage",
"v9 legacy backfill maps statuses, keeps one resumable per user and is idempotent",
"v9 agent api migration applies, seeds the runtime flag and guards consent",
"v9 ignores a historical active minute and allows reselection within the live result",
"tests\\\\skill-binding.test.ts",
"immutable Skill migration enforces RPC-only identity, legacy adoption, and cascade-safe receipts",
"checked-in registry verifies hashed product packages and leaves consult on the live skill",
"path traversal and symlink escape fail closed",
"symbolic links are rejected even when their target stays inside the project root",
"live consult skill reads a hand-updated tree without a registry hash",
"changed staging workflows are syntactically valid YAML",
"live staging sync preserves env, state, incoming files, and encrypted backups",
"live staging sync repairs nested deploy-tree drift without preserving foreign ownership",
"first immutable deployment rolls back to validated local image IDs",
"is-docs-only-range.sh decides from local history and refuses non-ancestor ranges"
]
},
"baseline_only": [],
"final_only": [],
"commands": {
"baseline": [
{
"command": "tsc",
"exit": 0,
"seconds": 44.09
},
{
"command": "lint",
"exit": 0,
"seconds": 32.7
},
{
"command": "test",
"exit": 1,
"seconds": 149.2
},
{
"command": "build",
"exit": 1,
"seconds": 2.66
}
],
"final": [
{
"command": "tsc",
"exit": 0,
"seconds": 38.28
},
{
"command": "lint",
"exit": 0,
"seconds": 25.39
},
{
"command": "test",
"exit": 1,
"seconds": 135.52
},
{
"command": "build",
"exit": 1,
"seconds": 2.39
}
]
},
"metadata_and_version_targeted": {
"tests": 14,
"pass": 14,
"fail": 0,
"skipped": 0,
"failures": []
},
"bug621_plus_convergence_and_version": {
"tests": 59,
"pass": 55,
"fail": 4,
"skipped": 0,
"failures": [
"checked-in registry verifies hashed product packages and leaves consult on the live skill",
"path traversal and symlink escape fail closed",
"symbolic links are rejected even when their target stays inside the project root",
"live consult skill reads a hand-updated tree without a registry hash"
]
},
"lint": {
"baseline_errors": 0,
"baseline_warnings": 120,
"final_errors": 0,
"final_warnings": 120
},
"build_limitation": "Both builds fail because external node_modules junction is outside the Turbopack filesystem root; Static/gzip not measured",
"new_version_tests": 7,
"baseline_frontend_files_compared": 1500,
"baseline_source_modified": false,
"installed_or_upgraded_dependencies": false
}
@@ -0,0 +1,258 @@
{
"schema_version": 1,
"scope": "candidate_local_date_fix_not_product_accuracy_or_independent_blind_validation",
"baseline_commit": "03cba4780a220b132cf4f06d22e14608aaf9ad3c",
"baseline_source_sha256": {
"scripts/rectification/dasha_transition_proximity.py": "190c615d9733f4ca0cd2a903f67ecaa45afc1db3eaa0f72a6884d9fe5582b57b",
"scripts/rectification/scoring_service.py": "e0b3dbefbf501c20b1cd0d7353bdc3314ec98982c04164af003fa747295a09db"
},
"current_source_sha256": {
"scripts/rectification/dasha_transition_proximity.py": "0afba494aa12899621173c3cc941c6c1d0be9cec0bdf4c4a1c9bcd004ab22de8",
"scripts/rectification/scoring_service.py": "0adf5700bb22dd8c4c3147027251210e21ec66a2c9f9a91217edba3ad9e5d1f5"
},
"dataset_sha256": "45aa76ab79dfc6c6404b6252083e1aa5c7e2e2b7de811fc11042a8ad2da3f0ea",
"parameters": {
"dataset": "references/real_case_calibration/minute_rectification_holdout_v3.json",
"public_aa_case_count": 20,
"radius_minutes": 60,
"offset_minutes": 0,
"minute_step": 1,
"candidates_per_window": 121,
"ayanamsa": "raman",
"node_mode": "mean",
"timed_scope": "compute_candidate_static_contexts + build_event_contribution_matrix + score_from_matrix",
"timing_method": "same process, five alternating baseline/fixed pairs; baseline helper preserved before modification; all other scoring paths identical",
"score_serialization": "json.dumps(scores, sort_keys=True, separators=(\",\", \":\")).encode()",
"matrix_comparison": "same canonical JSON serialization then SHA-256",
"timing_pair_orders": [
"baseline,fixed",
"fixed,baseline",
"baseline,fixed",
"fixed,baseline",
"baseline,fixed"
]
},
"timing": {
"pre_fix_samples_seconds": [
22.780348100000992,
21.738976600026945,
20.851636399980634
],
"paired_alternating_samples_seconds": {
"baseline": [
27.478544100013096,
21.569872399995802,
20.71335249999538,
21.362332899996545,
21.438496799994027
],
"fixed": [
21.150953400006983,
21.252369000023464,
20.739417499979027,
21.42927980000968,
21.525520600000164
]
},
"paired_median_seconds": {
"baseline": 21.438496799994027,
"fixed": 21.252369000023464
},
"median_change_percent": -0.868194266169886,
"paired_change_percent": [
-23.027387029588287,
-1.4719762550491455,
0.1258367035642971,
0.3133875889236082,
0.40592304963360526
],
"maximum_allowed_regression_percent": 20
},
"same_day": {
"case_count": 19,
"candidate_count": 2299,
"comparisons": [
{
"case_ordinal": 1,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "2aabdda6bb56baf6a9d0b119964ee1ab8023fede9ea8703f6d265207c490bec2"
},
{
"case_ordinal": 2,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "6585d895aeb79e26257b1002696c16b5e252f9a702f2a5702f929fd80486abb9"
},
{
"case_ordinal": 3,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "246296903d915e4886229530fa554428d7f65fb686f70cc369711347ebaf2610"
},
{
"case_ordinal": 4,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "79126128e3a9e861c076569428729cd490f6a122aa35e33975066533e1cc08f0"
},
{
"case_ordinal": 5,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "3f891b16ae23d499a676610829e240ded987cc32570c81ac9e2f24f09ab5cae1"
},
{
"case_ordinal": 7,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "d211367fac590c19d6b68e7717fa605ab70fa0c2f9c7adda2477f211a909de77"
},
{
"case_ordinal": 8,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "1e5a0d58160f7bea190cff621acfaf7e94f82a8b64c2ab2a7b16d574fa72545f"
},
{
"case_ordinal": 9,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "8673a519a9729194e44305bfa329092f0e5fec2b21c5cea8c0271136a610c22c"
},
{
"case_ordinal": 10,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "3525cfcee8c541ac707c83b7badcb1c1c990ffa93c220d17ad95df79fd272ffb"
},
{
"case_ordinal": 11,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "3224140f8f1d5bfa76727a77b17859751a384c3ee45dbff07f9b3e073431c488"
},
{
"case_ordinal": 12,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "4ad82e9d8d9af710078906deb0c82c2d11cccb7b85051d769db48c952c633ef1"
},
{
"case_ordinal": 13,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "ae7e7a6282f6130d8769d52dbf419b16434ac6b27c166ebacab8cb2ae03ae905"
},
{
"case_ordinal": 14,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "02319206460876de38170308930896142171595636ffffef9bfe652b3760c089"
},
{
"case_ordinal": 15,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "d29d0098f63db390f8de05abba77d88b5f5f2d3d63deebf12f1edecad1935e3d"
},
{
"case_ordinal": 16,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "a9ef128d8535171bfd55ebb30ee7a6f5137f40f3a38218de691f2259d4ee8e1f"
},
{
"case_ordinal": 17,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "675f400eb0ef8840092fb512de62ca29eb0482065178ccb0f8d1020b38f4b168"
},
{
"case_ordinal": 18,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "d17e6197a5ef668130e72d6513ebacb7ce357d27b7569d6be29be8dcd3f52dff"
},
{
"case_ordinal": 19,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "a0bb50c9e7a6b48c9206a486e0962271129489ff53a2ee76ff827fcba52a480b"
},
{
"case_ordinal": 20,
"candidate_count": 121,
"scores_bytes_equal": true,
"matrix_bytes_equal": true,
"scores_sha256": "183324931666a285b04624facd50cc1adc82f7a50ba41f3cb1765695469507c0"
}
]
},
"cross_day": {
"case_ordinal": 6,
"method": "natural cross-midnight window, independent single-candidate matrices each anchored to its own local date, compare all rows and cells",
"baseline": {
"candidate_count": 121,
"cross_date_candidates": 16,
"different_candidate_count": 16,
"same_day_different_count": 0,
"max_absolute_score_delta": 0.0267,
"full_rows_equal": false,
"full_matrix_equal": false
},
"fixed": {
"candidate_count": 121,
"cross_date_candidates": 16,
"different_candidate_count": 0,
"same_day_different_count": 0,
"max_absolute_score_delta": 0.0,
"full_rows_equal": true,
"full_matrix_equal": true
}
},
"tests": {
"pre_fix": {
"failed": 4,
"passed": 4,
"elapsed_seconds": 7.32
},
"post_fix_with_quick_bridge": {
"failed": 0,
"passed": 18,
"elapsed_seconds": 14.71,
"unique_test_count": 9
},
"existing_endpoint_registry_enumeration": {
"failed": 0,
"passed": 3,
"elapsed_seconds": 0.69
},
"quick_bridge_collected": 9,
"notes": "Version identity regression added after red run; bridge repeats the same nine regressions. Full quick and broad baseline comparisons are coordinator-owned."
},
"scope_verification": {
"frozen_files_count": 12,
"frozen_files_unchanged": true,
"all_proximity_constants_unchanged": true
},
"privacy": "Only public dataset anonymous ordinals, score hashes and aggregates; no birth times, dates, names, coordinates, case IDs or raw scores."
}