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:
@@ -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."
|
||||
}
|
||||
Reference in New Issue
Block a user