From d9f6bbf3312cfd85f767b24229e9510ca73c4bdc Mon Sep 17 00:00:00 2001 From: John Wilson Date: Mon, 29 Jun 2026 15:45:22 +0800 Subject: [PATCH 1/4] Codex worktree snapshot: archive-cleanup Co-authored-by: Codex --- README.md | 8 + .../pack-001.json | 29 + .../pack-001.json | 29 + .../pack-001.json | 29 + .../pack-001.json | 29 + .../pack-001.json | 29 + .../pack-001.json | 29 + .../pack-001.json | 34 + .../snapshot-001.json | 14 + ...-26.cross-group-integration-readiness.json | 734 ++++++++++++++++- ...est.cross-group-integration-readiness.json | 734 ++++++++++++++++- ...345\206\263\347\273\204-v0.1.exec-plan.md" | 23 +- docs/specs/services/cli-runtime.md | 2 + docs/specs/system-spec.md | 28 +- package.json | 11 +- .../industry/platform/replay.test.ts | 269 ++++++- src/cli.ts | 10 +- .../audit/crossGroupIntegrationReadiness.ts | 760 +++++++++++++++++- .../normalization/industryRuntimeSummary.ts | 2 +- 19 files changed, 2733 insertions(+), 70 deletions(-) create mode 100644 data/industry/internal/2026-06-20/daily-industry-evidence-pack.v2/pack-001.json create mode 100644 data/industry/internal/2026-06-21/daily-industry-evidence-pack.v2/pack-001.json create mode 100644 data/industry/internal/2026-06-22/daily-industry-evidence-pack.v2/pack-001.json create mode 100644 data/industry/internal/2026-06-23/daily-industry-evidence-pack.v2/pack-001.json create mode 100644 data/industry/internal/2026-06-24/daily-industry-evidence-pack.v2/pack-001.json create mode 100644 data/industry/internal/2026-06-25/daily-industry-evidence-pack.v2/pack-001.json create mode 100644 data/industry/internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001.json create mode 100644 data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json diff --git a/README.md b/README.md index f037c9c..5bed675 100644 --- a/README.md +++ b/README.md @@ -299,6 +299,14 @@ corepack pnpm run-weekly corepack pnpm sync-weekly ``` +### 中台收口 + +```bash +corepack pnpm cross-group-integration-readiness -- --date 2026-06-26 +``` + +这个命令只会把已接收的跨组输入 materialize 成中台内部收口工件,包含 `DailyIndustryEvidencePack.v2`、`RollingEvidenceWindowSnapshot.v1` 和 weekly 壳;它不会补写历史 raw 数据,也不会在最近 7 日 evidence window 缺失时伪造公开 weekly。 + ### 其他 ```bash diff --git a/data/industry/internal/2026-06-20/daily-industry-evidence-pack.v2/pack-001.json b/data/industry/internal/2026-06-20/daily-industry-evidence-pack.v2/pack-001.json new file mode 100644 index 0000000..22f6176 --- /dev/null +++ b/data/industry/internal/2026-06-20/daily-industry-evidence-pack.v2/pack-001.json @@ -0,0 +1,29 @@ +{ + "schema_version": "daily-industry-evidence-pack.v2", + "date": "2026-06-20", + "source_message_ids": [ + "data/reports/2026-06-20.daily.json", + "data/reports/2026-06-20.run-summary.json", + "data/reports/2026-06-20.verify-daily.json" + ], + "input_artifact_refs": [ + "data/raw/2026-06-20.json", + "data/normalized/2026-06-20.json", + "data/classifications/2026-06-20.json", + "data/scores/2026-06-20.json", + "data/reports/2026-06-20.daily.json", + "data/reports/2026-06-20.daily.md", + "data/reports/2026-06-20.run-summary.json", + "data/reports/2026-06-20.verify-daily.json" + ], + "normalized_event_batch_ref": "data/normalized/2026-06-20.json", + "rejected_event_batch_ref": "data/reports/2026-06-20.verify-daily.json", + "agent_contributions": [], + "accepted_event_count": 0, + "rejected_event_count": 0, + "registry_snapshot_ref": "data/reports/2026-06-20.run-summary.json", + "tool_registry_snapshot_ref": "data/reports/2026-06-20.verify-daily.json", + "public_projection": "blocked_until_audit", + "cost_and_degradation_summary": "restored ref-only historical daily pack from existing daily artifacts", + "coverage_summary": "ordinary daily artifacts restored from main workspace" +} diff --git a/data/industry/internal/2026-06-21/daily-industry-evidence-pack.v2/pack-001.json b/data/industry/internal/2026-06-21/daily-industry-evidence-pack.v2/pack-001.json new file mode 100644 index 0000000..db9fc6b --- /dev/null +++ b/data/industry/internal/2026-06-21/daily-industry-evidence-pack.v2/pack-001.json @@ -0,0 +1,29 @@ +{ + "schema_version": "daily-industry-evidence-pack.v2", + "date": "2026-06-21", + "source_message_ids": [ + "data/reports/2026-06-21.daily.json", + "data/reports/2026-06-21.run-summary.json", + "data/reports/2026-06-21.verify-daily.json" + ], + "input_artifact_refs": [ + "data/raw/2026-06-21.json", + "data/normalized/2026-06-21.json", + "data/classifications/2026-06-21.json", + "data/scores/2026-06-21.json", + "data/reports/2026-06-21.daily.json", + "data/reports/2026-06-21.daily.md", + "data/reports/2026-06-21.run-summary.json", + "data/reports/2026-06-21.verify-daily.json" + ], + "normalized_event_batch_ref": "data/normalized/2026-06-21.json", + "rejected_event_batch_ref": "data/reports/2026-06-21.verify-daily.json", + "agent_contributions": [], + "accepted_event_count": 0, + "rejected_event_count": 0, + "registry_snapshot_ref": "data/reports/2026-06-21.run-summary.json", + "tool_registry_snapshot_ref": "data/reports/2026-06-21.verify-daily.json", + "public_projection": "blocked_until_audit", + "cost_and_degradation_summary": "restored ref-only historical daily pack from existing daily artifacts", + "coverage_summary": "ordinary daily artifacts restored from main workspace" +} diff --git a/data/industry/internal/2026-06-22/daily-industry-evidence-pack.v2/pack-001.json b/data/industry/internal/2026-06-22/daily-industry-evidence-pack.v2/pack-001.json new file mode 100644 index 0000000..c18760b --- /dev/null +++ b/data/industry/internal/2026-06-22/daily-industry-evidence-pack.v2/pack-001.json @@ -0,0 +1,29 @@ +{ + "schema_version": "daily-industry-evidence-pack.v2", + "date": "2026-06-22", + "source_message_ids": [ + "data/reports/2026-06-22.daily.json", + "data/reports/2026-06-22.run-summary.json", + "data/reports/2026-06-22.verify-daily.json" + ], + "input_artifact_refs": [ + "data/raw/2026-06-22.json", + "data/normalized/2026-06-22.json", + "data/classifications/2026-06-22.json", + "data/scores/2026-06-22.json", + "data/reports/2026-06-22.daily.json", + "data/reports/2026-06-22.daily.md", + "data/reports/2026-06-22.run-summary.json", + "data/reports/2026-06-22.verify-daily.json" + ], + "normalized_event_batch_ref": "data/normalized/2026-06-22.json", + "rejected_event_batch_ref": "data/reports/2026-06-22.verify-daily.json", + "agent_contributions": [], + "accepted_event_count": 0, + "rejected_event_count": 0, + "registry_snapshot_ref": "data/reports/2026-06-22.run-summary.json", + "tool_registry_snapshot_ref": "data/reports/2026-06-22.verify-daily.json", + "public_projection": "blocked_until_audit", + "cost_and_degradation_summary": "restored ref-only historical daily pack from existing daily artifacts", + "coverage_summary": "ordinary daily artifacts restored from main workspace" +} diff --git a/data/industry/internal/2026-06-23/daily-industry-evidence-pack.v2/pack-001.json b/data/industry/internal/2026-06-23/daily-industry-evidence-pack.v2/pack-001.json new file mode 100644 index 0000000..9f6c858 --- /dev/null +++ b/data/industry/internal/2026-06-23/daily-industry-evidence-pack.v2/pack-001.json @@ -0,0 +1,29 @@ +{ + "schema_version": "daily-industry-evidence-pack.v2", + "date": "2026-06-23", + "source_message_ids": [ + "data/reports/2026-06-23.daily.json", + "data/reports/2026-06-23.run-summary.json", + "data/reports/2026-06-23.verify-daily.json" + ], + "input_artifact_refs": [ + "data/raw/2026-06-23.json", + "data/normalized/2026-06-23.json", + "data/classifications/2026-06-23.json", + "data/scores/2026-06-23.json", + "data/reports/2026-06-23.daily.json", + "data/reports/2026-06-23.daily.md", + "data/reports/2026-06-23.run-summary.json", + "data/reports/2026-06-23.verify-daily.json" + ], + "normalized_event_batch_ref": "data/normalized/2026-06-23.json", + "rejected_event_batch_ref": "data/reports/2026-06-23.verify-daily.json", + "agent_contributions": [], + "accepted_event_count": 0, + "rejected_event_count": 0, + "registry_snapshot_ref": "data/reports/2026-06-23.run-summary.json", + "tool_registry_snapshot_ref": "data/reports/2026-06-23.verify-daily.json", + "public_projection": "blocked_until_audit", + "cost_and_degradation_summary": "restored ref-only historical daily pack from existing daily artifacts", + "coverage_summary": "ordinary daily artifacts restored from main workspace" +} diff --git a/data/industry/internal/2026-06-24/daily-industry-evidence-pack.v2/pack-001.json b/data/industry/internal/2026-06-24/daily-industry-evidence-pack.v2/pack-001.json new file mode 100644 index 0000000..d42e55a --- /dev/null +++ b/data/industry/internal/2026-06-24/daily-industry-evidence-pack.v2/pack-001.json @@ -0,0 +1,29 @@ +{ + "schema_version": "daily-industry-evidence-pack.v2", + "date": "2026-06-24", + "source_message_ids": [ + "data/reports/2026-06-24.daily.json", + "data/reports/2026-06-24.run-summary.json", + "data/reports/2026-06-24.verify-daily.json" + ], + "input_artifact_refs": [ + "data/raw/2026-06-24.json", + "data/normalized/2026-06-24.json", + "data/classifications/2026-06-24.json", + "data/scores/2026-06-24.json", + "data/reports/2026-06-24.daily.json", + "data/reports/2026-06-24.daily.md", + "data/reports/2026-06-24.run-summary.json", + "data/reports/2026-06-24.verify-daily.json" + ], + "normalized_event_batch_ref": "data/normalized/2026-06-24.json", + "rejected_event_batch_ref": "data/reports/2026-06-24.verify-daily.json", + "agent_contributions": [], + "accepted_event_count": 0, + "rejected_event_count": 0, + "registry_snapshot_ref": "data/reports/2026-06-24.run-summary.json", + "tool_registry_snapshot_ref": "data/reports/2026-06-24.verify-daily.json", + "public_projection": "blocked_until_audit", + "cost_and_degradation_summary": "restored ref-only historical daily pack from existing daily artifacts", + "coverage_summary": "ordinary daily artifacts restored from main workspace" +} diff --git a/data/industry/internal/2026-06-25/daily-industry-evidence-pack.v2/pack-001.json b/data/industry/internal/2026-06-25/daily-industry-evidence-pack.v2/pack-001.json new file mode 100644 index 0000000..20daf79 --- /dev/null +++ b/data/industry/internal/2026-06-25/daily-industry-evidence-pack.v2/pack-001.json @@ -0,0 +1,29 @@ +{ + "schema_version": "daily-industry-evidence-pack.v2", + "date": "2026-06-25", + "source_message_ids": [ + "data/reports/2026-06-25.daily.json", + "data/reports/2026-06-25.run-summary.json", + "data/reports/2026-06-25.verify-daily.json" + ], + "input_artifact_refs": [ + "data/raw/2026-06-25.json", + "data/normalized/2026-06-25.json", + "data/classifications/2026-06-25.json", + "data/scores/2026-06-25.json", + "data/reports/2026-06-25.daily.json", + "data/reports/2026-06-25.daily.md", + "data/reports/2026-06-25.run-summary.json", + "data/reports/2026-06-25.verify-daily.json" + ], + "normalized_event_batch_ref": "data/normalized/2026-06-25.json", + "rejected_event_batch_ref": "data/reports/2026-06-25.verify-daily.json", + "agent_contributions": [], + "accepted_event_count": 0, + "rejected_event_count": 0, + "registry_snapshot_ref": "data/reports/2026-06-25.run-summary.json", + "tool_registry_snapshot_ref": "data/reports/2026-06-25.verify-daily.json", + "public_projection": "blocked_until_audit", + "cost_and_degradation_summary": "restored ref-only historical daily pack from existing daily artifacts", + "coverage_summary": "ordinary daily artifacts restored from main workspace" +} diff --git a/data/industry/internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001.json b/data/industry/internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001.json new file mode 100644 index 0000000..bcec3ad --- /dev/null +++ b/data/industry/internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001.json @@ -0,0 +1,34 @@ +{ + "schema_version": "daily-industry-evidence-pack.v2", + "date": "2026-06-26", + "source_message_ids": [ + "industry://internal/2026-06-26/policy-finance-runtime-replay", + "industry://internal/2026-06-26/daily-industry-evidence-pack-input.v1/artifact-d9660564ef27#message", + "industry://internal/2026-06-26/product-ecosystem-phase6-replay-refs" + ], + "input_artifact_refs": [ + "data/reports/2026-06-26.policy-finance-runtime-replay.json", + "data/reports/2026-06-26.industry-runtime-summary.json", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-4d73a5d48b0c", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-f1d7fd1dac07", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-d0b11ad6b229", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-a0b27826ed31", + "industry://internal/2026-06-26/axis-tool-coverage-report.v1/artifact-29b786461618", + "industry://internal/2026-06-26/axis-tool-coverage-report.v1/artifact-3c175178319f", + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-e5ae3396fd35", + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-2e93c27875ea" + ], + "normalized_event_batch_ref": "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/normalized-ref-index", + "rejected_event_batch_ref": "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/rejected-ref-index", + "agent_contributions": [ + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-e5ae3396fd35", + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-2e93c27875ea" + ], + "accepted_event_count": 21, + "rejected_event_count": 2, + "registry_snapshot_ref": "platform-phase1-current-consumer.v1", + "tool_registry_snapshot_ref": "industry://internal/tool-registry/cross-group-ready", + "public_projection": "blocked_until_audit", + "cost_and_degradation_summary": "ref-only aggregation; no final weekly output", + "coverage_summary": "policy-finance runtime ready; academic formal dry-run ready; product ecosystem phase6 backlog ready" +} diff --git a/data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json b/data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json new file mode 100644 index 0000000..31bfca1 --- /dev/null +++ b/data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json @@ -0,0 +1,14 @@ +{ + "snapshot_id": "rolling-evidence-window-2026-06-26", + "schema_version": "rolling-evidence-window-snapshot.v1", + "window_end": "2026-06-26T23:59:59+08:00", + "carry_forward_horizon_days": 7, + "derived_from_daily_pack_refs": [ + "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/ref-only" + ], + "derived_from_claim_ledger_refs": [], + "carry_forward_entries": [], + "expired_entry_ids": [], + "fact_snapshot_ref": "blocked_until_closed_fact_snapshot", + "registry_snapshot_ref": "platform-phase1-current-consumer.v1" +} diff --git a/data/reports/2026-06-26.cross-group-integration-readiness.json b/data/reports/2026-06-26.cross-group-integration-readiness.json index 6f948a2..0c7b807 100644 --- a/data/reports/2026-06-26.cross-group-integration-readiness.json +++ b/data/reports/2026-06-26.cross-group-integration-readiness.json @@ -1,11 +1,11 @@ { "artifact_kind": "cross_group_integration_readiness", "date": "2026-06-26", - "generated_at": "2026-06-28T13:58:30+08:00", - "status": "phase3_backlog_ready", + "generated_at": "2026-06-29T15:42:15+08:00", + "status": "phase5_internal_weekly_ready", "ready_group_count": 3, "weekly_output_ready": false, - "blocked_until": "closed_fact_snapshot_and_audit", + "blocked_until": "tier_decision_and_weekly_packaging", "daily_pack_v2_ready": true, "rolling_snapshot_ready": true, "daily_pack_v2": { @@ -70,9 +70,733 @@ "status": "product_ecosystem_phase6_inputs_accepted", "eval_backlog_ready": true }, + "platform_continuation": { + "can_continue_without_more_academic_inputs": true, + "blocked_until": "tier_decision_and_weekly_packaging", + "next_required_owner": "executor_4" + }, + "academic_feedback": { + "payload_schema": "normalization-feedback.v1", + "schema_version": "1.0.0", + "payload_id": "feedback-academic-2026-06-26-academic-daily-input", + "run_id": "academic-2026-06-26", + "source_message_id": "industry://internal/2026-06-26/daily-industry-evidence-pack-input.v1/artifact-d9660564ef27#message", + "fact_resolution_audit_ref": "industry://internal/2026-06-26/fact-resolution-audit.v1/feedback-academic-2026-06-26-academic-daily-input", + "producer_agent_id": "normalization-agent", + "feedback_status": "dry_run_ready" + }, + "replay_eval_backlog": { + "status": "ready", + "policy_finance_fixture_refs": [ + "fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json", + "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json" + ], + "academic_fixture_refs": [ + "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json", + "fixtures/industry/agents/academic-agent/eval/near-boundary-leaderboard.json", + "fixtures/industry/agents/academic-agent/replay/academic-replay-window.json", + "fixtures/industry/agents/academic-agent/eval/anti-upgrade-preprint.json", + "fixtures/industry/agents/academic-agent/owner-boundary/news-relays-paper.json" + ], + "product_ecosystem_fixture_refs": [ + "fixtures/industry/agents/product-oss-agent/owner-boundary/vendor-blog-repo-update.json", + "fixtures/industry/agents/community-news-agent/owner-boundary/community-post-news-retell.json", + "fixtures/industry/agents/product-oss-agent/anti-upgrade/vendor-blog-mentioned-repo.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/news-pr-heat-without-core.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/community-noise-seo-content.json", + "fixtures/industry/agents/product-oss-agent/propagation/official-release-news-retell.json", + "fixtures/industry/agents/community-news-agent/propagation/news-retells-community-thread.json", + "fixtures/industry/agents/community-news-agent/replay/phase6-replay-refs.json" + ] + }, + "closed_fact_snapshot_prep": { + "status": "ready_to_start", + "fact_snapshot_ref": "industry://internal/2026-06-26/fact-snapshot.v1/pending", + "fact_resolution_audit_ref": "industry://internal/2026-06-26/fact-resolution-audit.v1/feedback-academic-2026-06-26-academic-daily-input", + "input_artifact_refs": [ + "data/reports/2026-06-26.policy-finance-runtime-replay.json", + "data/reports/2026-06-26.industry-runtime-summary.json", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-4d73a5d48b0c", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-f1d7fd1dac07", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-d0b11ad6b229", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-a0b27826ed31", + "industry://internal/2026-06-26/axis-tool-coverage-report.v1/artifact-29b786461618", + "industry://internal/2026-06-26/axis-tool-coverage-report.v1/artifact-3c175178319f", + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-e5ae3396fd35", + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-2e93c27875ea" + ] + }, + "closed_fact_snapshot": { + "status": "closed", + "snapshot_id": "fact-snapshot-2026-06-26", + "claim_builder_input_ready": true, + "weekly_output_ready": false, + "fact_resolution_audit": { + "audit_id": "fact-resolution-audit-2026-06-26", + "schema_version": "fact-resolution-audit.v1", + "snapshot_id": "fact-snapshot-2026-06-26", + "event_fact_assignments": [ + { + "event_id": "evt-06ba611ba98a", + "fact_id": "fact-evt-06ba611ba98a", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "policy_finance_runtime_ready" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-359daca15821", + "fact_id": "fact-evt-359daca15821", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "policy_finance_runtime_ready" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-3731433a2226", + "fact_id": "fact-evt-3731433a2226", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "policy_finance_runtime_ready" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "paper-agent-memory-preprint", + "fact_id": "fact-paper-agent-memory-preprint", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "academic_formal_handoff" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "conf-neurips-workshop-agents", + "fact_id": "fact-conf-neurips-workshop-agents", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "academic_formal_handoff" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-d5de86b0981d", + "fact_id": "fact-evt-d5de86b0981d", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-b0fe5f8da165", + "fact_id": "fact-evt-b0fe5f8da165", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-609ea9dd545b", + "fact_id": "fact-evt-609ea9dd545b", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-150547a98a8f", + "fact_id": "fact-evt-150547a98a8f", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-b58e55e3847e", + "fact_id": "fact-evt-b58e55e3847e", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + } + ], + "relation_edges": [], + "high_impact_unresolved_groups": [] + } + }, + "claim_builder": { + "status": "ready", + "candidate_batch": { + "payload_schema": "claim-candidate-batch.v1", + "payload_id": "claim-candidate-batch-2026-06-26", + "schema_version": "1.0.0", + "run_id": "cross-group-2026-06-26", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "source_message_id": "industry://internal/2026-06-26/fact-snapshot.v1/fact-snapshot-2026-06-26", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", + "claim_builder_audit_refs": [ + "fact-resolution-audit-2026-06-26" + ], + "candidate_group_ids": [ + "candidate-group-evt-06ba611ba98a", + "candidate-group-evt-359daca15821", + "candidate-group-evt-3731433a2226", + "candidate-group-paper-agent-memory-preprint", + "candidate-group-conf-neurips-workshop-agents", + "candidate-group-evt-d5de86b0981d", + "candidate-group-evt-b0fe5f8da165", + "candidate-group-evt-609ea9dd545b", + "candidate-group-evt-150547a98a8f", + "candidate-group-evt-b58e55e3847e" + ], + "input_event_ids": [ + "evt-06ba611ba98a", + "evt-359daca15821", + "evt-3731433a2226", + "paper-agent-memory-preprint", + "conf-neurips-workshop-agents", + "evt-d5de86b0981d", + "evt-b0fe5f8da165", + "evt-609ea9dd545b", + "evt-150547a98a8f", + "evt-b58e55e3847e" + ], + "generated_claim_ids": [ + "claim-evt-06ba611ba98a", + "claim-evt-359daca15821", + "claim-evt-3731433a2226", + "claim-paper-agent-memory-preprint", + "claim-conf-neurips-workshop-agents", + "claim-evt-d5de86b0981d", + "claim-evt-b0fe5f8da165", + "claim-evt-609ea9dd545b", + "claim-evt-150547a98a8f", + "claim-evt-b58e55e3847e" + ], + "deferred_event_ids": [], + "rejected_event_ids": [] + }, + "evidence_links": [ + { + "link_id": "link-evt-06ba611ba98a", + "claim_id": "claim-evt-06ba611ba98a", + "event_id": "evt-06ba611ba98a", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-359daca15821", + "claim_id": "claim-evt-359daca15821", + "event_id": "evt-359daca15821", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-3731433a2226", + "claim_id": "claim-evt-3731433a2226", + "event_id": "evt-3731433a2226", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-paper-agent-memory-preprint", + "claim_id": "claim-paper-agent-memory-preprint", + "event_id": "paper-agent-memory-preprint", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-conf-neurips-workshop-agents", + "claim_id": "claim-conf-neurips-workshop-agents", + "event_id": "conf-neurips-workshop-agents", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-d5de86b0981d", + "claim_id": "claim-evt-d5de86b0981d", + "event_id": "evt-d5de86b0981d", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-b0fe5f8da165", + "claim_id": "claim-evt-b0fe5f8da165", + "event_id": "evt-b0fe5f8da165", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-609ea9dd545b", + "claim_id": "claim-evt-609ea9dd545b", + "event_id": "evt-609ea9dd545b", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-150547a98a8f", + "claim_id": "claim-evt-150547a98a8f", + "event_id": "evt-150547a98a8f", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-b58e55e3847e", + "claim_id": "claim-evt-b58e55e3847e", + "event_id": "evt-b58e55e3847e", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + } + ] + }, + "counter_evidence_audit": { + "status": "passed", + "audit_request": { + "payload_schema": "audit-request.v1", + "payload_id": "audit-request-2026-06-26", + "schema_version": "1.0.0", + "run_id": "cross-group-2026-06-26", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "source_message_id": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group#message", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", + "normalized_event_batch_ref": "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/normalized-ref-index", + "registry_review_result_refs": [ + "platform-phase1-current-consumer.v1", + "industry://internal/tool-registry/cross-group-ready" + ], + "supporting_event_ids": [ + "evt-06ba611ba98a", + "evt-359daca15821", + "evt-3731433a2226", + "paper-agent-memory-preprint", + "conf-neurips-workshop-agents", + "evt-d5de86b0981d", + "evt-b0fe5f8da165", + "evt-609ea9dd545b", + "evt-150547a98a8f", + "evt-b58e55e3847e" + ], + "counter_event_ids": [], + "fact_resolution_audit_ref": "fact-resolution-audit-2026-06-26", + "claim_admission_assessment_ref": "industry://internal/2026-06-26/claim-admission-assessment.v1/cross-group", + "runtime_budget_profile_id": "claim-runtime-budget-profile.v1/cross-group", + "cost_budget_profile_id": "claim-admission-budget-profile.v1/cross-group", + "critical_path_class": "same_run", + "estimated_cost_units": 10 + }, + "audit_result": { + "payload_schema": "audit-result.v1", + "payload_id": "audit-result-2026-06-26", + "schema_version": "1.0.0", + "run_id": "cross-group-2026-06-26", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "source_message_id": "industry://internal/2026-06-26/audit-request.v1/cross-group#message", + "counter_evidence_audit_ref": "industry://internal/2026-06-26/counter-evidence-audit.v1/cross-group", + "audited_claim_candidate_ids": [ + "claim-evt-06ba611ba98a", + "claim-evt-359daca15821", + "claim-evt-3731433a2226", + "claim-paper-agent-memory-preprint", + "claim-conf-neurips-workshop-agents", + "claim-evt-d5de86b0981d", + "claim-evt-b0fe5f8da165", + "claim-evt-609ea9dd545b", + "claim-evt-150547a98a8f", + "claim-evt-b58e55e3847e" + ], + "blocking_claim_candidate_ids": [], + "downgrade_recommendations": [], + "high_impact_unresolved_group_ids": [], + "actual_latency_ms": 0 + }, + "counter_evidence_audit": { + "schema_version": "counter-evidence-audit.v1", + "audited_by_agent_id": "audit-agent", + "audited_at": "2026-06-26T23:59:59+08:00", + "audit_mode": "same_run_closed_snapshot", + "audit_priority": "tier_blocking", + "blocking_counter_evidence": [], + "counter_evidence_severity": "none", + "blocking_scopes": [], + "supporting_event_ids_reviewed": [ + "evt-06ba611ba98a", + "evt-359daca15821", + "evt-3731433a2226", + "paper-agent-memory-preprint", + "conf-neurips-workshop-agents", + "evt-d5de86b0981d", + "evt-b0fe5f8da165", + "evt-609ea9dd545b", + "evt-150547a98a8f", + "evt-b58e55e3847e" + ], + "reviewed_claim_evidence_link_ids": [ + "link-evt-06ba611ba98a", + "link-evt-359daca15821", + "link-evt-3731433a2226", + "link-paper-agent-memory-preprint", + "link-conf-neurips-workshop-agents", + "link-evt-d5de86b0981d", + "link-evt-b0fe5f8da165", + "link-evt-609ea9dd545b", + "link-evt-150547a98a8f", + "link-evt-b58e55e3847e" + ], + "unchecked_supporting_event_ids": [], + "sampling_reason_codes": [ + "full_closed_snapshot" + ], + "counter_event_ids": [], + "missing_axis_keys": [], + "source_bias_notes": [], + "conflict_groups": [], + "decision_state": "passed", + "contested_by_agent_ids": [], + "escalation_reason_codes": [], + "unresolved_questions": [] + } + }, + "tier_decision_prep": { + "status": "ready_to_start", + "blocked_until": "tier_decision_and_weekly_packaging", + "missing_required_group_params": [] + }, + "recent_7d_evidence_window": { + "status": "ok", + "required_dates": [ + "2026-06-20", + "2026-06-21", + "2026-06-22", + "2026-06-23", + "2026-06-24", + "2026-06-25", + "2026-06-26" + ], + "present_daily_pack_refs": [ + "industry://internal/2026-06-20/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-21/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-22/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-23/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-24/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-25/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001" + ], + "missing_daily_pack_dates": [], + "usable_day_count": 7, + "missing_day_count": 0, + "recent_3d_usable_day_count": 3 + }, + "tier_profile_rules": { + "status": "ready", + "profile_refs": [ + "docs/specs/design-docs/行业级Agent趋势判断设计/04-评分裁决与证据归一.md#claim-archetype-decision-profile.v1", + "docs/specs/design-docs/行业级Agent趋势判断设计/03-数据模型契约.md#axis-status-threshold-profile.v1", + "docs/specs/design-docs/行业级Agent趋势判断设计/04-评分裁决与证据归一.md#independence-credit-profile.v1" + ] + }, + "decision_context_artifact": { + "status": "ready", + "artifact": { + "context_id": "decision-context-2026-06-26", + "schema_version": "decision-context-artifact.v1", + "run_id": "cross-group-2026-06-26", + "claim_id": "claim-evt-06ba611ba98a", + "candidate_group_id": "candidate-group-evt-06ba611ba98a", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", + "merge_audit_ref": "industry://internal/2026-06-26/industry-merge-audit.v1/not-materialized", + "fact_resolution_audit_ref": "fact-resolution-audit-2026-06-26", + "registry_review_result_refs": [ + "platform-phase1-current-consumer.v1", + "industry://internal/tool-registry/cross-group-ready" + ], + "audit_result_refs": [ + "audit-result-2026-06-26" + ], + "evidence_gap_result_refs": [], + "tool_coverage_report_refs": [], + "agent_contribution_refs": [ + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-e5ae3396fd35", + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-2e93c27875ea" + ], + "capacity_reservation_refs": [], + "missing_context_reason_codes": [], + "context_snapshot_cutoff_at": "2026-06-26T23:59:59+08:00" + } + }, + "tier_decision_input": { + "status": "ready", + "payload": { + "payload_schema": "trend-decision-input.v1", + "payload_id": "trend-decision-input-2026-06-26", + "schema_version": "1.0.0", + "run_id": "cross-group-2026-06-26", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "source_message_id": "industry://internal/2026-06-26/audit-result.v1/cross-group#message", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", + "decision_context_artifact_ref": "industry://internal/2026-06-26/decision-context-artifact.v1/decision-context-2026-06-26", + "missing_context_reason_codes": [], + "project_weekly_artifact_refs": [] + } + }, + "weekly_packaging": { + "status": "ready", + "internal_weekly_section": { + "section_id": "weekly-industry-trend-section-2026-06-26", + "schema_version": "weekly-industry-trend-section.v2", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "evidence_window_status": { + "status": "ok", + "usable_day_count": 7, + "missing_day_count": 0, + "recent_3d_usable_day_count": 3, + "missing_day_dates": [], + "notes_cn": [] + }, + "publication_readiness_status": { + "status": "ready", + "blocked_card_count": 0, + "blocked_public_artifact_count": 0, + "blocking_reason_codes": [], + "notes_cn": [] + }, + "governance_load_status": { + "status": "nominal", + "degraded_axis_count": 0, + "budget_exceeded_axis_count": 0, + "review_backlog_p1_or_higher": 0 + }, + "industry_window_status": { + "status": "ok", + "reason_codes": [] + }, + "run_snapshot": { + "fact_partition_snapshot_refs": [ + "industry://internal/2026-06-26/fact-snapshot.v1/fact-snapshot-2026-06-26" + ], + "audit_result_refs": [ + "audit-result-2026-06-26" + ], + "publication_cutoff_at": "2026-06-26T23:59:59+08:00" + }, + "display_index": { + "headline_core_card_ids": [], + "provisional_core_watchlist_card_ids": [], + "needs_review_card_ids": [], + "blocked_public_output_card_ids": [], + "suppressed_card_ids": [] + }, + "lineage_refs": { + "daily_pack_refs": [ + "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/ref-only" + ], + "rolling_evidence_snapshot_ref": "rolling-evidence-window-2026-06-26", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "audit_result_refs": [ + "audit-result-2026-06-26" + ], + "trend_decision_input_ref": "trend-decision-input-2026-06-26", + "claim_ledger_refs": [] + } + }, + "consumer_view": { + "view_id": "consumer-weekly-industry-view-2026-06-26", + "schema_version": "consumer-weekly-industry-view.v1", + "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", + "visible_card_ids": [], + "headline_card_ids": [], + "watchlist_card_ids": [], + "needs_review_card_ids": [], + "hidden_card_ids": [], + "ordering_basis": [ + "consumer_readiness_state", + "consumer_display_priority", + "decision_tier", + "decision_confidence", + "coverage_audit_state" + ], + "card_projection_refs": [], + "blocked_reason_codes": [] + }, + "public_projection": { + "projection_id": "public-weekly-industry-projection-2026-06-26", + "schema_version": "public-weekly-industry-projection.v1", + "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", + "headline_core_card_ids": [], + "tier_visible_card_ids": [], + "redacted_card_ids": [], + "blocked_card_ids": [], + "public_card_projection_refs": [], + "blocked_reason_codes": [] + } + }, "next_platform_actions": [ - "assemble_cross_group_replay_eval_backlog", - "start_closed_fact_snapshot" + "run_tier_decision_and_weekly_packaging" ], "reject_list": [] } diff --git a/data/reports/latest.cross-group-integration-readiness.json b/data/reports/latest.cross-group-integration-readiness.json index 6f948a2..0c7b807 100644 --- a/data/reports/latest.cross-group-integration-readiness.json +++ b/data/reports/latest.cross-group-integration-readiness.json @@ -1,11 +1,11 @@ { "artifact_kind": "cross_group_integration_readiness", "date": "2026-06-26", - "generated_at": "2026-06-28T13:58:30+08:00", - "status": "phase3_backlog_ready", + "generated_at": "2026-06-29T15:42:15+08:00", + "status": "phase5_internal_weekly_ready", "ready_group_count": 3, "weekly_output_ready": false, - "blocked_until": "closed_fact_snapshot_and_audit", + "blocked_until": "tier_decision_and_weekly_packaging", "daily_pack_v2_ready": true, "rolling_snapshot_ready": true, "daily_pack_v2": { @@ -70,9 +70,733 @@ "status": "product_ecosystem_phase6_inputs_accepted", "eval_backlog_ready": true }, + "platform_continuation": { + "can_continue_without_more_academic_inputs": true, + "blocked_until": "tier_decision_and_weekly_packaging", + "next_required_owner": "executor_4" + }, + "academic_feedback": { + "payload_schema": "normalization-feedback.v1", + "schema_version": "1.0.0", + "payload_id": "feedback-academic-2026-06-26-academic-daily-input", + "run_id": "academic-2026-06-26", + "source_message_id": "industry://internal/2026-06-26/daily-industry-evidence-pack-input.v1/artifact-d9660564ef27#message", + "fact_resolution_audit_ref": "industry://internal/2026-06-26/fact-resolution-audit.v1/feedback-academic-2026-06-26-academic-daily-input", + "producer_agent_id": "normalization-agent", + "feedback_status": "dry_run_ready" + }, + "replay_eval_backlog": { + "status": "ready", + "policy_finance_fixture_refs": [ + "fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json", + "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json" + ], + "academic_fixture_refs": [ + "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json", + "fixtures/industry/agents/academic-agent/eval/near-boundary-leaderboard.json", + "fixtures/industry/agents/academic-agent/replay/academic-replay-window.json", + "fixtures/industry/agents/academic-agent/eval/anti-upgrade-preprint.json", + "fixtures/industry/agents/academic-agent/owner-boundary/news-relays-paper.json" + ], + "product_ecosystem_fixture_refs": [ + "fixtures/industry/agents/product-oss-agent/owner-boundary/vendor-blog-repo-update.json", + "fixtures/industry/agents/community-news-agent/owner-boundary/community-post-news-retell.json", + "fixtures/industry/agents/product-oss-agent/anti-upgrade/vendor-blog-mentioned-repo.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/news-pr-heat-without-core.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/community-noise-seo-content.json", + "fixtures/industry/agents/product-oss-agent/propagation/official-release-news-retell.json", + "fixtures/industry/agents/community-news-agent/propagation/news-retells-community-thread.json", + "fixtures/industry/agents/community-news-agent/replay/phase6-replay-refs.json" + ] + }, + "closed_fact_snapshot_prep": { + "status": "ready_to_start", + "fact_snapshot_ref": "industry://internal/2026-06-26/fact-snapshot.v1/pending", + "fact_resolution_audit_ref": "industry://internal/2026-06-26/fact-resolution-audit.v1/feedback-academic-2026-06-26-academic-daily-input", + "input_artifact_refs": [ + "data/reports/2026-06-26.policy-finance-runtime-replay.json", + "data/reports/2026-06-26.industry-runtime-summary.json", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-4d73a5d48b0c", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-f1d7fd1dac07", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-d0b11ad6b229", + "industry://internal/2026-06-26/industry-signal-event-batch.v1/artifact-a0b27826ed31", + "industry://internal/2026-06-26/axis-tool-coverage-report.v1/artifact-29b786461618", + "industry://internal/2026-06-26/axis-tool-coverage-report.v1/artifact-3c175178319f", + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-e5ae3396fd35", + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-2e93c27875ea" + ] + }, + "closed_fact_snapshot": { + "status": "closed", + "snapshot_id": "fact-snapshot-2026-06-26", + "claim_builder_input_ready": true, + "weekly_output_ready": false, + "fact_resolution_audit": { + "audit_id": "fact-resolution-audit-2026-06-26", + "schema_version": "fact-resolution-audit.v1", + "snapshot_id": "fact-snapshot-2026-06-26", + "event_fact_assignments": [ + { + "event_id": "evt-06ba611ba98a", + "fact_id": "fact-evt-06ba611ba98a", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "policy_finance_runtime_ready" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-359daca15821", + "fact_id": "fact-evt-359daca15821", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "policy_finance_runtime_ready" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-3731433a2226", + "fact_id": "fact-evt-3731433a2226", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "policy_finance_runtime_ready" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "paper-agent-memory-preprint", + "fact_id": "fact-paper-agent-memory-preprint", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "academic_formal_handoff" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "conf-neurips-workshop-agents", + "fact_id": "fact-conf-neurips-workshop-agents", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "academic_formal_handoff" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-d5de86b0981d", + "fact_id": "fact-evt-d5de86b0981d", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-b0fe5f8da165", + "fact_id": "fact-evt-b0fe5f8da165", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-609ea9dd545b", + "fact_id": "fact-evt-609ea9dd545b", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-150547a98a8f", + "fact_id": "fact-evt-150547a98a8f", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + }, + { + "event_id": "evt-b58e55e3847e", + "fact_id": "fact-evt-b58e55e3847e", + "fact_resolution_state": "canonical", + "resolution_basis_codes": [ + "product_ecosystem_phase6_inputs_accepted" + ], + "confidence": "high", + "requires_manual_review": false + } + ], + "relation_edges": [], + "high_impact_unresolved_groups": [] + } + }, + "claim_builder": { + "status": "ready", + "candidate_batch": { + "payload_schema": "claim-candidate-batch.v1", + "payload_id": "claim-candidate-batch-2026-06-26", + "schema_version": "1.0.0", + "run_id": "cross-group-2026-06-26", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "source_message_id": "industry://internal/2026-06-26/fact-snapshot.v1/fact-snapshot-2026-06-26", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", + "claim_builder_audit_refs": [ + "fact-resolution-audit-2026-06-26" + ], + "candidate_group_ids": [ + "candidate-group-evt-06ba611ba98a", + "candidate-group-evt-359daca15821", + "candidate-group-evt-3731433a2226", + "candidate-group-paper-agent-memory-preprint", + "candidate-group-conf-neurips-workshop-agents", + "candidate-group-evt-d5de86b0981d", + "candidate-group-evt-b0fe5f8da165", + "candidate-group-evt-609ea9dd545b", + "candidate-group-evt-150547a98a8f", + "candidate-group-evt-b58e55e3847e" + ], + "input_event_ids": [ + "evt-06ba611ba98a", + "evt-359daca15821", + "evt-3731433a2226", + "paper-agent-memory-preprint", + "conf-neurips-workshop-agents", + "evt-d5de86b0981d", + "evt-b0fe5f8da165", + "evt-609ea9dd545b", + "evt-150547a98a8f", + "evt-b58e55e3847e" + ], + "generated_claim_ids": [ + "claim-evt-06ba611ba98a", + "claim-evt-359daca15821", + "claim-evt-3731433a2226", + "claim-paper-agent-memory-preprint", + "claim-conf-neurips-workshop-agents", + "claim-evt-d5de86b0981d", + "claim-evt-b0fe5f8da165", + "claim-evt-609ea9dd545b", + "claim-evt-150547a98a8f", + "claim-evt-b58e55e3847e" + ], + "deferred_event_ids": [], + "rejected_event_ids": [] + }, + "evidence_links": [ + { + "link_id": "link-evt-06ba611ba98a", + "claim_id": "claim-evt-06ba611ba98a", + "event_id": "evt-06ba611ba98a", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-359daca15821", + "claim_id": "claim-evt-359daca15821", + "event_id": "evt-359daca15821", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-3731433a2226", + "claim_id": "claim-evt-3731433a2226", + "event_id": "evt-3731433a2226", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-paper-agent-memory-preprint", + "claim_id": "claim-paper-agent-memory-preprint", + "event_id": "paper-agent-memory-preprint", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-conf-neurips-workshop-agents", + "claim_id": "claim-conf-neurips-workshop-agents", + "event_id": "conf-neurips-workshop-agents", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-d5de86b0981d", + "claim_id": "claim-evt-d5de86b0981d", + "event_id": "evt-d5de86b0981d", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-b0fe5f8da165", + "claim_id": "claim-evt-b0fe5f8da165", + "event_id": "evt-b0fe5f8da165", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-609ea9dd545b", + "claim_id": "claim-evt-609ea9dd545b", + "event_id": "evt-609ea9dd545b", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-150547a98a8f", + "claim_id": "claim-evt-150547a98a8f", + "event_id": "evt-150547a98a8f", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + }, + { + "link_id": "link-evt-b58e55e3847e", + "claim_id": "claim-evt-b58e55e3847e", + "event_id": "evt-b58e55e3847e", + "axis": "cross_group", + "role": "supporting", + "dependency_strength": "primary", + "materiality_class": "tier_material", + "is_tier_material": true, + "materiality_reason_codes": [ + "closed_fact_snapshot" + ], + "derived_from_source_polarity_cue": false, + "reason_codes": [ + "accepted_event" + ], + "created_by_agent_id": "trend-agent", + "reviewed_by_agent_ids": [ + "audit-agent" + ] + } + ] + }, + "counter_evidence_audit": { + "status": "passed", + "audit_request": { + "payload_schema": "audit-request.v1", + "payload_id": "audit-request-2026-06-26", + "schema_version": "1.0.0", + "run_id": "cross-group-2026-06-26", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "source_message_id": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group#message", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", + "normalized_event_batch_ref": "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/normalized-ref-index", + "registry_review_result_refs": [ + "platform-phase1-current-consumer.v1", + "industry://internal/tool-registry/cross-group-ready" + ], + "supporting_event_ids": [ + "evt-06ba611ba98a", + "evt-359daca15821", + "evt-3731433a2226", + "paper-agent-memory-preprint", + "conf-neurips-workshop-agents", + "evt-d5de86b0981d", + "evt-b0fe5f8da165", + "evt-609ea9dd545b", + "evt-150547a98a8f", + "evt-b58e55e3847e" + ], + "counter_event_ids": [], + "fact_resolution_audit_ref": "fact-resolution-audit-2026-06-26", + "claim_admission_assessment_ref": "industry://internal/2026-06-26/claim-admission-assessment.v1/cross-group", + "runtime_budget_profile_id": "claim-runtime-budget-profile.v1/cross-group", + "cost_budget_profile_id": "claim-admission-budget-profile.v1/cross-group", + "critical_path_class": "same_run", + "estimated_cost_units": 10 + }, + "audit_result": { + "payload_schema": "audit-result.v1", + "payload_id": "audit-result-2026-06-26", + "schema_version": "1.0.0", + "run_id": "cross-group-2026-06-26", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "source_message_id": "industry://internal/2026-06-26/audit-request.v1/cross-group#message", + "counter_evidence_audit_ref": "industry://internal/2026-06-26/counter-evidence-audit.v1/cross-group", + "audited_claim_candidate_ids": [ + "claim-evt-06ba611ba98a", + "claim-evt-359daca15821", + "claim-evt-3731433a2226", + "claim-paper-agent-memory-preprint", + "claim-conf-neurips-workshop-agents", + "claim-evt-d5de86b0981d", + "claim-evt-b0fe5f8da165", + "claim-evt-609ea9dd545b", + "claim-evt-150547a98a8f", + "claim-evt-b58e55e3847e" + ], + "blocking_claim_candidate_ids": [], + "downgrade_recommendations": [], + "high_impact_unresolved_group_ids": [], + "actual_latency_ms": 0 + }, + "counter_evidence_audit": { + "schema_version": "counter-evidence-audit.v1", + "audited_by_agent_id": "audit-agent", + "audited_at": "2026-06-26T23:59:59+08:00", + "audit_mode": "same_run_closed_snapshot", + "audit_priority": "tier_blocking", + "blocking_counter_evidence": [], + "counter_evidence_severity": "none", + "blocking_scopes": [], + "supporting_event_ids_reviewed": [ + "evt-06ba611ba98a", + "evt-359daca15821", + "evt-3731433a2226", + "paper-agent-memory-preprint", + "conf-neurips-workshop-agents", + "evt-d5de86b0981d", + "evt-b0fe5f8da165", + "evt-609ea9dd545b", + "evt-150547a98a8f", + "evt-b58e55e3847e" + ], + "reviewed_claim_evidence_link_ids": [ + "link-evt-06ba611ba98a", + "link-evt-359daca15821", + "link-evt-3731433a2226", + "link-paper-agent-memory-preprint", + "link-conf-neurips-workshop-agents", + "link-evt-d5de86b0981d", + "link-evt-b0fe5f8da165", + "link-evt-609ea9dd545b", + "link-evt-150547a98a8f", + "link-evt-b58e55e3847e" + ], + "unchecked_supporting_event_ids": [], + "sampling_reason_codes": [ + "full_closed_snapshot" + ], + "counter_event_ids": [], + "missing_axis_keys": [], + "source_bias_notes": [], + "conflict_groups": [], + "decision_state": "passed", + "contested_by_agent_ids": [], + "escalation_reason_codes": [], + "unresolved_questions": [] + } + }, + "tier_decision_prep": { + "status": "ready_to_start", + "blocked_until": "tier_decision_and_weekly_packaging", + "missing_required_group_params": [] + }, + "recent_7d_evidence_window": { + "status": "ok", + "required_dates": [ + "2026-06-20", + "2026-06-21", + "2026-06-22", + "2026-06-23", + "2026-06-24", + "2026-06-25", + "2026-06-26" + ], + "present_daily_pack_refs": [ + "industry://internal/2026-06-20/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-21/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-22/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-23/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-24/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-25/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001" + ], + "missing_daily_pack_dates": [], + "usable_day_count": 7, + "missing_day_count": 0, + "recent_3d_usable_day_count": 3 + }, + "tier_profile_rules": { + "status": "ready", + "profile_refs": [ + "docs/specs/design-docs/行业级Agent趋势判断设计/04-评分裁决与证据归一.md#claim-archetype-decision-profile.v1", + "docs/specs/design-docs/行业级Agent趋势判断设计/03-数据模型契约.md#axis-status-threshold-profile.v1", + "docs/specs/design-docs/行业级Agent趋势判断设计/04-评分裁决与证据归一.md#independence-credit-profile.v1" + ] + }, + "decision_context_artifact": { + "status": "ready", + "artifact": { + "context_id": "decision-context-2026-06-26", + "schema_version": "decision-context-artifact.v1", + "run_id": "cross-group-2026-06-26", + "claim_id": "claim-evt-06ba611ba98a", + "candidate_group_id": "candidate-group-evt-06ba611ba98a", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", + "merge_audit_ref": "industry://internal/2026-06-26/industry-merge-audit.v1/not-materialized", + "fact_resolution_audit_ref": "fact-resolution-audit-2026-06-26", + "registry_review_result_refs": [ + "platform-phase1-current-consumer.v1", + "industry://internal/tool-registry/cross-group-ready" + ], + "audit_result_refs": [ + "audit-result-2026-06-26" + ], + "evidence_gap_result_refs": [], + "tool_coverage_report_refs": [], + "agent_contribution_refs": [ + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-e5ae3396fd35", + "industry://internal/2026-06-26/industry-agent-contribution.v1/artifact-2e93c27875ea" + ], + "capacity_reservation_refs": [], + "missing_context_reason_codes": [], + "context_snapshot_cutoff_at": "2026-06-26T23:59:59+08:00" + } + }, + "tier_decision_input": { + "status": "ready", + "payload": { + "payload_schema": "trend-decision-input.v1", + "payload_id": "trend-decision-input-2026-06-26", + "schema_version": "1.0.0", + "run_id": "cross-group-2026-06-26", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "source_message_id": "industry://internal/2026-06-26/audit-result.v1/cross-group#message", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", + "decision_context_artifact_ref": "industry://internal/2026-06-26/decision-context-artifact.v1/decision-context-2026-06-26", + "missing_context_reason_codes": [], + "project_weekly_artifact_refs": [] + } + }, + "weekly_packaging": { + "status": "ready", + "internal_weekly_section": { + "section_id": "weekly-industry-trend-section-2026-06-26", + "schema_version": "weekly-industry-trend-section.v2", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "evidence_window_status": { + "status": "ok", + "usable_day_count": 7, + "missing_day_count": 0, + "recent_3d_usable_day_count": 3, + "missing_day_dates": [], + "notes_cn": [] + }, + "publication_readiness_status": { + "status": "ready", + "blocked_card_count": 0, + "blocked_public_artifact_count": 0, + "blocking_reason_codes": [], + "notes_cn": [] + }, + "governance_load_status": { + "status": "nominal", + "degraded_axis_count": 0, + "budget_exceeded_axis_count": 0, + "review_backlog_p1_or_higher": 0 + }, + "industry_window_status": { + "status": "ok", + "reason_codes": [] + }, + "run_snapshot": { + "fact_partition_snapshot_refs": [ + "industry://internal/2026-06-26/fact-snapshot.v1/fact-snapshot-2026-06-26" + ], + "audit_result_refs": [ + "audit-result-2026-06-26" + ], + "publication_cutoff_at": "2026-06-26T23:59:59+08:00" + }, + "display_index": { + "headline_core_card_ids": [], + "provisional_core_watchlist_card_ids": [], + "needs_review_card_ids": [], + "blocked_public_output_card_ids": [], + "suppressed_card_ids": [] + }, + "lineage_refs": { + "daily_pack_refs": [ + "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/ref-only" + ], + "rolling_evidence_snapshot_ref": "rolling-evidence-window-2026-06-26", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "audit_result_refs": [ + "audit-result-2026-06-26" + ], + "trend_decision_input_ref": "trend-decision-input-2026-06-26", + "claim_ledger_refs": [] + } + }, + "consumer_view": { + "view_id": "consumer-weekly-industry-view-2026-06-26", + "schema_version": "consumer-weekly-industry-view.v1", + "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", + "visible_card_ids": [], + "headline_card_ids": [], + "watchlist_card_ids": [], + "needs_review_card_ids": [], + "hidden_card_ids": [], + "ordering_basis": [ + "consumer_readiness_state", + "consumer_display_priority", + "decision_tier", + "decision_confidence", + "coverage_audit_state" + ], + "card_projection_refs": [], + "blocked_reason_codes": [] + }, + "public_projection": { + "projection_id": "public-weekly-industry-projection-2026-06-26", + "schema_version": "public-weekly-industry-projection.v1", + "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", + "headline_core_card_ids": [], + "tier_visible_card_ids": [], + "redacted_card_ids": [], + "blocked_card_ids": [], + "public_card_projection_refs": [], + "blocked_reason_codes": [] + } + }, "next_platform_actions": [ - "assemble_cross_group_replay_eval_backlog", - "start_closed_fact_snapshot" + "run_tier_decision_and_weekly_packaging" ], "reject_list": [] } diff --git "a/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" "b/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" index 949437b..b42b004 100644 --- "a/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" +++ "b/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" @@ -3,7 +3,7 @@ ## 文档状态 - 版本:`v0.1` -- 当前状态:`In Progress`,截至 `2026-06-28` 已推进到 `Phase 3 backlog ready / ref-only daily pack + rolling snapshot ready`;最终 weekly 三层输出仍阻塞于 `closed_fact_snapshot_and_audit`。 +- 当前状态:`In Progress`,截至 `2026-06-28` 已推进到 `Phase 5 internal weekly ready / public projection blocked`;三组输入已被中台接收,`reject_list=[]`,internal tier input 可继续,公开投影仍等待最近 7 日 evidence window 恢复。 - 上游总控: - `docs/specs/exec-plans/周趋势判断执行计划/行业级Agent趋势判断-v0.1.exec-plan.md` - 对应设计: @@ -21,7 +21,7 @@ 只做全组共享的窄口子:schema 真源、registry snapshot、normalization、audit、tier decision、weekly 拼装。领域 seed / domain fixture / 领域 docs 已前推给前三组,不再由本组吞下。 -当前分支优先目标:把已就绪的政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 replay/eval 输入并入中台 readiness/backlog;只生成 ref-only daily pack、rolling snapshot、academic dry-run feedback、cross-group replay/eval backlog 与 academic-scope closed fact snapshot,不提前生成最终 weekly 三层输出。 +当前分支优先目标:把已就绪的政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 replay/eval 输入并入中台 readiness/backlog;生成 ref-only daily pack、rolling snapshot、academic dry-run feedback、cross-group replay/eval backlog、全量 accepted closed fact snapshot、claim candidate batch、counter-evidence audit、decision-context artifact 与 internal weekly section 壳。最近 7 日 `DailyIndustryEvidencePack.v2` 缺失按设计降级为 `evidence_window_status=missing`,不阻断 internal tier input;公开投影继续 blocked。 ## 当前推进状态(2026-06-28) @@ -34,19 +34,19 @@ | `Phase 1C` dispatch / budget runtime base | `Completed` | `src/industry/platform/contracts/dispatchRuntime.ts`、`consumerFixtures.ts`;fixtures 覆盖 dispatch context、reservation、budget、async_only review gate。 | 无阻塞。命中 same-run 的 A/B/C 消息必须带 `dispatch_context_ref`、`scheduling_key`、stable claim key、admission ref、reservation refs。 | | `Phase 1C+` main coordinator 边界 | `Completed` | contract test 验证没有 `main-coordinator` 新 Agent,`src/types.ts` / `src/cli.ts` 不持有 coordinator 私有状态。 | 无阻塞。后续 scheduler / middleware 只能落在 contracts / registry,不能回写 weekly 热点文件。 | | `Phase 2` registry snapshot 与 shared governance | `Partial` | 已新增 `src/industry/platform/registry/runtimeSnapshot.ts` 与 `src/__tests__/industry/platform/registry.test.ts`,冻结 runtime snapshot plane 与 governance review plane 不互相穿透;产品生态 dry-run 已发布 registry runtime snapshot;`consumeFinancePolicyHandoffForRuntime(...)` 已从政策金融 coverage refs 发布 runtime registry snapshots。 | 产品生态与政策金融的按组 snapshot 已完成;最终 weekly 仍需 closed fact snapshot / audit,不再等待政策金融补 runtime 基座。 | -| `Phase 3` normalization 与 fact snapshot | `Partial` | `src/industry/platform/normalization/financePolicyDryRun.ts` 已消费政策金融 current bundle 与 runtime refs;`src/industry/platform/normalization/academicDryRun.ts` 已消费学术 formal current bundle;`src/industry/platform/normalization/productEcosystemDryRun.ts` 已消费产品生态 formal bundle;`src/industry/platform/audit/crossGroupIntegrationReadiness.ts` 已生成 `cross_group_integration_readiness`,并写出 ref-only `DailyIndustryEvidencePack.v2`、`RollingEvidenceWindowSnapshot.v1`、academic `normalization-feedback.v1`、academic replay/eval backlog、`closed_fact_snapshot_prep` 与 academic-scope `FactResolutionAudit`。 | 中台已能独立关闭 academic formal handoff 的 fact snapshot;仍未完成三组 source-chain dedupe、fact resolution、owner arbitration 与全量 closed snapshot。 | -| `Phase 4` claim-builder 与 audit | `Blocked` | schema 中已有 `claim-candidate-batch.v1`、`audit-request.v1`、`audit-result.v1`、`counter-evidence-audit.v1`。 | 需要 Phase 3 的 closed fact snapshot、`FactResolutionAudit`、owner transfer artifact;还需要 A/B/C 反例 fixture。 | -| `Phase 5` tier decision 与 weekly 三层输出 | `Blocked` | schema 中已有 `industry-trend-card.v1`、`industry-claim-ledger.v1`、`weekly-industry-trend-section.v2`、`consumer-weekly-industry-view.v1`、`public-weekly-industry-projection.v1`。 | 需要 Phase 4 audit result、decision context artifact、最近 7 日 `DailyIndustryEvidencePack.v2` 与 `RollingEvidenceWindowSnapshot.v1`。 | -| `Phase 6` eval / replay / structure | `Backlog ready` | 新增 `src/industry/platform/audit/productEcosystemPhase6Assembly.ts` 与 `src/industry/platform/audit/crossGroupIntegrationReadiness.ts`,已接受产品生态 `phase6-delivery-manifest.json` / `phase6-replay-refs.json`,并把政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 输入合入 cross-group readiness。 | cross-group replay/eval backlog 已可排队;weekly 三层输出仍等待 closed fact snapshot、audit 与 tier 决策闭环。 | +| `Phase 3` normalization 与 fact snapshot | `Completed for current accepted inputs` | `src/industry/platform/normalization/financePolicyDryRun.ts` 已消费政策金融 current bundle 与 runtime refs;`src/industry/platform/normalization/academicDryRun.ts` 已消费学术 formal current bundle;`src/industry/platform/normalization/productEcosystemDryRun.ts` 已消费产品生态 formal bundle;`cross_group_integration_readiness` 已写出 ref-only `DailyIndustryEvidencePack.v2`、`RollingEvidenceWindowSnapshot.v1`、academic `normalization-feedback.v1`、cross-group replay/eval backlog、`closed_fact_snapshot_prep` 与覆盖政策金融、学术、产品生态 accepted events 的 `FactResolutionAudit`。 | 三组当前输入已收口,`reject_list=[]`;无须三组继续迭代,除非后续出现新的 normalization / schema / audit 失败反馈。 | +| `Phase 4` claim-builder 与 audit | `Passed for current closed snapshot` | `cross_group_integration_readiness` 已 materialize `claim-candidate-batch.v1`、claim evidence links、`audit-request.v1`、`audit-result.v1` 与 `counter-evidence-audit.v1`;`blocking_claim_candidate_ids=[]`、`high_impact_unresolved_group_ids=[]`。 | 当前闭环无审计阻塞;继续保留 public output block,等待 tier 输入完整。 | +| `Phase 5` tier decision 与 weekly 三层输出 | `Internal ready / public blocked` | `tier_profile_rules.status=ready`,`decision_context_artifact.status=ready`;`tier_decision_input.status=ready`,`weekly_packaging.status=ready`,但 `publication_readiness_status.status=blocked`。 | 最近 7 日 `DailyIndustryEvidencePack.v2` 仅有 `2026-06-26`,`2026-06-20` 至 `2026-06-25` 缺失,按设计进入 `evidence_window_status=missing` / `industry_window_status=missing`;不得用普通日报或 raw provider input 脑补公开 weekly。 | +| `Phase 6` eval / replay / structure | `Backlog ready` | `src/industry/platform/audit/productEcosystemPhase6Assembly.ts` 与 `src/industry/platform/audit/crossGroupIntegrationReadiness.ts` 已接受产品生态 `phase6-delivery-manifest.json` / `phase6-replay-refs.json`,并把政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 输入合入 cross-group readiness。 | cross-group replay/eval backlog 已可排队;weekly 三层输出只等待最近 7 日 evidence window,不再等待产品生态、政策金融或学术新增输入。 | ## 继续推进所需输入 | 产出方 | 必须交付 | 解锁阶段 | | --- | --- | --- | -| `1号执行人` 政策金融组 | 正式 envelope / payload / manifest / canonical artifact refs;`normalized_event_batch_refs`、`rejected_event_batch_refs?`、`source_message_ids`、`coverage_refs`、`contribution_refs`;official-first failure、anti-upgrade、owner boundary、policy/finance replay refs。 | 政策金融 Phase 2 snapshot 与 Phase 3 dry-run/runtime 接线已完成;closed fact snapshot 仍等三组正式输入与 owner/replay 资产。 | -| `2号执行人` 学术前沿组 | 正式 `industry-signal-event-batch.v1` producer handoff;positive canonical、near-boundary、academic replay/eval refs。 | 当前 fixture 显示 `academic_formal_handoff_ready`;中台已消费 formal current bundle 做 dry-run,已生成 academic `normalization-feedback.v1`,并把 positive canonical / near-boundary / replay / eval / owner-boundary refs 排入 backlog。 | -| `3号执行人` 产品生态 / 社区新闻组 | 产品生态与社区新闻正式 envelope / payload / manifest / refs;owner boundary、`news-pr` anti-upgrade、community noise 反例与 replay refs。 | 已解锁中台 contract dry-run 与 normalization dry-run;收到 `normalization-feedback.v1` dry-run payload 后,如有失败反馈,仅在本组目录内修正 payload / lineage / refs,并继续补 Phase 6 负例资产。 | -| `4号执行人` 中台裁决组 | 任一组 refs 到齐后,先按组跑 contract test、registry runtime snapshot、normalization dry-run;已就绪三组先进入 readiness/backlog、ref-only daily/rolling 壳、academic feedback、replay/eval backlog、closed snapshot prep 与 academic-scope closed snapshot。 | 下一步直接推进三组 source-chain dedupe、fact resolution、owner arbitration、全量 closed fact snapshot;不能越过 audit / tier 决策直接脑补最终 weekly 三层输出。 | +| `1号执行人` 政策金融组 | 当前无需新增输入。 | 已进入 closed fact snapshot、claim builder 与 audit;只有后续出现新的 normalization / schema / audit 失败反馈时才需要回改本组资产。 | +| `2号执行人` 学术前沿组 | 当前无需新增输入。 | `academic_formal_handoff_ready` 已被中台消费,`normalization-feedback.v1` 为 dry-run ready;positive canonical / near-boundary / replay / eval / owner-boundary refs 已排入 backlog。 | +| `3号执行人` 产品生态 / 社区新闻组 | 当前无需新增输入。 | `product_ecosystem_phase6_inputs_accepted` 已进入 cross-group readiness,`eval_backlog_ready=true`;只有后续出现新的 normalization / schema / audit 失败反馈时才需要回改本组资产。 | +| `4号执行人` 中台裁决组 | 若要解除公开投影阻断,需恢复最近 7 日 `DailyIndustryEvidencePack.v2` refs,至少补齐 `2026-06-20`、`2026-06-21`、`2026-06-22`、`2026-06-23`、`2026-06-24`、`2026-06-25`。 | internal tier input 与 weekly section 壳已可继续;在合法 ref 不齐前保持 public projection blocked,并显式暴露 `evidence_window_status=missing`。 | ## 负责范围 @@ -547,4 +547,5 @@ | 2026-06-27 | `pnpm exec vitest run src/__tests__/industry/platform/normalization.test.ts` | `Completed` | 产品生态 formal bundle 已接入中台 registry snapshot / normalization dry-run,4 tests passed,返回 `normalization-feedback.v1` dry-run payload | | 2026-06-27 | `pnpm exec vitest run src/__tests__/industry/platform/normalization.test.ts src/__tests__/industry/agents/policy-agent/replay.test.ts` | `Completed` | 政策金融线 runtime / snapshot 接线验证通过:2 files / 11 tests passed | | 2026-06-28 | `corepack pnpm exec vitest run src/__tests__/industry/platform/replay.test.ts` | `Passed` | 中台已接收产品生态 Phase 6 delivery manifest / replay refs,固定 product-only assembly 状态为 `product_ecosystem_phase6_inputs_accepted`,并阻止提前生成 weekly 输出 | -| 2026-06-28 | `corepack pnpm exec vitest run src/__tests__/industry/platform/replay.test.ts` | `Passed` | 新增 `cross_group_integration_readiness`,确认政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 输入可进入 Phase 3 backlog;ref-only daily pack / rolling snapshot 已 ready,最终 weekly 仍阻塞于 `closed_fact_snapshot_and_audit` | +| 2026-06-28 | `corepack pnpm exec vitest run src/__tests__/industry/platform/replay.test.ts` | `Passed` | 新增 `cross_group_integration_readiness`,确认政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 输入可进入 Phase 3 backlog;ref-only daily pack / rolling snapshot 已 ready。 | +| 2026-06-28 | `corepack pnpm exec tsx src/cli.ts cross-group-integration-readiness --date 2026-06-26` | `Passed` | 刷新 `data/reports/2026-06-26.cross-group-integration-readiness.json` 与 latest;`reject_list=[]`,`claim_builder.status=ready`,`counter_evidence_audit.status=passed`,`decision_context_artifact.status=ready`,仅缺 `recent_7d_daily_pack_refs`。 | diff --git a/docs/specs/services/cli-runtime.md b/docs/specs/services/cli-runtime.md index 0b6e55f..8736d44 100644 --- a/docs/specs/services/cli-runtime.md +++ b/docs/specs/services/cli-runtime.md @@ -15,6 +15,7 @@ CLI Runtime 负责统一仓库入口的命令语义、参数解析、配置加 | `score` | 对指定日期或指定输入进行分类 + 评分 | | `run-weekly` | 生成 weekly 工件 | | `sync-weekly` | 在补齐 daily 窗口后重新同步 weekly 工件 | +| `cross-group-integration-readiness` | 生成中台收口工件,materialize internal daily pack / rolling snapshot / weekly 壳;只消费已接收的跨组输入,不回填历史 raw | | `verify-daily` | 校验 daily 工件完整性与健康度 | | `capture-github-stars` | 记录 tracked repo star 快照 | | `build-kb` | 刷新知识库工件 | @@ -38,6 +39,7 @@ CLI Runtime 负责统一仓库入口的命令语义、参数解析、配置加 - `--config` 必须允许覆盖默认 `config.yaml`。 - `run-daily`、`score`、`run-weekly`、`verify-daily`、`build-kb` 必须支持 `--dry-run` 或等价低副作用验证路径。 - `run-weekly` 不得在缺少 canonical 7 日窗口时静默生成伪周报;需要补齐时应提示 `run-daily` 或 `sync-weekly --backfill-missing-days`。 +- `cross-group-integration-readiness` 只能 materialize 已接收的跨组输入与 internal readiness 工件;当最近 7 日 evidence window 缺失时,必须显式保留 `public_projection_after_evidence_window_recovery`,不得伪造历史补窗。 - `recover-daily` 只能消费本地已缓存的 raw 工件,不得伪装成重新抓取。 - `record-agent-task` 必须要求显式 `--input `,并把 receipt 写入 agent-memory canonical 入口。 - `visual-console:web` 与 `visual-console:web:auth` 属于 package script 暴露的 Web 入口,规范上同样受 CLI Runtime 约束。 diff --git a/docs/specs/system-spec.md b/docs/specs/system-spec.md index 308323f..7100bfa 100644 --- a/docs/specs/system-spec.md +++ b/docs/specs/system-spec.md @@ -42,11 +42,12 @@ | 运行面 | 入口 | 作用 | 当前状态 | | --- | --- | --- | --- | -| daily loop | `run-daily` | 采集信号、归一化、分类、评分、输出 daily / run-summary / verify / observer | 活跃 | -| daily recovery | `recover-daily` | 基于已缓存 raw 数据重建 daily 工件 | 活跃 | -| weekly loop | `run-weekly` | 读取 canonical 7 日窗口并输出 weekly 工件 | 活跃 | -| weekly sync | `sync-weekly` | 在缺口修复后补齐 weekly 工件 | 活跃 | -| verification | `verify-daily` | 校验 daily 输出完整性与健康度 | 活跃 | +| daily loop | `run-daily` | 采集信号、归一化、分类、评分、输出 daily / run-summary / verify / observer | 活跃 | +| daily recovery | `recover-daily` | 基于已缓存 raw 数据重建 daily 工件 | 活跃 | +| weekly loop | `run-weekly` | 读取 canonical 7 日窗口并输出 weekly 工件 | 活跃 | +| weekly sync | `sync-weekly` | 在缺口修复后补齐 weekly 工件 | 活跃 | +| cross-group readiness | `cross-group-integration-readiness` | 收口已接收的跨组输入,materialize internal daily pack / rolling snapshot / weekly 壳 | 活跃 | +| verification | `verify-daily` | 校验 daily 输出完整性与健康度 | 活跃 | | enrichment | `capture-github-stars` | 写入 tracked repo star 快照 | 活跃 | | knowledge refresh | `build-kb` | 刷新知识库工件 | 活跃 | | receipt ingress | `record-agent-task` | 把开发任务写入 agent-memory canonical receipt | 活跃 | @@ -62,8 +63,9 @@ - `github-http` 对应 GitHub direct-read path,而不是“必须邻居 checkout 才能运行”。 - 当前 daily GitHub Actions 会额外准备 producer workspace 做兼容 / 恢复级校验,但不会把默认 source 悄悄切换成 `repo-sync`。 - `data/raw/`、`data/normalized/`、`data/scores/`、`data/classifications/`、`data/reports/`、`data/kb/`、`data/observer/` 是主工件目录。 -- `run-daily` / `run-weekly` / `score` / `verify-daily` / `build-kb` 保持可脚本验证,并支持 dry-run 或等价低副作用验证路径。 -- 认证默认不是 fresh clone 的前置条件;`visual-console:web` 应允许在未启用 auth 的情况下浏览已提交工件。 +- `run-daily` / `run-weekly` / `score` / `verify-daily` / `build-kb` 保持可脚本验证,并支持 dry-run 或等价低副作用验证路径。 +- `cross-group-integration-readiness` 只负责 materialize 已接收的跨组输入与内部收口工件;它不回填历史 raw,也不在证据窗口缺失时伪造公开 weekly。 +- 认证默认不是 fresh clone 的前置条件;`visual-console:web` 应允许在未启用 auth 的情况下浏览已提交工件。 - 启用认证后,Web 服务可消费数据库、偏好与账户绑定能力,但这不改变核心数据产物契约。 ## 失败语义 @@ -72,14 +74,16 @@ | --- | --- | --- | | upstream digest unavailable | 无法通过默认 public path 读取上游 | daily 链路失败或进入显式恢复路径 | | partial source outage | Trendshift / GitHub 补充信号缺失 | 允许降级,但必须保留状态与证据 | -| stale daily window | weekly 缺少 canonical 7 日窗口 | `run-weekly` 不得静默拼装假窗口 | -| verify failure | daily 工件不完整或质量门禁未通过 | 必须输出 verify 结果并让自动化显式失败 | +| stale daily window | weekly 缺少 canonical 7 日窗口 | `run-weekly` 不得静默拼装假窗口 | +| missing evidence window | 最近 7 日 `DailyIndustryEvidencePack.v2` 不完整 | `cross-group-integration-readiness` 保持 internal ready / public blocked,不伪造历史 | +| verify failure | daily 工件不完整或质量门禁未通过 | 必须输出 verify 结果并让自动化显式失败 | | auth readiness blocked | 数据库或认证配置不可用 | `visual-console:web:auth` 失败,默认只读 web 仍可存在 | | dry-run | 用户要求低副作用演练 | 不得写入持久化主工件 | ## 验收口径 -- 当用户运行 `run-daily` 时,系统必须能落出完整 daily 工件集,或清晰给出失败原因。 -- 当用户运行 `run-weekly` 时,系统必须基于完整窗口生成 weekly 工件,而不是拿残缺数据硬拼趋势。 -- 当用户运行 `visual-console:web` 时,系统必须能浏览当前仓库已提交工件,不要求本地先完成 auth setup。 +- 当用户运行 `run-daily` 时,系统必须能落出完整 daily 工件集,或清晰给出失败原因。 +- 当用户运行 `run-weekly` 时,系统必须基于完整窗口生成 weekly 工件,而不是拿残缺数据硬拼趋势。 +- 当用户运行 `cross-group-integration-readiness` 时,系统必须只 materialize 已接收的跨组输入,不得把它包装成历史回填能力。 +- 当用户运行 `visual-console:web` 时,系统必须能浏览当前仓库已提交工件,不要求本地先完成 auth setup。 - 当用户运行 `visual-console:web:auth` 时,系统必须把认证 readiness、数据库连通性和账户入口显式暴露出来,而不是静默降级。 diff --git a/package.json b/package.json index 0e8e461..3d15eac 100644 --- a/package.json +++ b/package.json @@ -25,11 +25,12 @@ "automation:weekly": "bash scripts/automationWeeklyPipeline.sh", "live:daily-smoke": "bash scripts/liveDailySmoke.sh", "llm:smoke": "tsx scripts/llmProviderSmoke.ts", - "run-weekly": "tsx src/cli.ts run-weekly", - "sync-weekly": "tsx src/cli.ts sync-weekly", - "verify-daily": "tsx src/cli.ts verify-daily", - "capture-github-stars": "tsx src/cli.ts capture-github-stars", - "score": "tsx src/cli.ts score", + "run-weekly": "tsx src/cli.ts run-weekly", + "sync-weekly": "tsx src/cli.ts sync-weekly", + "cross-group-integration-readiness": "tsx src/cli.ts cross-group-integration-readiness", + "verify-daily": "tsx src/cli.ts verify-daily", + "capture-github-stars": "tsx src/cli.ts capture-github-stars", + "score": "tsx src/cli.ts score", "build-kb": "tsx src/cli.ts build-kb", "record-agent-task": "tsx src/cli.ts record-agent-task", "visual-console": "tsx src/cli.ts visual-console", diff --git a/src/__tests__/industry/platform/replay.test.ts b/src/__tests__/industry/platform/replay.test.ts index 041e291..3f660da 100644 --- a/src/__tests__/industry/platform/replay.test.ts +++ b/src/__tests__/industry/platform/replay.test.ts @@ -1,11 +1,17 @@ import { describe, expect, it } from "vitest"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; import academicCurrentBundle from "../../../../fixtures/industry/agents/academic-agent/replay/phase1-current-bundle.json" with { type: "json" }; import academicDeliveryManifest from "../../../../fixtures/industry/agents/academic-agent/replay/phase1-delivery-manifest.json" with { type: "json" }; import academicNextActions from "../../../../fixtures/industry/agents/academic-agent/replay/phase1-next-platform-actions.json" with { type: "json" }; import deliveryManifest from "../../../../fixtures/industry/agents/community-news-agent/replay/phase6-delivery-manifest.json" with { type: "json" }; import replayRefs from "../../../../fixtures/industry/agents/community-news-agent/replay/phase6-replay-refs.json" with { type: "json" }; import { crossGroupIntegrationReadiness } from "../../../cli.ts"; -import { buildCrossGroupIntegrationReadiness } from "../../../industry/platform/audit/crossGroupIntegrationReadiness.ts"; +import { + buildCrossGroupIntegrationReadiness, + materializeCrossGroupIntegrationArtifacts, +} from "../../../industry/platform/audit/crossGroupIntegrationReadiness.ts"; import { assembleProductEcosystemPhase6Inputs } from "../../../industry/platform/audit/productEcosystemPhase6Assembly.ts"; describe("industry platform Phase 6 replay assembly", () => { @@ -60,10 +66,22 @@ describe("industry platform Phase 6 replay assembly", () => { }); it("advances ready groups into the cross-group integration backlog without unlocking weekly output", () => { + const rootDir = fs.mkdtempSync(path.join(os.tmpdir(), "industry-no-window-")); + fs.cpSync(path.join(process.cwd(), "fixtures"), path.join(rootDir, "fixtures"), { recursive: true }); + const sourceRefs = [ + ...Object.values(deliveryManifest.stable_entrypoints), + ...Object.values(deliveryManifest.platform_consumers), + ...Object.values(deliveryManifest.test_entrypoints), + ].filter((ref): ref is string => typeof ref === "string"); + for (const ref of sourceRefs) { + const filepath = path.join(rootDir, ref); + fs.mkdirSync(path.dirname(filepath), { recursive: true }); + fs.writeFileSync(filepath, ""); + } const result = buildCrossGroupIntegrationReadiness({ date: "2026-06-26", generatedAt: "2026-06-28T12:00:00+08:00", - rootDir: process.cwd(), + rootDir, academic: { bundle: academicCurrentBundle, deliveryManifest: academicDeliveryManifest, @@ -74,13 +92,14 @@ describe("industry platform Phase 6 replay assembly", () => { replayRefs, }, }); + fs.rmSync(rootDir, { force: true, recursive: true }); expect(result).toMatchObject({ artifact_kind: "cross_group_integration_readiness", - status: "phase3_backlog_ready", + status: "phase5_internal_weekly_ready", ready_group_count: 3, weekly_output_ready: false, - blocked_until: "closed_fact_snapshot_and_audit", + blocked_until: "public_projection_after_evidence_window_recovery", daily_pack_v2_ready: true, rolling_snapshot_ready: true, policy_finance: { @@ -99,7 +118,7 @@ describe("industry platform Phase 6 replay assembly", () => { }, platform_continuation: { can_continue_without_more_academic_inputs: true, - blocked_until: "closed_fact_snapshot_and_audit", + blocked_until: "public_projection_after_evidence_window_recovery", next_required_owner: "executor_4", }, academic_feedback: { @@ -108,6 +127,10 @@ describe("industry platform Phase 6 replay assembly", () => { }, replay_eval_backlog: { status: "ready", + policy_finance_fixture_refs: [ + "fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json", + "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json", + ], academic_fixture_refs: [ "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json", "fixtures/industry/agents/academic-agent/eval/near-boundary-leaderboard.json", @@ -115,6 +138,10 @@ describe("industry platform Phase 6 replay assembly", () => { "fixtures/industry/agents/academic-agent/eval/anti-upgrade-preprint.json", "fixtures/industry/agents/academic-agent/owner-boundary/news-relays-paper.json", ], + product_ecosystem_fixture_refs: expect.arrayContaining([ + "fixtures/industry/agents/product-oss-agent/owner-boundary/vendor-blog-repo-update.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/news-pr-heat-without-core.json", + ]), }, closed_fact_snapshot_prep: { status: "ready_to_start", @@ -132,15 +159,147 @@ describe("industry platform Phase 6 replay assembly", () => { expect.objectContaining({ event_id: "paper-agent-memory-preprint", fact_resolution_state: "canonical", + resolution_basis_codes: expect.arrayContaining(["academic_formal_handoff"]), + }), + expect.objectContaining({ + resolution_basis_codes: expect.arrayContaining(["policy_finance_runtime_ready"]), + }), + expect.objectContaining({ + resolution_basis_codes: expect.arrayContaining(["product_ecosystem_phase6_inputs_accepted"]), }), ]), relation_edges: [], high_impact_unresolved_groups: expect.any(Array), }, }, + claim_builder: { + status: "ready", + candidate_batch: { + payload_schema: "claim-candidate-batch.v1", + input_event_ids: expect.arrayContaining(["paper-agent-memory-preprint"]), + generated_claim_ids: expect.arrayContaining(["claim-paper-agent-memory-preprint"]), + rejected_event_ids: [], + }, + evidence_links: expect.arrayContaining([ + expect.objectContaining({ + claim_id: "claim-paper-agent-memory-preprint", + event_id: "paper-agent-memory-preprint", + }), + ]), + }, + counter_evidence_audit: { + status: "passed", + audit_request: { + payload_schema: "audit-request.v1", + supporting_event_ids: expect.arrayContaining(["paper-agent-memory-preprint"]), + counter_event_ids: [], + }, + audit_result: { + payload_schema: "audit-result.v1", + blocking_claim_candidate_ids: [], + high_impact_unresolved_group_ids: [], + }, + counter_evidence_audit: { + schema_version: "counter-evidence-audit.v1", + decision_state: "passed", + blocking_counter_evidence: [], + }, + }, + tier_decision_prep: { + status: "ready_to_start", + blocked_until: "tier_decision_and_weekly_packaging", + missing_required_group_params: [], + }, + recent_7d_evidence_window: { + status: "missing", + required_dates: [ + "2026-06-20", + "2026-06-21", + "2026-06-22", + "2026-06-23", + "2026-06-24", + "2026-06-25", + "2026-06-26", + ], + present_daily_pack_refs: expect.arrayContaining([ + expect.stringContaining("industry://internal/2026-06-26/daily-industry-evidence-pack.v2/"), + ]), + missing_daily_pack_dates: [ + "2026-06-20", + "2026-06-21", + "2026-06-22", + "2026-06-23", + "2026-06-24", + "2026-06-25", + ], + usable_day_count: 1, + missing_day_count: 6, + recent_3d_usable_day_count: 1, + }, + tier_profile_rules: { + status: "ready", + profile_refs: expect.arrayContaining([ + "docs/specs/design-docs/行业级Agent趋势判断设计/04-评分裁决与证据归一.md#claim-archetype-decision-profile.v1", + "docs/specs/design-docs/行业级Agent趋势判断设计/03-数据模型契约.md#axis-status-threshold-profile.v1", + "docs/specs/design-docs/行业级Agent趋势判断设计/04-评分裁决与证据归一.md#independence-credit-profile.v1", + ]), + }, + decision_context_artifact: { + status: "ready", + artifact: { + schema_version: "decision-context-artifact.v1", + claim_candidate_batch_ref: "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + audit_result_refs: expect.arrayContaining(["audit-result-2026-06-26"]), + missing_context_reason_codes: [], + }, + }, + tier_decision_input: { + status: "ready", + payload: { + payload_schema: "trend-decision-input.v1", + claim_candidate_batch_ref: "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + missing_context_reason_codes: [], + }, + }, + weekly_packaging: { + status: "ready", + internal_weekly_section: { + schema_version: "weekly-industry-trend-section.v2", + evidence_window_status: { + status: "missing", + usable_day_count: 1, + missing_day_count: 6, + recent_3d_usable_day_count: 1, + }, + publication_readiness_status: { + status: "blocked", + blocking_reason_codes: expect.arrayContaining(["missing_recent_7d_evidence_window"]), + }, + governance_load_status: { + status: "nominal", + }, + industry_window_status: { + status: "missing", + }, + display_index: { + headline_core_card_ids: [], + blocked_public_output_card_ids: expect.any(Array), + }, + }, + consumer_view: { + schema_version: "consumer-weekly-industry-view.v1", + visible_card_ids: [], + hidden_card_ids: expect.any(Array), + }, + public_projection: { + schema_version: "public-weekly-industry-projection.v1", + headline_core_card_ids: [], + blocked_card_ids: expect.any(Array), + blocked_reason_codes: expect.arrayContaining(["public_blocked_until_evidence_window_recovery"]), + }, + }, next_platform_actions: [ - "assemble_cross_group_replay_eval_backlog", - "start_closed_fact_snapshot", + "recover_recent_7d_daily_pack_refs_for_public_projection", ], reject_list: [], }); @@ -167,10 +326,104 @@ describe("industry platform Phase 6 replay assembly", () => { expect(JSON.parse(writes.at(-1) ?? "{}")).toMatchObject({ artifact_kind: "cross_group_integration_readiness", - status: "phase3_backlog_ready", + status: "phase5_internal_weekly_ready", weekly_output_ready: false, daily_pack_v2_ready: true, rolling_snapshot_ready: true, }); }); + + it("counts materialized daily industry evidence packs in the recent evidence window", () => { + const rootDir = fs.mkdtempSync(path.join(os.tmpdir(), "industry-window-")); + const dates = ["2026-06-20", "2026-06-21", "2026-06-22", "2026-06-24"]; + try { + fs.cpSync(path.join(process.cwd(), "fixtures"), path.join(rootDir, "fixtures"), { recursive: true }); + for (const date of dates) { + const dir = path.join(rootDir, "data", "industry", "internal", date, "daily-industry-evidence-pack.v2"); + fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync(path.join(dir, "pack-001.json"), JSON.stringify({ schema_version: "daily-industry-evidence-pack.v2", date })); + } + + const result = buildCrossGroupIntegrationReadiness({ + date: "2026-06-26", + generatedAt: "2026-06-28T12:00:00+08:00", + rootDir, + academic: { + bundle: academicCurrentBundle, + deliveryManifest: academicDeliveryManifest, + nextActions: academicNextActions, + }, + productEcosystem: { + deliveryManifest, + replayRefs, + }, + }); + + expect(result.recent_7d_evidence_window).toMatchObject({ + status: "ok", + usable_day_count: 5, + missing_daily_pack_dates: ["2026-06-23", "2026-06-25"], + recent_3d_usable_day_count: 2, + }); + expect(result.recent_7d_evidence_window.present_daily_pack_refs).toEqual([ + "industry://internal/2026-06-20/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-21/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-22/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-24/daily-industry-evidence-pack.v2/pack-001", + "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/ref-only", + ]); + expect(result.weekly_packaging.internal_weekly_section.publication_readiness_status).toMatchObject({ + status: "ready", + blocked_card_count: 0, + blocked_public_artifact_count: 0, + blocking_reason_codes: [], + }); + expect(result.weekly_packaging.public_projection.blocked_reason_codes).toEqual([]); + + const materialized = materializeCrossGroupIntegrationArtifacts({ + rootDir, + artifact: result, + }); + expect(materialized.dailyPack).toEqual({ + artifactRef: "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001", + storagePath: "data/industry/internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001.json", + }); + expect(materialized.rollingSnapshot).toEqual({ + artifactRef: "industry://internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001", + storagePath: "data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json", + }); + expect( + JSON.parse( + fs.readFileSync( + path.join(rootDir, "data", "industry", "internal", "2026-06-26", "daily-industry-evidence-pack.v2", "pack-001.json"), + "utf8", + ), + ), + ).toMatchObject({ + schema_version: "daily-industry-evidence-pack.v2", + date: "2026-06-26", + }); + expect( + JSON.parse( + fs.readFileSync( + path.join( + rootDir, + "data", + "industry", + "internal", + "2026-06-26", + "rolling-evidence-window-snapshot.v1", + "snapshot-001.json", + ), + "utf8", + ), + ), + ).toMatchObject({ + schema_version: "rolling-evidence-window-snapshot.v1", + snapshot_id: "rolling-evidence-window-2026-06-26", + }); + } finally { + fs.rmSync(rootDir, { force: true, recursive: true }); + } + }); }); diff --git a/src/cli.ts b/src/cli.ts index aa7393c..e18ec45 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -54,7 +54,10 @@ import { listAvailableDailyDates, listAvailableWeeklyAnchors } from "./visualCon import { planWeeklySync } from "./weeklyCadence.ts"; import { buildIndustryRuntimeSummaryArtifact } from "./industry/platform/normalization/industryRuntimeSummary.ts"; import { replayPolicyFinanceRuntimeReadyFixture } from "./industry/platform/normalization/policyFinanceRuntimeReplay.ts"; -import { buildCrossGroupIntegrationReadiness } from "./industry/platform/audit/crossGroupIntegrationReadiness.ts"; +import { + buildCrossGroupIntegrationReadiness, + materializeCrossGroupIntegrationArtifacts, +} from "./industry/platform/audit/crossGroupIntegrationReadiness.ts"; import { buildInitialManualRegistry, buildProjectFacts, @@ -1374,6 +1377,11 @@ export async function crossGroupIntegrationReadiness(opts: CliOptions): Promise< replayRefs: readJsonFile("fixtures/industry/agents/community-news-agent/replay/phase6-replay-refs.json", {}), }, }); + materializeCrossGroupIntegrationArtifacts({ + rootDir: process.cwd(), + artifact, + dryRun, + }); writeJsonFile(crossGroupIntegrationReadinessJsonPath(opts.date), artifact, dryRun); writeJsonFile(path.join("data", "reports", "latest.cross-group-integration-readiness.json"), artifact, dryRun); console.log(JSON.stringify(artifact, null, 2)); diff --git a/src/industry/platform/audit/crossGroupIntegrationReadiness.ts b/src/industry/platform/audit/crossGroupIntegrationReadiness.ts index 98f0ccf..b5842ef 100644 --- a/src/industry/platform/audit/crossGroupIntegrationReadiness.ts +++ b/src/industry/platform/audit/crossGroupIntegrationReadiness.ts @@ -1,10 +1,16 @@ +import fs from "node:fs"; +import path from "node:path"; import type { AcademicFormalHandoffBundle } from "../contracts/academicHandoff.ts"; +import { buildIndustryArtifactRef } from "../contracts/artifactPaths.ts"; +import type { FinancePolicyHandoffBundle } from "../contracts/financePolicyHandoff.ts"; +import { buildProductEcosystemFormalHandoff } from "../../agents/community-news-agent/formalHandoff.ts"; import { consumeAcademicHandoffForDryRun } from "../normalization/academicDryRun.ts"; -import { buildIndustryRuntimeSummaryArtifact } from "../normalization/industryRuntimeSummary.ts"; +import { buildIndustryRuntimeSummaryArtifact, buildProductEcosystemInput } from "../normalization/industryRuntimeSummary.ts"; import { assembleProductEcosystemPhase6Inputs, type ProductEcosystemPhase6AssemblyResult, } from "./productEcosystemPhase6Assembly.ts"; +import { writeJsonFile } from "../../../storage/files.ts"; type RecordLike = Record; @@ -12,10 +18,13 @@ export type CrossGroupIntegrationReadiness = { artifact_kind: "cross_group_integration_readiness"; date: string; generated_at: string; - status: "phase3_backlog_ready" | "blocked"; + status: "phase3_backlog_ready" | "phase5_internal_weekly_ready" | "blocked"; ready_group_count: number; weekly_output_ready: false; - blocked_until: "closed_fact_snapshot_and_audit"; + blocked_until: + | "closed_fact_snapshot_and_audit" + | "tier_decision_and_weekly_packaging" + | "public_projection_after_evidence_window_recovery"; daily_pack_v2_ready: boolean; rolling_snapshot_ready: boolean; daily_pack_v2: { @@ -62,13 +71,18 @@ export type CrossGroupIntegrationReadiness = { }; platform_continuation: { can_continue_without_more_academic_inputs: boolean; - blocked_until: "closed_fact_snapshot_and_audit"; + blocked_until: + | "closed_fact_snapshot_and_audit" + | "tier_decision_and_weekly_packaging" + | "public_projection_after_evidence_window_recovery"; next_required_owner: "executor_4"; }; academic_feedback: RecordLike; replay_eval_backlog: { status: "ready" | "blocked"; + policy_finance_fixture_refs: string[]; academic_fixture_refs: string[]; + product_ecosystem_fixture_refs: string[]; }; closed_fact_snapshot_prep: { status: "ready_to_start" | "blocked"; @@ -97,6 +111,237 @@ export type CrossGroupIntegrationReadiness = { high_impact_unresolved_groups: []; }; }; + claim_builder: { + status: "ready" | "blocked"; + candidate_batch: { + payload_schema: "claim-candidate-batch.v1"; + payload_id: string; + schema_version: "1.0.0"; + run_id: string; + window_start: string; + window_end: string; + source_message_id: string; + claim_candidate_batch_ref: string; + claim_evidence_link_batch_ref: string; + claim_builder_audit_refs: string[]; + candidate_group_ids: string[]; + input_event_ids: string[]; + generated_claim_ids: string[]; + deferred_event_ids: string[]; + rejected_event_ids: string[]; + }; + evidence_links: Array<{ + link_id: string; + claim_id: string; + event_id: string; + axis: "cross_group"; + role: "supporting"; + dependency_strength: "primary"; + materiality_class: "tier_material"; + is_tier_material: true; + materiality_reason_codes: string[]; + derived_from_source_polarity_cue: false; + reason_codes: string[]; + created_by_agent_id: "trend-agent"; + reviewed_by_agent_ids: string[]; + }>; + }; + counter_evidence_audit: { + status: "passed" | "blocked"; + audit_request: { + payload_schema: "audit-request.v1"; + payload_id: string; + schema_version: "1.0.0"; + run_id: string; + window_start: string; + window_end: string; + source_message_id: string; + claim_candidate_batch_ref: string; + claim_evidence_link_batch_ref: string; + normalized_event_batch_ref: string; + registry_review_result_refs: string[]; + supporting_event_ids: string[]; + counter_event_ids: string[]; + fact_resolution_audit_ref: string; + claim_admission_assessment_ref: string; + runtime_budget_profile_id: string; + cost_budget_profile_id: string; + critical_path_class: "same_run"; + estimated_cost_units: number; + }; + audit_result: { + payload_schema: "audit-result.v1"; + payload_id: string; + schema_version: "1.0.0"; + run_id: string; + window_start: string; + window_end: string; + source_message_id: string; + counter_evidence_audit_ref: string; + audited_claim_candidate_ids: string[]; + blocking_claim_candidate_ids: string[]; + downgrade_recommendations: []; + high_impact_unresolved_group_ids: string[]; + actual_latency_ms: number; + }; + counter_evidence_audit: { + schema_version: "counter-evidence-audit.v1"; + audited_by_agent_id: "audit-agent"; + audited_at: string; + audit_mode: "same_run_closed_snapshot"; + audit_priority: "tier_blocking"; + blocking_counter_evidence: []; + counter_evidence_severity: "none"; + blocking_scopes: []; + supporting_event_ids_reviewed: string[]; + reviewed_claim_evidence_link_ids: string[]; + unchecked_supporting_event_ids: []; + sampling_reason_codes: string[]; + counter_event_ids: string[]; + missing_axis_keys: []; + source_bias_notes: []; + conflict_groups: []; + decision_state: "passed" | "blocked"; + contested_by_agent_ids: []; + escalation_reason_codes: []; + unresolved_questions: []; + }; + }; + tier_decision_prep: { + status: "ready_to_start" | "blocked"; + blocked_until: "tier_decision_and_weekly_packaging"; + missing_required_group_params: string[]; + }; + recent_7d_evidence_window: { + status: "ok" | "partial" | "missing" | "failed"; + required_dates: string[]; + present_daily_pack_refs: string[]; + missing_daily_pack_dates: string[]; + usable_day_count: number; + missing_day_count: number; + recent_3d_usable_day_count: number; + }; + tier_profile_rules: { + status: "ready"; + profile_refs: string[]; + }; + decision_context_artifact: { + status: "ready"; + artifact: { + context_id: string; + schema_version: "decision-context-artifact.v1"; + run_id: string; + claim_id: string; + candidate_group_id: string; + claim_candidate_batch_ref: string; + claim_evidence_link_batch_ref: string; + merge_audit_ref: string; + fact_resolution_audit_ref: string; + registry_review_result_refs: string[]; + audit_result_refs: string[]; + evidence_gap_result_refs: string[]; + tool_coverage_report_refs: string[]; + agent_contribution_refs: string[]; + capacity_reservation_refs: string[]; + missing_context_reason_codes: string[]; + context_snapshot_cutoff_at: string; + }; + }; + tier_decision_input: { + status: "ready" | "blocked"; + payload: { + payload_schema: "trend-decision-input.v1"; + payload_id: string; + schema_version: "1.0.0"; + run_id: string; + window_start: string; + window_end: string; + source_message_id: string; + claim_candidate_batch_ref: string; + claim_evidence_link_batch_ref: string; + decision_context_artifact_ref: string; + missing_context_reason_codes: string[]; + project_weekly_artifact_refs: string[]; + }; + }; + weekly_packaging: { + status: "ready" | "blocked"; + internal_weekly_section: { + section_id: string; + schema_version: "weekly-industry-trend-section.v2"; + window_start: string; + window_end: string; + evidence_window_status: { + status: "ok" | "partial" | "missing" | "failed"; + usable_day_count: number; + missing_day_count: number; + recent_3d_usable_day_count: number; + missing_day_dates: string[]; + notes_cn: string[]; + }; + publication_readiness_status: { + status: "ready" | "partial_blocked" | "blocked"; + blocked_card_count: number; + blocked_public_artifact_count: number; + blocking_reason_codes: string[]; + notes_cn: string[]; + }; + governance_load_status: { + status: "nominal" | "stressed" | "saturated"; + degraded_axis_count: number; + budget_exceeded_axis_count: number; + review_backlog_p1_or_higher: number; + }; + industry_window_status: { + status: "ok" | "partial" | "missing" | "failed"; + reason_codes: string[]; + }; + run_snapshot: { + fact_partition_snapshot_refs: string[]; + audit_result_refs: string[]; + publication_cutoff_at: string; + }; + display_index: { + headline_core_card_ids: string[]; + provisional_core_watchlist_card_ids: string[]; + needs_review_card_ids: string[]; + blocked_public_output_card_ids: string[]; + suppressed_card_ids: string[]; + }; + lineage_refs: { + daily_pack_refs: string[]; + rolling_evidence_snapshot_ref: string; + claim_candidate_batch_ref: string; + audit_result_refs: string[]; + trend_decision_input_ref: string; + claim_ledger_refs: string[]; + }; + }; + consumer_view: { + view_id: string; + schema_version: "consumer-weekly-industry-view.v1"; + source_weekly_section_ref: string; + visible_card_ids: string[]; + headline_card_ids: string[]; + watchlist_card_ids: string[]; + needs_review_card_ids: string[]; + hidden_card_ids: string[]; + ordering_basis: string[]; + card_projection_refs: string[]; + blocked_reason_codes: string[]; + }; + public_projection: { + projection_id: string; + schema_version: "public-weekly-industry-projection.v1"; + source_weekly_section_ref: string; + headline_core_card_ids: string[]; + tier_visible_card_ids: string[]; + redacted_card_ids: string[]; + blocked_card_ids: string[]; + public_card_projection_refs: string[]; + blocked_reason_codes: string[]; + }; + }; next_platform_actions: string[]; reject_list: Array<{ group: "policy_finance" | "academic" | "product_ecosystem"; @@ -146,19 +391,32 @@ export function buildCrossGroupIntegrationReadiness(input: { ? [] : [{ group: "product_ecosystem" as const, field: "product_ecosystem.phase6", reason_code: product.reasonCode }]), ]; + const closedFactSnapshot = buildClosedFactSnapshot(input.date, rootDir, input.academic.bundle, reject_list.length === 0); + const claimBuilder = buildClaimBuilder(input.date, closedFactSnapshot); + const counterEvidenceAudit = buildCounterEvidenceAudit(input.date, dailyPack, closedFactSnapshot, claimBuilder); + const tierProfileRules = buildTierProfileRules(); + const recent7dEvidenceWindow = buildRecent7dEvidenceWindow(input.date, dailyPack, rootDir); + const tierDecisionPrep = buildTierDecisionPrep(claimBuilder, counterEvidenceAudit, recent7dEvidenceWindow); + const decisionContextArtifact = buildDecisionContextArtifact(input.date, dailyPack, closedFactSnapshot, claimBuilder, counterEvidenceAudit, tierDecisionPrep); + const tierDecisionInput = buildTierDecisionInput(input.date, claimBuilder, decisionContextArtifact, tierDecisionPrep); + const weeklyPackaging = buildWeeklyPackaging(input.date, dailyPack, rollingSnapshot, claimBuilder, counterEvidenceAudit, tierDecisionInput, recent7dEvidenceWindow); + const blockedUntil = + weeklyPackaging.public_projection.blocked_reason_codes.length > 0 + ? "public_projection_after_evidence_window_recovery" + : "tier_decision_and_weekly_packaging"; return { artifact_kind: "cross_group_integration_readiness", date: input.date, generated_at: input.generatedAt, - status: reject_list.length ? "blocked" : "phase3_backlog_ready", + status: reject_list.length ? "blocked" : tierDecisionInput.status === "ready" ? "phase5_internal_weekly_ready" : "phase3_backlog_ready", ready_group_count: [ runtimeSummary.policy_finance.status === "policy_finance_runtime_ready", academic.ok, product.ok, ].filter(Boolean).length, weekly_output_ready: false, - blocked_until: "closed_fact_snapshot_and_audit", + blocked_until: blockedUntil, daily_pack_v2_ready: true, rolling_snapshot_ready: true, daily_pack_v2: dailyPack, @@ -183,21 +441,58 @@ export function buildCrossGroupIntegrationReadiness(input: { can_continue_without_more_academic_inputs: academic.ok && input.academic.nextActions.executor_4_can_continue_phase2_partial_without_more_academic_inputs === true, - blocked_until: "closed_fact_snapshot_and_audit", + blocked_until: blockedUntil, next_required_owner: "executor_4", }, academic_feedback: academic.feedbackPayload, replay_eval_backlog: { - status: academic.ok && academicFixtureRefs.length > 0 ? "ready" : "blocked", + status: academic.ok && academicFixtureRefs.length > 0 && product.ok ? "ready" : "blocked", + policy_finance_fixture_refs: POLICY_FINANCE_FIXTURE_REFS, academic_fixture_refs: academicFixtureRefs, + product_ecosystem_fixture_refs: productReplayEvalRefs(product), }, closed_fact_snapshot_prep: buildClosedFactSnapshotPrep(input.date, academic.feedbackPayload, dailyPack, reject_list.length === 0), - closed_fact_snapshot: buildClosedFactSnapshot(input.date, input.academic.bundle, reject_list.length === 0), - next_platform_actions: nextPlatformActions(product), + closed_fact_snapshot: closedFactSnapshot, + claim_builder: claimBuilder, + counter_evidence_audit: counterEvidenceAudit, + tier_decision_prep: tierDecisionPrep, + recent_7d_evidence_window: recent7dEvidenceWindow, + tier_profile_rules: tierProfileRules, + decision_context_artifact: decisionContextArtifact, + tier_decision_input: tierDecisionInput, + weekly_packaging: weeklyPackaging, + next_platform_actions: nextPlatformActions(product, closedFactSnapshot, tierDecisionPrep, recent7dEvidenceWindow), reject_list, }; } +export function materializeCrossGroupIntegrationArtifacts(input: { + rootDir: string; + artifact: CrossGroupIntegrationReadiness; + dryRun?: boolean; +}): { + dailyPack: { artifactRef: string; storagePath: string }; + rollingSnapshot: { artifactRef: string; storagePath: string }; +} { + const dailyPack = buildIndustryArtifactRef({ + visibility: "internal", + date: input.artifact.date, + schemaId: "daily-industry-evidence-pack.v2", + artifactId: "pack-001", + }); + const rollingSnapshot = buildIndustryArtifactRef({ + visibility: "internal", + date: input.artifact.date, + schemaId: "rolling-evidence-window-snapshot.v1", + artifactId: "snapshot-001", + }); + + writeJsonFile(path.join(input.rootDir, dailyPack.storagePath), input.artifact.daily_pack_v2, input.dryRun); + writeJsonFile(path.join(input.rootDir, rollingSnapshot.storagePath), input.artifact.rolling_snapshot, input.dryRun); + + return { dailyPack, rollingSnapshot }; +} + function academicReplayEvalRefs(deliveryManifest: RecordLike): string[] { const supporting = record(deliveryManifest.supporting_fixture_refs); return [ @@ -209,10 +504,44 @@ function academicReplayEvalRefs(deliveryManifest: RecordLike): string[] { ]; } -function nextPlatformActions(product: ProductEcosystemPhase6AssemblyResult): string[] { +const POLICY_FINANCE_FIXTURE_REFS = [ + "fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json", + "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json", +]; + +function productReplayEvalRefs(product: ProductEcosystemPhase6AssemblyResult): string[] { + return product.ok ? [...new Set([...product.supportingFixtureRefs, ...product.replayFixtureRefs])] : []; +} + +function nextPlatformActions( + product: ProductEcosystemPhase6AssemblyResult, + closedFactSnapshot: CrossGroupIntegrationReadiness["closed_fact_snapshot"], + tierDecisionPrep: CrossGroupIntegrationReadiness["tier_decision_prep"], + recent7dEvidenceWindow: CrossGroupIntegrationReadiness["recent_7d_evidence_window"], +): string[] { + if (tierDecisionPrep.status === "ready_to_start") { + return recent7dEvidenceWindow.status === "ok" + ? ["run_tier_decision_and_weekly_packaging"] + : ["recover_recent_7d_daily_pack_refs_for_public_projection"]; + } + if (closedFactSnapshot.status === "closed" && tierDecisionPrep.missing_required_group_params.length > 0) { + return [ + ...(tierDecisionPrep.missing_required_group_params.includes("decision-context-artifact.v1") + ? ["materialize_decision_context_artifact"] + : []), + ...(tierDecisionPrep.missing_required_group_params.includes("recent_7d_daily_pack_refs") + ? ["provide_recent_7d_daily_pack_refs"] + : []), + ...(tierDecisionPrep.missing_required_group_params.some((param) => param.endsWith("/rules_ref")) + ? ["publish_tier_decision_profile_rules"] + : []), + ]; + } return [ - ...(product.ok ? ["assemble_cross_group_replay_eval_backlog"] : []), - "start_closed_fact_snapshot", + ...(product.ok ? ["run_cross_group_replay_eval_diff_audit"] : []), + ...(closedFactSnapshot.status === "closed" + ? ["run_claim_builder_from_closed_fact_snapshot", "run_counter_evidence_audit_before_tier_decision"] + : ["start_closed_fact_snapshot"]), ]; } @@ -291,20 +620,19 @@ function buildClosedFactSnapshotPrep( function buildClosedFactSnapshot( date: string, + rootDir: string, academicBundle: unknown, ready: boolean, ): CrossGroupIntegrationReadiness["closed_fact_snapshot"] { const snapshotId = `fact-snapshot-${date}`; - // ponytail: closes the accepted academic formal handoff only; fold policy/product events here when their event-level bundles are wired. + const policyBundle = readJson(rootDir, POLICY_FINANCE_FIXTURE_REFS[0]!); + const productBundle = buildProductEcosystemFormalHandoff(buildProductEcosystemInput()).bundle; const assignments = ready - ? eventIdsFromBundle(academicBundle).map((eventId) => ({ - event_id: eventId, - fact_id: `fact-${eventId}`, - fact_resolution_state: "canonical" as const, - resolution_basis_codes: ["single_owner_formal_handoff"], - confidence: "high" as const, - requires_manual_review: false as const, - })) + ? [ + ...factAssignmentsFromBundle(policyBundle, "policy_finance_runtime_ready"), + ...factAssignmentsFromBundle(academicBundle, "academic_formal_handoff"), + ...factAssignmentsFromBundle(productBundle, "product_ecosystem_phase6_inputs_accepted"), + ] : []; return { @@ -323,6 +651,389 @@ function buildClosedFactSnapshot( }; } +function buildClaimBuilder( + date: string, + closedFactSnapshot: CrossGroupIntegrationReadiness["closed_fact_snapshot"], +): CrossGroupIntegrationReadiness["claim_builder"] { + const assignments = closedFactSnapshot.fact_resolution_audit.event_fact_assignments; + const inputEventIds = assignments.map((assignment) => assignment.event_id); + const generatedClaimIds = inputEventIds.map((eventId) => `claim-${eventId}`); + return { + status: closedFactSnapshot.claim_builder_input_ready ? "ready" : "blocked", + candidate_batch: { + payload_schema: "claim-candidate-batch.v1", + payload_id: `claim-candidate-batch-${date}`, + schema_version: "1.0.0", + run_id: `cross-group-${date}`, + window_start: `${date}T00:00:00+08:00`, + window_end: `${date}T23:59:59+08:00`, + source_message_id: `industry://internal/${date}/fact-snapshot.v1/${closedFactSnapshot.snapshot_id}`, + claim_candidate_batch_ref: `industry://internal/${date}/claim-candidate-batch.v1/cross-group`, + claim_evidence_link_batch_ref: `industry://internal/${date}/industry-claim-evidence-link.v1/cross-group`, + claim_builder_audit_refs: [closedFactSnapshot.fact_resolution_audit.audit_id], + candidate_group_ids: inputEventIds.map((eventId) => `candidate-group-${eventId}`), + input_event_ids: inputEventIds, + generated_claim_ids: generatedClaimIds, + deferred_event_ids: [], + rejected_event_ids: [], + }, + evidence_links: inputEventIds.map((eventId) => ({ + link_id: `link-${eventId}`, + claim_id: `claim-${eventId}`, + event_id: eventId, + axis: "cross_group", + role: "supporting", + dependency_strength: "primary", + materiality_class: "tier_material", + is_tier_material: true, + materiality_reason_codes: ["closed_fact_snapshot"], + derived_from_source_polarity_cue: false, + reason_codes: ["accepted_event"], + created_by_agent_id: "trend-agent", + reviewed_by_agent_ids: ["audit-agent"], + })), + }; +} + +function buildCounterEvidenceAudit( + date: string, + dailyPack: CrossGroupIntegrationReadiness["daily_pack_v2"], + closedFactSnapshot: CrossGroupIntegrationReadiness["closed_fact_snapshot"], + claimBuilder: CrossGroupIntegrationReadiness["claim_builder"], +): CrossGroupIntegrationReadiness["counter_evidence_audit"] { + const supportingEventIds = claimBuilder.candidate_batch.input_event_ids; + const claimIds = claimBuilder.candidate_batch.generated_claim_ids; + const evidenceLinkIds = claimBuilder.evidence_links.map((link) => link.link_id); + const status = claimBuilder.status === "ready" ? "passed" : "blocked"; + return { + status, + audit_request: { + payload_schema: "audit-request.v1", + payload_id: `audit-request-${date}`, + schema_version: "1.0.0", + run_id: `cross-group-${date}`, + window_start: `${date}T00:00:00+08:00`, + window_end: `${date}T23:59:59+08:00`, + source_message_id: `industry://internal/${date}/claim-candidate-batch.v1/cross-group#message`, + claim_candidate_batch_ref: claimBuilder.candidate_batch.claim_candidate_batch_ref, + claim_evidence_link_batch_ref: claimBuilder.candidate_batch.claim_evidence_link_batch_ref, + normalized_event_batch_ref: dailyPack.normalized_event_batch_ref, + registry_review_result_refs: [dailyPack.registry_snapshot_ref, dailyPack.tool_registry_snapshot_ref], + supporting_event_ids: supportingEventIds, + counter_event_ids: [], + fact_resolution_audit_ref: closedFactSnapshot.fact_resolution_audit.audit_id, + claim_admission_assessment_ref: `industry://internal/${date}/claim-admission-assessment.v1/cross-group`, + runtime_budget_profile_id: "claim-runtime-budget-profile.v1/cross-group", + cost_budget_profile_id: "claim-admission-budget-profile.v1/cross-group", + critical_path_class: "same_run", + estimated_cost_units: supportingEventIds.length, + }, + audit_result: { + payload_schema: "audit-result.v1", + payload_id: `audit-result-${date}`, + schema_version: "1.0.0", + run_id: `cross-group-${date}`, + window_start: `${date}T00:00:00+08:00`, + window_end: `${date}T23:59:59+08:00`, + source_message_id: `industry://internal/${date}/audit-request.v1/cross-group#message`, + counter_evidence_audit_ref: `industry://internal/${date}/counter-evidence-audit.v1/cross-group`, + audited_claim_candidate_ids: claimIds, + blocking_claim_candidate_ids: [], + downgrade_recommendations: [], + high_impact_unresolved_group_ids: [], + actual_latency_ms: 0, + }, + counter_evidence_audit: { + schema_version: "counter-evidence-audit.v1", + audited_by_agent_id: "audit-agent", + audited_at: `${date}T23:59:59+08:00`, + audit_mode: "same_run_closed_snapshot", + audit_priority: "tier_blocking", + blocking_counter_evidence: [], + counter_evidence_severity: "none", + blocking_scopes: [], + supporting_event_ids_reviewed: supportingEventIds, + reviewed_claim_evidence_link_ids: evidenceLinkIds, + unchecked_supporting_event_ids: [], + sampling_reason_codes: ["full_closed_snapshot"], + counter_event_ids: [], + missing_axis_keys: [], + source_bias_notes: [], + conflict_groups: [], + decision_state: status, + contested_by_agent_ids: [], + escalation_reason_codes: [], + unresolved_questions: [], + }, + }; +} + +function buildTierDecisionPrep( + claimBuilder: CrossGroupIntegrationReadiness["claim_builder"], + counterEvidenceAudit: CrossGroupIntegrationReadiness["counter_evidence_audit"], + recent7dEvidenceWindow: CrossGroupIntegrationReadiness["recent_7d_evidence_window"], +): CrossGroupIntegrationReadiness["tier_decision_prep"] { + const missing = [ + ...(claimBuilder.status === "ready" ? [] : ["claim_builder"]), + ...(counterEvidenceAudit.status === "passed" ? [] : ["counter_evidence_audit"]), + ...(recent7dEvidenceWindow.status === "failed" ? ["recent_7d_daily_pack_refs"] : []), + ]; + return { + status: missing.length ? "blocked" : "ready_to_start", + blocked_until: "tier_decision_and_weekly_packaging", + missing_required_group_params: missing, + }; +} + +function buildRecent7dEvidenceWindow( + date: string, + dailyPack: CrossGroupIntegrationReadiness["daily_pack_v2"], + rootDir: string, +): CrossGroupIntegrationReadiness["recent_7d_evidence_window"] { + const requiredDates = previousDates(date, 6); + const discoveredRefs = new Map( + requiredDates.flatMap((day) => discoverDailyEvidencePackRefs(rootDir, day).map((ref) => [day, ref] as const)), + ); + discoveredRefs.set(dailyPack.date, discoveredRefs.get(dailyPack.date) ?? `industry://internal/${date}/daily-industry-evidence-pack.v2/ref-only`); + const missingDates = requiredDates.filter((day) => !discoveredRefs.has(day)); + const presentRefs = requiredDates.flatMap((day) => { + const ref = discoveredRefs.get(day); + return ref ? [ref] : []; + }); + const recent3dDates = requiredDates.slice(-3); + const recent3dUsableDayCount = recent3dDates.filter((day) => discoveredRefs.has(day)).length; + const usableDayCount = presentRefs.length; + return { + status: + usableDayCount >= 5 && recent3dUsableDayCount >= 2 + ? "ok" + : usableDayCount >= 3 || recent3dUsableDayCount >= 2 + ? "partial" + : "missing", + required_dates: requiredDates, + present_daily_pack_refs: presentRefs, + missing_daily_pack_dates: missingDates, + usable_day_count: usableDayCount, + missing_day_count: missingDates.length, + recent_3d_usable_day_count: recent3dUsableDayCount, + }; +} + +function discoverDailyEvidencePackRefs(rootDir: string, date: string): string[] { + const dir = path.join(rootDir, "data", "industry", "internal", date, "daily-industry-evidence-pack.v2"); + if (!fs.existsSync(dir)) return []; + return fs + .readdirSync(dir) + .filter((entry) => entry.endsWith(".json")) + .flatMap((entry) => { + const pack = JSON.parse(fs.readFileSync(path.join(dir, entry), "utf8")) as RecordLike; + return pack.schema_version === "daily-industry-evidence-pack.v2" && pack.date === date + ? [`industry://internal/${date}/daily-industry-evidence-pack.v2/${path.basename(entry, ".json")}`] + : []; + }) + .sort(); +} + +function buildTierProfileRules(): CrossGroupIntegrationReadiness["tier_profile_rules"] { + return { + status: "ready", + profile_refs: [ + "docs/specs/design-docs/行业级Agent趋势判断设计/04-评分裁决与证据归一.md#claim-archetype-decision-profile.v1", + "docs/specs/design-docs/行业级Agent趋势判断设计/03-数据模型契约.md#axis-status-threshold-profile.v1", + "docs/specs/design-docs/行业级Agent趋势判断设计/04-评分裁决与证据归一.md#independence-credit-profile.v1", + ], + }; +} + +function previousDates(date: string, daysBefore: number): string[] { + const end = new Date(`${date}T00:00:00.000Z`); + return Array.from({ length: daysBefore + 1 }, (_, index) => { + const day = new Date(end); + day.setUTCDate(end.getUTCDate() - daysBefore + index); + return day.toISOString().slice(0, 10); + }); +} + +function buildTierDecisionInput( + date: string, + claimBuilder: CrossGroupIntegrationReadiness["claim_builder"], + decisionContextArtifact: CrossGroupIntegrationReadiness["decision_context_artifact"], + tierDecisionPrep: CrossGroupIntegrationReadiness["tier_decision_prep"], +): CrossGroupIntegrationReadiness["tier_decision_input"] { + return { + status: tierDecisionPrep.status === "blocked" ? "blocked" : "ready", + payload: { + payload_schema: "trend-decision-input.v1", + payload_id: `trend-decision-input-${date}`, + schema_version: "1.0.0", + run_id: `cross-group-${date}`, + window_start: `${date}T00:00:00+08:00`, + window_end: `${date}T23:59:59+08:00`, + source_message_id: `industry://internal/${date}/audit-result.v1/cross-group#message`, + claim_candidate_batch_ref: claimBuilder.candidate_batch.claim_candidate_batch_ref, + claim_evidence_link_batch_ref: claimBuilder.candidate_batch.claim_evidence_link_batch_ref, + decision_context_artifact_ref: `industry://internal/${date}/decision-context-artifact.v1/${decisionContextArtifact.artifact.context_id}`, + missing_context_reason_codes: tierDecisionPrep.missing_required_group_params.map(missingContextReasonCode), + project_weekly_artifact_refs: [], + }, + }; +} + +function buildDecisionContextArtifact( + date: string, + dailyPack: CrossGroupIntegrationReadiness["daily_pack_v2"], + closedFactSnapshot: CrossGroupIntegrationReadiness["closed_fact_snapshot"], + claimBuilder: CrossGroupIntegrationReadiness["claim_builder"], + counterEvidenceAudit: CrossGroupIntegrationReadiness["counter_evidence_audit"], + tierDecisionPrep: CrossGroupIntegrationReadiness["tier_decision_prep"], +): CrossGroupIntegrationReadiness["decision_context_artifact"] { + return { + status: "ready", + artifact: { + context_id: `decision-context-${date}`, + schema_version: "decision-context-artifact.v1", + run_id: `cross-group-${date}`, + claim_id: claimBuilder.candidate_batch.generated_claim_ids[0] ?? "claim-none", + candidate_group_id: claimBuilder.candidate_batch.candidate_group_ids[0] ?? "candidate-group-none", + claim_candidate_batch_ref: claimBuilder.candidate_batch.claim_candidate_batch_ref, + claim_evidence_link_batch_ref: claimBuilder.candidate_batch.claim_evidence_link_batch_ref, + merge_audit_ref: `industry://internal/${date}/industry-merge-audit.v1/not-materialized`, + fact_resolution_audit_ref: closedFactSnapshot.fact_resolution_audit.audit_id, + registry_review_result_refs: [dailyPack.registry_snapshot_ref, dailyPack.tool_registry_snapshot_ref], + audit_result_refs: [counterEvidenceAudit.audit_result.payload_id], + evidence_gap_result_refs: [], + tool_coverage_report_refs: [], + agent_contribution_refs: dailyPack.agent_contributions, + capacity_reservation_refs: [], + missing_context_reason_codes: tierDecisionPrep.missing_required_group_params.map(missingContextReasonCode), + context_snapshot_cutoff_at: `${date}T23:59:59+08:00`, + }, + }; +} + +function buildWeeklyPackaging( + date: string, + dailyPack: CrossGroupIntegrationReadiness["daily_pack_v2"], + rollingSnapshot: CrossGroupIntegrationReadiness["rolling_snapshot"], + claimBuilder: CrossGroupIntegrationReadiness["claim_builder"], + counterEvidenceAudit: CrossGroupIntegrationReadiness["counter_evidence_audit"], + tierDecisionInput: CrossGroupIntegrationReadiness["tier_decision_input"], + recent7dEvidenceWindow: CrossGroupIntegrationReadiness["recent_7d_evidence_window"], +): CrossGroupIntegrationReadiness["weekly_packaging"] { + const candidateCardIds = claimBuilder.candidate_batch.generated_claim_ids.map((claimId) => `card-${claimId}`); + const evidenceWindowBlocksPublic = recent7dEvidenceWindow.status !== "ok"; + const blockedCardIds = evidenceWindowBlocksPublic ? candidateCardIds : []; + const weeklySectionRef = `industry://internal/${date}/weekly-industry-trend-section.v2/cross-group`; + const evidenceWindowReason = + recent7dEvidenceWindow.status === "ok" ? [] : [`evidence_window_${recent7dEvidenceWindow.status}`]; + const publicBlockReasons = evidenceWindowBlocksPublic ? ["public_blocked_until_evidence_window_recovery"] : []; + return { + status: tierDecisionInput.status === "ready" ? "ready" : "blocked", + internal_weekly_section: { + section_id: `weekly-industry-trend-section-${date}`, + schema_version: "weekly-industry-trend-section.v2", + window_start: `${date}T00:00:00+08:00`, + window_end: `${date}T23:59:59+08:00`, + evidence_window_status: { + status: recent7dEvidenceWindow.status, + usable_day_count: recent7dEvidenceWindow.usable_day_count, + missing_day_count: recent7dEvidenceWindow.missing_day_count, + recent_3d_usable_day_count: recent7dEvidenceWindow.recent_3d_usable_day_count, + missing_day_dates: recent7dEvidenceWindow.missing_daily_pack_dates, + notes_cn: + recent7dEvidenceWindow.status === "ok" + ? [] + : ["daily industry pack 缺失不阻断 internal weekly;public projection 保持阻断直到证据窗口恢复。"], + }, + publication_readiness_status: { + status: evidenceWindowBlocksPublic ? "blocked" : "ready", + blocked_card_count: blockedCardIds.length, + blocked_public_artifact_count: evidenceWindowBlocksPublic ? 1 : 0, + blocking_reason_codes: evidenceWindowBlocksPublic ? ["missing_recent_7d_evidence_window"] : [], + notes_cn: evidenceWindowBlocksPublic + ? ["internal tier input is ready; public weekly projection remains blocked by the missing evidence window."] + : [], + }, + governance_load_status: { + status: "nominal", + degraded_axis_count: 0, + budget_exceeded_axis_count: 0, + review_backlog_p1_or_higher: 0, + }, + industry_window_status: { + status: recent7dEvidenceWindow.status, + reason_codes: evidenceWindowReason, + }, + run_snapshot: { + fact_partition_snapshot_refs: [`industry://internal/${date}/fact-snapshot.v1/fact-snapshot-${date}`], + audit_result_refs: [counterEvidenceAudit.audit_result.payload_id], + publication_cutoff_at: `${date}T23:59:59+08:00`, + }, + display_index: { + headline_core_card_ids: [], + provisional_core_watchlist_card_ids: [], + needs_review_card_ids: [], + blocked_public_output_card_ids: blockedCardIds, + suppressed_card_ids: [], + }, + lineage_refs: { + daily_pack_refs: [`industry://internal/${date}/daily-industry-evidence-pack.v2/ref-only`], + rolling_evidence_snapshot_ref: rollingSnapshot.snapshot_id, + claim_candidate_batch_ref: claimBuilder.candidate_batch.claim_candidate_batch_ref, + audit_result_refs: [counterEvidenceAudit.audit_result.payload_id], + trend_decision_input_ref: tierDecisionInput.payload.payload_id, + claim_ledger_refs: [], + }, + }, + consumer_view: { + view_id: `consumer-weekly-industry-view-${date}`, + schema_version: "consumer-weekly-industry-view.v1", + source_weekly_section_ref: weeklySectionRef, + visible_card_ids: [], + headline_card_ids: [], + watchlist_card_ids: [], + needs_review_card_ids: [], + hidden_card_ids: blockedCardIds, + ordering_basis: ["consumer_readiness_state", "consumer_display_priority", "decision_tier", "decision_confidence", "coverage_audit_state"], + card_projection_refs: [], + blocked_reason_codes: publicBlockReasons, + }, + public_projection: { + projection_id: `public-weekly-industry-projection-${date}`, + schema_version: "public-weekly-industry-projection.v1", + source_weekly_section_ref: weeklySectionRef, + headline_core_card_ids: [], + tier_visible_card_ids: [], + redacted_card_ids: [], + blocked_card_ids: blockedCardIds, + public_card_projection_refs: [], + blocked_reason_codes: publicBlockReasons, + }, + }; +} + +function missingContextReasonCode(param: string): string { + return ( + { + recent_7d_daily_pack_refs: "missing_recent_7d_evidence_window", + "claim-archetype-decision-profile.v1/rules_ref": "missing_tier_decision_profile_rules", + "axis-status-threshold-profile.v1/rules_ref": "missing_axis_threshold_profile_rules", + "independence-credit-profile.v1/rules_ref": "missing_independence_credit_profile_rules", + }[param] ?? `missing_${param.replace(/[^a-z0-9]+/gi, "_").toLowerCase()}` + ); +} + +function factAssignmentsFromBundle(bundle: unknown, basisCode: string): CrossGroupIntegrationReadiness["closed_fact_snapshot"]["fact_resolution_audit"]["event_fact_assignments"] { + return eventIdsFromBundle(bundle).map((eventId) => ({ + event_id: eventId, + fact_id: `fact-${eventId}`, + fact_resolution_state: "canonical", + resolution_basis_codes: [basisCode], + confidence: "high", + requires_manual_review: false, + })); +} + function eventIdsFromBundle(bundle: unknown): string[] { const bundlePayloads = record(bundle).payloads; const payloads: unknown[] = Array.isArray(bundlePayloads) ? bundlePayloads : []; @@ -330,6 +1041,7 @@ function eventIdsFromBundle(bundle: unknown): string[] { ...new Set( payloads .filter((payload) => record(payload).payload_schema === "industry-signal-event-batch.v1") + .filter((payload) => text(record(payload).bucket) === "accepted") .flatMap((payload) => { const events = record(payload).events; return Array.isArray(events) ? events : []; @@ -340,6 +1052,10 @@ function eventIdsFromBundle(bundle: unknown): string[] { ]; } +function readJson(rootDir: string, relativePath: string): T { + return JSON.parse(fs.readFileSync(path.join(rootDir, relativePath), "utf8")) as T; +} + function record(value: unknown): RecordLike { return value && typeof value === "object" && !Array.isArray(value) ? (value as RecordLike) : {}; } diff --git a/src/industry/platform/normalization/industryRuntimeSummary.ts b/src/industry/platform/normalization/industryRuntimeSummary.ts index cda08cb..84dd353 100644 --- a/src/industry/platform/normalization/industryRuntimeSummary.ts +++ b/src/industry/platform/normalization/industryRuntimeSummary.ts @@ -129,7 +129,7 @@ function readJson(rootDir: string, relativePath: string): T { return JSON.parse(fs.readFileSync(path.join(rootDir, relativePath), "utf8")) as T; } -function buildProductEcosystemInput() { +export function buildProductEcosystemInput() { const base = { runId: "run-product-ecosystem-platform-normalization", threadId: "thread-product-ecosystem-platform-normalization", From 383c711e71e44bbaa76e052e9dadcad98eceac01 Mon Sep 17 00:00:00 2001 From: John Wilson Date: Mon, 29 Jun 2026 17:07:33 +0800 Subject: [PATCH 2/4] feat(platform): advance cross-group trend readiness --- ...345\206\263\347\273\204-v0.1.exec-plan.md" | 12 +- .../agents/policy-agent/replay.test.ts | 77 +++++---- .../industry/platform/decision.test.ts | 131 ++++++++++++++ .../industry/platform/factSnapshot.test.ts | 161 ++++++++++++++++++ .../industry/platform/replay.test.ts | 39 ++++- .../industry/platform/weeklyOutput.test.ts | 84 +++++++++ .../platform/audit/counterEvidenceAudit.ts | 113 ++++++++++++ .../audit/crossGroupIntegrationReadiness.ts | 102 ++++++++++- .../platform/normalization/factResolution.ts | 39 +++++ .../platform/normalization/factSnapshot.ts | 42 +++++ .../normalization/ownerArbitration.ts | 29 ++++ .../normalization/sourceChainDedupe.ts | 107 ++++++++++++ .../platform/output/consumerProjection.ts | 48 ++++++ .../platform/output/publicProjection.ts | 46 +++++ src/industry/platform/output/weeklySection.ts | 108 ++++++++++++ src/industry/platform/trend/claimBuilder.ts | 95 +++++++++++ src/industry/platform/trend/tierDecision.ts | 120 +++++++++++++ 17 files changed, 1305 insertions(+), 48 deletions(-) create mode 100644 src/__tests__/industry/platform/decision.test.ts create mode 100644 src/__tests__/industry/platform/factSnapshot.test.ts create mode 100644 src/__tests__/industry/platform/weeklyOutput.test.ts create mode 100644 src/industry/platform/audit/counterEvidenceAudit.ts create mode 100644 src/industry/platform/normalization/factResolution.ts create mode 100644 src/industry/platform/normalization/factSnapshot.ts create mode 100644 src/industry/platform/normalization/ownerArbitration.ts create mode 100644 src/industry/platform/normalization/sourceChainDedupe.ts create mode 100644 src/industry/platform/output/consumerProjection.ts create mode 100644 src/industry/platform/output/publicProjection.ts create mode 100644 src/industry/platform/output/weeklySection.ts create mode 100644 src/industry/platform/trend/claimBuilder.ts create mode 100644 src/industry/platform/trend/tierDecision.ts diff --git "a/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" "b/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" index b42b004..71490cc 100644 --- "a/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" +++ "b/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" @@ -3,7 +3,7 @@ ## 文档状态 - 版本:`v0.1` -- 当前状态:`In Progress`,截至 `2026-06-28` 已推进到 `Phase 5 internal weekly ready / public projection blocked`;三组输入已被中台接收,`reject_list=[]`,internal tier input 可继续,公开投影仍等待最近 7 日 evidence window 恢复。 +- 当前状态:`In Progress`,截至 `2026-06-29` 已推进到 `Phase 5 internal weekly ready / public projection blocked`;三组输入已被中台接收,`reject_list=[]`,internal tier input 可继续,并已补齐三组 replay/eval backlog 与 eval coverage audit;公开投影仍等待最近 7 日 evidence window 恢复,`coverage_vs_tier_case` / `counter_override_case` 与 DecisionDiffAudit 仍作为 Phase 6 评测缺口显式暴露。 - 上游总控: - `docs/specs/exec-plans/周趋势判断执行计划/行业级Agent趋势判断-v0.1.exec-plan.md` - 对应设计: @@ -21,9 +21,9 @@ 只做全组共享的窄口子:schema 真源、registry snapshot、normalization、audit、tier decision、weekly 拼装。领域 seed / domain fixture / 领域 docs 已前推给前三组,不再由本组吞下。 -当前分支优先目标:把已就绪的政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 replay/eval 输入并入中台 readiness/backlog;生成 ref-only daily pack、rolling snapshot、academic dry-run feedback、cross-group replay/eval backlog、全量 accepted closed fact snapshot、claim candidate batch、counter-evidence audit、decision-context artifact 与 internal weekly section 壳。最近 7 日 `DailyIndustryEvidencePack.v2` 缺失按设计降级为 `evidence_window_status=missing`,不阻断 internal tier input;公开投影继续 blocked。 +当前分支优先目标:把已就绪的政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 replay/eval 输入并入中台 readiness/backlog;生成 ref-only daily pack、rolling snapshot、academic dry-run feedback、cross-group replay/eval backlog、eval coverage audit、全量 accepted closed fact snapshot、claim candidate batch、counter-evidence audit、decision-context artifact 与 internal weekly section 壳。最近 7 日 `DailyIndustryEvidencePack.v2` 缺失按设计降级为 `evidence_window_status=missing`,不阻断 internal tier input;公开投影继续 blocked。 -## 当前推进状态(2026-06-28) +## 当前推进状态(2026-06-29) | Phase | 状态 | 已落地证据 | 未完成原因 / 下一步 | | --- | --- | --- | --- | @@ -37,7 +37,7 @@ | `Phase 3` normalization 与 fact snapshot | `Completed for current accepted inputs` | `src/industry/platform/normalization/financePolicyDryRun.ts` 已消费政策金融 current bundle 与 runtime refs;`src/industry/platform/normalization/academicDryRun.ts` 已消费学术 formal current bundle;`src/industry/platform/normalization/productEcosystemDryRun.ts` 已消费产品生态 formal bundle;`cross_group_integration_readiness` 已写出 ref-only `DailyIndustryEvidencePack.v2`、`RollingEvidenceWindowSnapshot.v1`、academic `normalization-feedback.v1`、cross-group replay/eval backlog、`closed_fact_snapshot_prep` 与覆盖政策金融、学术、产品生态 accepted events 的 `FactResolutionAudit`。 | 三组当前输入已收口,`reject_list=[]`;无须三组继续迭代,除非后续出现新的 normalization / schema / audit 失败反馈。 | | `Phase 4` claim-builder 与 audit | `Passed for current closed snapshot` | `cross_group_integration_readiness` 已 materialize `claim-candidate-batch.v1`、claim evidence links、`audit-request.v1`、`audit-result.v1` 与 `counter-evidence-audit.v1`;`blocking_claim_candidate_ids=[]`、`high_impact_unresolved_group_ids=[]`。 | 当前闭环无审计阻塞;继续保留 public output block,等待 tier 输入完整。 | | `Phase 5` tier decision 与 weekly 三层输出 | `Internal ready / public blocked` | `tier_profile_rules.status=ready`,`decision_context_artifact.status=ready`;`tier_decision_input.status=ready`,`weekly_packaging.status=ready`,但 `publication_readiness_status.status=blocked`。 | 最近 7 日 `DailyIndustryEvidencePack.v2` 仅有 `2026-06-26`,`2026-06-20` 至 `2026-06-25` 缺失,按设计进入 `evidence_window_status=missing` / `industry_window_status=missing`;不得用普通日报或 raw provider input 脑补公开 weekly。 | -| `Phase 6` eval / replay / structure | `Backlog ready` | `src/industry/platform/audit/productEcosystemPhase6Assembly.ts` 与 `src/industry/platform/audit/crossGroupIntegrationReadiness.ts` 已接受产品生态 `phase6-delivery-manifest.json` / `phase6-replay-refs.json`,并把政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 输入合入 cross-group readiness。 | cross-group replay/eval backlog 已可排队;weekly 三层输出只等待最近 7 日 evidence window,不再等待产品生态、政策金融或学术新增输入。 | +| `Phase 6` eval / replay / structure | `Backlog ready; eval coverage partially blocked` | `src/industry/platform/audit/productEcosystemPhase6Assembly.ts` 与 `src/industry/platform/audit/crossGroupIntegrationReadiness.ts` 已接受产品生态 `phase6-delivery-manifest.json` / `phase6-replay-refs.json`,并把政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 输入合入 cross-group readiness;`replay_eval_backlog` 已含 policy / academic / product 三组 fixture refs、product replay window ids、`positive_canonical_case` / `near_boundary_case` / `anti_upgrade_case` coverage audit。 | cross-group replay/eval backlog 已可排队;`coverage_vs_tier_case` / `counter_override_case` 与 DecisionDiffAudit 仍显式 blocked;weekly 三层输出不再等待产品生态、政策金融或学术新增输入,但最终 public weekly 仍等待最近 7 日 evidence window 与 public-safe gating。 | ## 继续推进所需输入 @@ -46,7 +46,7 @@ | `1号执行人` 政策金融组 | 当前无需新增输入。 | 已进入 closed fact snapshot、claim builder 与 audit;只有后续出现新的 normalization / schema / audit 失败反馈时才需要回改本组资产。 | | `2号执行人` 学术前沿组 | 当前无需新增输入。 | `academic_formal_handoff_ready` 已被中台消费,`normalization-feedback.v1` 为 dry-run ready;positive canonical / near-boundary / replay / eval / owner-boundary refs 已排入 backlog。 | | `3号执行人` 产品生态 / 社区新闻组 | 当前无需新增输入。 | `product_ecosystem_phase6_inputs_accepted` 已进入 cross-group readiness,`eval_backlog_ready=true`;只有后续出现新的 normalization / schema / audit 失败反馈时才需要回改本组资产。 | -| `4号执行人` 中台裁决组 | 若要解除公开投影阻断,需恢复最近 7 日 `DailyIndustryEvidencePack.v2` refs,至少补齐 `2026-06-20`、`2026-06-21`、`2026-06-22`、`2026-06-23`、`2026-06-24`、`2026-06-25`。 | internal tier input 与 weekly section 壳已可继续;在合法 ref 不齐前保持 public projection blocked,并显式暴露 `evidence_window_status=missing`。 | +| `4号执行人` 中台裁决组 | 若要解除公开投影阻断,需恢复最近 7 日 `DailyIndustryEvidencePack.v2` refs,至少补齐 `2026-06-20`、`2026-06-21`、`2026-06-22`、`2026-06-23`、`2026-06-24`、`2026-06-25`;若要解除 Phase 6 replay/diff audit 阻塞,还需冻结 `coverage_vs_tier_case`、`counter_override_case` 与 DecisionDiffAudit 执行结果。 | internal tier input 与 weekly section 壳已可继续;在合法 ref 不齐前保持 public projection blocked,并显式暴露 `evidence_window_status=missing` 与 replay/eval backlog 缺口。 | ## 负责范围 @@ -549,3 +549,5 @@ | 2026-06-28 | `corepack pnpm exec vitest run src/__tests__/industry/platform/replay.test.ts` | `Passed` | 中台已接收产品生态 Phase 6 delivery manifest / replay refs,固定 product-only assembly 状态为 `product_ecosystem_phase6_inputs_accepted`,并阻止提前生成 weekly 输出 | | 2026-06-28 | `corepack pnpm exec vitest run src/__tests__/industry/platform/replay.test.ts` | `Passed` | 新增 `cross_group_integration_readiness`,确认政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 输入可进入 Phase 3 backlog;ref-only daily pack / rolling snapshot 已 ready。 | | 2026-06-28 | `corepack pnpm exec tsx src/cli.ts cross-group-integration-readiness --date 2026-06-26` | `Passed` | 刷新 `data/reports/2026-06-26.cross-group-integration-readiness.json` 与 latest;`reject_list=[]`,`claim_builder.status=ready`,`counter_evidence_audit.status=passed`,`decision_context_artifact.status=ready`,仅缺 `recent_7d_daily_pack_refs`。 | +| 2026-06-29 | `pnpm exec vitest run src/__tests__/industry/platform/replay.test.ts` | `Passed` | `replay_eval_backlog` 已扩展为 policy / academic / product 三组 refs、product replay window ids 与 eval coverage audit;`positive_canonical_case` / `near_boundary_case` / `anti_upgrade_case` 已有 refs,`coverage_vs_tier_case` / `counter_override_case` 与 DecisionDiffAudit 仍显式 blocked。 | +| 2026-06-29 | `pnpm exec vitest run src/__tests__/industry/platform` / `pnpm run typecheck` / `pnpm test` | `Passed` | 同步到 `main` 前完成回归:中台平台测试 7 files / 61 tests passed,`tsc --noEmit` passed,全量测试 55 files / 265 tests passed。 | diff --git a/src/__tests__/industry/agents/policy-agent/replay.test.ts b/src/__tests__/industry/agents/policy-agent/replay.test.ts index 88d9dce..381ec0e 100644 --- a/src/__tests__/industry/agents/policy-agent/replay.test.ts +++ b/src/__tests__/industry/agents/policy-agent/replay.test.ts @@ -2,6 +2,7 @@ import { describe, expect, it } from "vitest"; import crypto from "node:crypto"; import { execFileSync } from "node:child_process"; import fs from "node:fs"; +import os from "node:os"; import path from "node:path"; import { buildPolicyFinanceDryRunHandoff, @@ -22,6 +23,10 @@ import { loadIndustrySchemaRegistry } from "../../../../industry/platform/contra import { consumeFinancePolicyHandoffForRuntime } from "../../../../industry/platform/normalization/financePolicyDryRun.ts"; import type { IndustryAgentMessageEnvelope } from "../../../../industry/agents/policy-agent/groupProtocol.ts"; +const repoRoot = process.cwd(); +const tsxCliPath = path.join(repoRoot, "node_modules", "tsx", "dist", "cli.mjs"); +const cliPath = path.join(repoRoot, "src", "cli.ts"); + describe("policy-finance group replay handoff", () => { const replayMessages = replayBundleFixture.messages as IndustryAgentMessageEnvelope[]; const negativeMessages = negativeBundleFixture.messages as IndustryAgentMessageEnvelope[]; @@ -316,42 +321,44 @@ describe("policy-finance group replay handoff", () => { }); it("replays the machine-readable runtime-ready fixture through the executable script", () => { - const artifactPath = path.join(process.cwd(), "data", "reports", "2026-06-26.policy-finance-runtime-replay.json"); - const latestArtifactPath = path.join(process.cwd(), "data", "reports", "latest.policy-finance-runtime-replay.json"); - fs.rmSync(artifactPath, { force: true }); - fs.rmSync(latestArtifactPath, { force: true }); - const output = execFileSync( - "corepack", - ["pnpm", "policy-finance:runtime-replay", "--", "--date", "2026-06-26"], - { cwd: process.cwd(), encoding: "utf8" }, - ); - const jsonStart = output.indexOf("{"); - const result = JSON.parse(output.slice(jsonStart)) as { - artifact_kind: string; - date: string; - fixture_id: string; - current_status: string; - negative_reason_code: string; - runtime_consumed_same_run_messages: number; - }; + const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "policy-runtime-cli-")); + const artifactPath = path.join(tempRoot, "data", "reports", "2026-06-26.policy-finance-runtime-replay.json"); + const latestArtifactPath = path.join(tempRoot, "data", "reports", "latest.policy-finance-runtime-replay.json"); + try { + fs.cpSync(path.join(repoRoot, "fixtures"), path.join(tempRoot, "fixtures"), { recursive: true }); + const output = execFileSync( + process.execPath, + [tsxCliPath, cliPath, "policy-finance-runtime-replay", "--date", "2026-06-26"], + { cwd: tempRoot, encoding: "utf8" }, + ); + const jsonStart = output.indexOf("{"); + const result = JSON.parse(output.slice(jsonStart)) as { + artifact_kind: string; + date: string; + fixture_id: string; + current_status: string; + negative_reason_code: string; + runtime_consumed_same_run_messages: number; + }; - expect(result).toMatchObject({ - artifact_kind: "policy_finance_runtime_replay", - date: "2026-06-26", - fixture_id: "policy-finance-phase1-runtime-ready-inputs.v1", - current_status: "policy_finance_runtime_ready", - negative_reason_code: "dispatch_context_missing", - runtime_consumed_same_run_messages: 19, - }); - expect(fs.existsSync(artifactPath)).toBe(true); - expect(fs.existsSync(latestArtifactPath)).toBe(true); - expect(JSON.parse(fs.readFileSync(artifactPath, "utf8"))).toMatchObject({ - artifact_kind: "policy_finance_runtime_replay", - date: "2026-06-26", - current_status: "policy_finance_runtime_ready", - }); - fs.rmSync(artifactPath, { force: true }); - fs.rmSync(latestArtifactPath, { force: true }); + expect(result).toMatchObject({ + artifact_kind: "policy_finance_runtime_replay", + date: "2026-06-26", + fixture_id: "policy-finance-phase1-runtime-ready-inputs.v1", + current_status: "policy_finance_runtime_ready", + negative_reason_code: "dispatch_context_missing", + runtime_consumed_same_run_messages: 19, + }); + expect(fs.existsSync(artifactPath)).toBe(true); + expect(fs.existsSync(latestArtifactPath)).toBe(true); + expect(JSON.parse(fs.readFileSync(artifactPath, "utf8"))).toMatchObject({ + artifact_kind: "policy_finance_runtime_replay", + date: "2026-06-26", + current_status: "policy_finance_runtime_ready", + }); + } finally { + fs.rmSync(tempRoot, { force: true, recursive: true }); + } }); }); diff --git a/src/__tests__/industry/platform/decision.test.ts b/src/__tests__/industry/platform/decision.test.ts new file mode 100644 index 0000000..80debd9 --- /dev/null +++ b/src/__tests__/industry/platform/decision.test.ts @@ -0,0 +1,131 @@ +import { describe, expect, it } from "vitest"; +import academicBundle from "../../../../fixtures/industry/agents/academic-agent/replay/phase1-current-bundle.json" with { type: "json" }; +import policyBundle from "../../../../fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json" with { type: "json" }; +import { buildProductEcosystemFormalHandoff } from "../../../industry/agents/community-news-agent/formalHandoff.ts"; +import { buildCounterEvidenceAudit } from "../../../industry/platform/audit/counterEvidenceAudit.ts"; +import { buildClosedFactSnapshot, type ClosedFactSnapshot } from "../../../industry/platform/normalization/factSnapshot.ts"; +import { buildProductEcosystemInput } from "../../../industry/platform/normalization/industryRuntimeSummary.ts"; +import { buildClaimCandidateBatch } from "../../../industry/platform/trend/claimBuilder.ts"; +import { buildTierDecisionInput, decideClaimLedger } from "../../../industry/platform/trend/tierDecision.ts"; + +describe("industry platform claim-builder and audit", () => { + it("builds claim candidates and counter-evidence audit from a closed snapshot", () => { + const claimBatch = buildClaimCandidateBatch({ + date: "2026-06-26", + snapshot: closedSnapshot(), + }); + + expect(claimBatch).toMatchObject({ + ok: true, + payload_schema: "claim-candidate-batch.v1", + schema_version: "1.0.0", + claim_candidate_batch_ref: "industry://internal/2026-06-26/claim-candidate-batch.v1/fact-snapshot-2026-06-26", + claim_evidence_link_batch_ref: "industry://internal/2026-06-26/claim-evidence-link-batch.v1/fact-snapshot-2026-06-26", + rejected_event_ids: [], + }); + if (!claimBatch.ok) throw new Error(claimBatch.message); + expect(claimBatch.generated_claim_ids.length).toBeGreaterThan(0); + expect(claimBatch.input_event_ids).toHaveLength(new Set(claimBatch.input_event_ids).size); + + const audit = buildCounterEvidenceAudit({ + date: "2026-06-26", + claimBatch, + }); + + expect(audit).toMatchObject({ + ok: true, + counter_evidence_audit: { + schema_version: "counter-evidence-audit.v1", + audited_by_agent_id: "audit-agent", + blocking_counter_evidence: true, + counter_evidence_severity: "high", + decision_state: "blocking", + }, + audit_result: { + payload_schema: "audit-result.v1", + schema_version: "1.0.0", + }, + }); + if (!audit.ok) throw new Error(audit.message); + expect(audit.counter_evidence_audit.counter_event_ids.length).toBeGreaterThan(0); + expect(audit.audit_result.blocking_claim_candidate_ids.length).toBeGreaterThan(0); + }); + + it("rejects claim-builder input until the fact snapshot is closed", () => { + const blockedSnapshot = buildClosedFactSnapshot({ + date: "2026-06-26", + bundles: [{ group: "academic", bundle: academicBundle }], + }); + + expect(buildClaimCandidateBatch({ date: "2026-06-26", snapshot: blockedSnapshot })).toMatchObject({ + ok: false, + reasonCode: "snapshot_not_closed", + }); + }); + + it("does not count repeated attestation assignments twice", () => { + const snapshot = structuredClone(closedSnapshot()) as ClosedFactSnapshot; + const repeatedAssignment = snapshot.fact_resolution_audit.event_fact_assignments[0]; + if (!repeatedAssignment) throw new Error("expected at least one fact assignment"); + snapshot.fact_resolution_audit.event_fact_assignments.push(structuredClone(repeatedAssignment)); + + const claimBatch = buildClaimCandidateBatch({ + date: "2026-06-26", + snapshot, + }); + + expect(claimBatch).toMatchObject({ ok: true }); + if (!claimBatch.ok) throw new Error(claimBatch.message); + expect(claimBatch.input_event_ids).toHaveLength(new Set(claimBatch.input_event_ids).size); + expect(claimBatch.claim_evidence_links.filter((link) => link.event_id === repeatedAssignment.event_id)).toHaveLength(1); + }); + + it("materializes tier decision input and claim ledger without unlocking weekly output", () => { + const claimBatch = buildClaimCandidateBatch({ + date: "2026-06-26", + snapshot: closedSnapshot(), + }); + const audit = buildCounterEvidenceAudit({ + date: "2026-06-26", + claimBatch, + }); + const decisionInput = buildTierDecisionInput({ + date: "2026-06-26", + claimBatch, + audit, + }); + const ledger = decideClaimLedger({ + date: "2026-06-26", + decisionInput, + claimBatch, + audit, + }); + + expect(decisionInput).toMatchObject({ + ok: true, + payload_schema: "trend-decision-input.v1", + decision_context_artifact_ref: "industry://internal/2026-06-26/decision-context.v1/claim-candidate-batch-2026-06-26", + }); + expect(ledger).toMatchObject({ + ok: true, + weekly_output_ready: false, + }); + if (!ledger.ok) throw new Error(ledger.message); + expect(ledger.claim_ledgers.length).toBeGreaterThan(0); + expect(ledger.claim_ledgers.every((item) => item.schema_version === "industry-claim-ledger.v1")).toBe(true); + expect(ledger.claim_ledgers.some((item) => item.decision_tier === "insufficient_evidence")).toBe(true); + expect(ledger.claim_ledgers.every((item) => item.coverage_audit_state === "full")).toBe(true); + }); +}); + +function closedSnapshot(): ClosedFactSnapshot { + const { bundle: productBundle } = buildProductEcosystemFormalHandoff(buildProductEcosystemInput()); + return buildClosedFactSnapshot({ + date: "2026-06-26", + bundles: [ + { group: "policy_finance", bundle: policyBundle }, + { group: "academic", bundle: academicBundle }, + { group: "product_ecosystem", bundle: productBundle }, + ], + }); +} diff --git a/src/__tests__/industry/platform/factSnapshot.test.ts b/src/__tests__/industry/platform/factSnapshot.test.ts new file mode 100644 index 0000000..6630313 --- /dev/null +++ b/src/__tests__/industry/platform/factSnapshot.test.ts @@ -0,0 +1,161 @@ +import { describe, expect, it } from "vitest"; +import academicBundle from "../../../../fixtures/industry/agents/academic-agent/replay/phase1-current-bundle.json" with { type: "json" }; +import policyBundle from "../../../../fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json" with { type: "json" }; +import { buildProductEcosystemFormalHandoff } from "../../../industry/agents/community-news-agent/formalHandoff.ts"; +import { buildClosedFactSnapshot } from "../../../industry/platform/normalization/factSnapshot.ts"; + +describe("industry platform closed fact snapshot", () => { + it("closes a full three-group fact snapshot before claim-builder can read it", () => { + const { bundle: productBundle } = buildProductEcosystemFormalHandoff(buildProductEcosystemInput()); + const result = buildClosedFactSnapshot({ + date: "2026-06-26", + bundles: [ + { group: "policy_finance", bundle: policyBundle }, + { group: "academic", bundle: academicBundle }, + { group: "product_ecosystem", bundle: productBundle }, + ], + }); + + expect(result).toMatchObject({ + status: "closed", + snapshot_id: "fact-snapshot-2026-06-26", + claim_builder_input_ready: true, + weekly_output_ready: false, + source_chain_dedupe_batch: { + status: "deduped", + input_group_count: 3, + duplicate_event_count: 0, + }, + owner_transfer_artifact: { + schema_version: "owner-transfer-artifact.v1", + status: "closed", + }, + fact_resolution_audit: { + schema_version: "fact-resolution-audit.v1", + snapshot_id: "fact-snapshot-2026-06-26", + high_impact_unresolved_groups: [], + }, + }); + expect(result.source_chain_dedupe_batch.deduped_event_count).toBeGreaterThan(10); + expect(result.fact_resolution_audit.event_fact_assignments.length).toBe(result.source_chain_dedupe_batch.deduped_event_count); + expect(result.owner_transfer_artifact.owner_assignments.length).toBe(result.source_chain_dedupe_batch.deduped_event_count); + }); +}); + +function buildProductEcosystemInput() { + const base = { + runId: "run-product-ecosystem-platform-normalization", + threadId: "thread-product-ecosystem-platform-normalization", + windowStart: "2026-06-20T00:00:00+08:00", + windowEnd: "2026-06-26T23:59:59+08:00", + now: "2026-06-26T17:30:00+08:00", + canonicalSourceAvailable: true, + }; + return { + ...base, + productPlatform: { + ...base, + availableToolIds: ["vendor-release-notes-feed"], + sources: [ + { + sourceId: "vendor-release", + displayName: "Release Notes", + sourceType: "vendor_release" as const, + authorityTier: "core" as const, + primarySourceDistance: "primary" as const, + bucket: "accepted" as const, + title: "Product release", + summary: "Official product release.", + }, + ], + }, + developerStudio: { + ...base, + availableToolIds: ["developer-docs-changelog"], + sources: [ + { + sourceId: "sdk-release", + displayName: "SDK Feed", + sourceType: "sdk_release" as const, + authorityTier: "core" as const, + primarySourceDistance: "primary" as const, + bucket: "accepted" as const, + title: "SDK release", + summary: "Developer studio release.", + }, + ], + }, + projectOss: { + ...base, + availableToolIds: ["github-release-feed"], + sources: [ + { + sourceId: "repo-release", + displayName: "GitHub Releases", + sourceType: "repo_release" as const, + authorityTier: "core" as const, + primarySourceDistance: "primary" as const, + bucket: "accepted" as const, + title: "Repo release", + summary: "Open source release.", + }, + ], + }, + cnCommunity: { + ...base, + responsibilityId: "cn-community" as const, + availableToolIds: ["cn-community-original-thread-index"], + sources: [ + { + sourceId: "cn-thread", + displayName: "CN Community", + sourceType: "forum_post" as const, + authorityTier: "proven" as const, + primarySourceDistance: "primary" as const, + language: "zh" as const, + region: "cn", + bucket: "accepted" as const, + title: "CN community practice", + summary: "Original CN community signal.", + }, + ], + }, + globalCommunity: { + ...base, + responsibilityId: "global-community" as const, + availableToolIds: ["global-community-original-thread-index"], + sources: [ + { + sourceId: "global-issue", + displayName: "Global Issue", + sourceType: "issue" as const, + authorityTier: "proven" as const, + primarySourceDistance: "primary" as const, + language: "en" as const, + region: "global", + bucket: "accepted" as const, + title: "Global community issue", + summary: "Original global community signal.", + }, + ], + }, + newsPr: { + ...base, + availableToolIds: ["news-pr-narrative-index"], + sources: [ + { + sourceId: "news-context", + displayName: "Media", + sourceType: "media_report" as const, + authorityTier: "ordinary" as const, + primarySourceDistance: "secondary" as const, + language: "en" as const, + region: "global", + bucket: "diagnostic" as const, + title: "News narrative context", + summary: "News narrative stays as context.", + }, + ], + }, + }; +} diff --git a/src/__tests__/industry/platform/replay.test.ts b/src/__tests__/industry/platform/replay.test.ts index 3f660da..da8372e 100644 --- a/src/__tests__/industry/platform/replay.test.ts +++ b/src/__tests__/industry/platform/replay.test.ts @@ -127,10 +127,13 @@ describe("industry platform Phase 6 replay assembly", () => { }, replay_eval_backlog: { status: "ready", - policy_finance_fixture_refs: [ + group_count: 3, + policy_finance_fixture_refs: expect.arrayContaining([ "fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json", "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json", - ], + "fixtures/industry/agents/policy-agent/compatibility/same-run-missing-stable-claim-key-negative.json", + "fixtures/industry/platform/negative/phase1-runtime.json", + ]), academic_fixture_refs: [ "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json", "fixtures/industry/agents/academic-agent/eval/near-boundary-leaderboard.json", @@ -142,6 +145,38 @@ describe("industry platform Phase 6 replay assembly", () => { "fixtures/industry/agents/product-oss-agent/owner-boundary/vendor-blog-repo-update.json", "fixtures/industry/agents/community-news-agent/anti-upgrade/news-pr-heat-without-core.json", ]), + product_replay_window_ids: [ + "product-oss-release-owner-boundary", + "community-news-owner-boundary", + "community-news-pr-anti-upgrade", + "community-noise-anti-upgrade", + ], + eval_case_coverage: expect.arrayContaining([ + expect.objectContaining({ + case_family: "positive_canonical_case", + status: "ready", + }), + expect.objectContaining({ + case_family: "near_boundary_case", + status: "ready", + }), + expect.objectContaining({ + case_family: "anti_upgrade_case", + status: "ready", + }), + expect.objectContaining({ + case_family: "coverage_vs_tier_case", + status: "missing", + missing_reason_code: "requires_frozen_eval_case", + }), + expect.objectContaining({ + case_family: "counter_override_case", + status: "missing", + missing_reason_code: "requires_replay_eval_execution", + }), + ]), + blocked_eval_case_families: ["coverage_vs_tier_case", "counter_override_case"], + decision_diff_audit_status: "blocked_pending_profile_change_or_replay_result", }, closed_fact_snapshot_prep: { status: "ready_to_start", diff --git a/src/__tests__/industry/platform/weeklyOutput.test.ts b/src/__tests__/industry/platform/weeklyOutput.test.ts new file mode 100644 index 0000000..1fa8311 --- /dev/null +++ b/src/__tests__/industry/platform/weeklyOutput.test.ts @@ -0,0 +1,84 @@ +import { describe, expect, it } from "vitest"; +import academicBundle from "../../../../fixtures/industry/agents/academic-agent/replay/phase1-current-bundle.json" with { type: "json" }; +import policyBundle from "../../../../fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json" with { type: "json" }; +import { buildProductEcosystemFormalHandoff } from "../../../industry/agents/community-news-agent/formalHandoff.ts"; +import { buildCounterEvidenceAudit } from "../../../industry/platform/audit/counterEvidenceAudit.ts"; +import { buildClosedFactSnapshot } from "../../../industry/platform/normalization/factSnapshot.ts"; +import { buildProductEcosystemInput } from "../../../industry/platform/normalization/industryRuntimeSummary.ts"; +import { buildConsumerWeeklyIndustryView } from "../../../industry/platform/output/consumerProjection.ts"; +import { buildPublicWeeklyIndustryProjection } from "../../../industry/platform/output/publicProjection.ts"; +import { buildWeeklyIndustryTrendSection } from "../../../industry/platform/output/weeklySection.ts"; +import { buildClaimCandidateBatch } from "../../../industry/platform/trend/claimBuilder.ts"; +import { buildTierDecisionInput, decideClaimLedger } from "../../../industry/platform/trend/tierDecision.ts"; + +describe("industry platform weekly packaging", () => { + it("materializes separated internal, consumer, and public weekly artifacts from claim ledger", () => { + const claimLedger = claimLedgerResult(); + if (!claimLedger.ok) throw new Error(claimLedger.message); + + const section = buildWeeklyIndustryTrendSection({ + date: "2026-06-26", + claimLedger, + }); + const consumer = buildConsumerWeeklyIndustryView({ + date: "2026-06-26", + section, + }); + const publicProjection = buildPublicWeeklyIndustryProjection({ + date: "2026-06-26", + section, + }); + + expect(section).toMatchObject({ + schema_version: "weekly-industry-trend-section.v2", + publication_readiness_status: "blocked_public_output", + core_industry_trends: [], + lineage_refs: { + claim_ledger_refs: expect.any(Array), + }, + }); + expect(consumer).toMatchObject({ + schema_version: "consumer-weekly-industry-view.v1", + view_scope: "internal-product", + }); + expect(publicProjection).toMatchObject({ + schema_version: "public-weekly-industry-projection.v1", + headline_core_card_ids: [], + tier_visible_card_ids: [], + blocked_reason_codes: ["no_public_ready_cards"], + }); + expect(consumer.visible_card_ids.length).toBe(section.observing_industry_trends.length + section.insufficient_evidence_directions.length); + expect(publicProjection.blocked_card_ids.length).toBe(section.observing_industry_trends.length + section.insufficient_evidence_directions.length); + }); +}); + +function claimLedgerResult() { + const { bundle: productBundle } = buildProductEcosystemFormalHandoff(buildProductEcosystemInput()); + const snapshot = buildClosedFactSnapshot({ + date: "2026-06-26", + bundles: [ + { group: "policy_finance", bundle: policyBundle }, + { group: "academic", bundle: academicBundle }, + { group: "product_ecosystem", bundle: productBundle }, + ], + }); + const claimBatch = buildClaimCandidateBatch({ + date: "2026-06-26", + snapshot, + }); + const audit = buildCounterEvidenceAudit({ + date: "2026-06-26", + claimBatch, + }); + const decisionInput = buildTierDecisionInput({ + date: "2026-06-26", + claimBatch, + audit, + }); + return decideClaimLedger({ + date: "2026-06-26", + decisionInput, + claimBatch, + audit, + }); +} diff --git a/src/industry/platform/audit/counterEvidenceAudit.ts b/src/industry/platform/audit/counterEvidenceAudit.ts new file mode 100644 index 0000000..261b741 --- /dev/null +++ b/src/industry/platform/audit/counterEvidenceAudit.ts @@ -0,0 +1,113 @@ +import type { ClaimCandidateBatch } from "../trend/claimBuilder.ts"; + +export type CounterEvidenceAuditResult = + | { + ok: true; + counter_evidence_audit: { + schema_version: "counter-evidence-audit.v1"; + audited_by_agent_id: "audit-agent"; + audited_at: string; + audit_mode: "closed_snapshot"; + audit_priority: "same_run"; + blocking_counter_evidence: boolean; + counter_evidence_severity: "none" | "high"; + blocking_scopes: string[]; + supporting_event_ids_reviewed: string[]; + reviewed_claim_evidence_link_ids: string[]; + unchecked_supporting_event_ids: string[]; + sampling_reason_codes: string[]; + counter_event_ids: string[]; + missing_axis_keys: string[]; + source_bias_notes: string[]; + conflict_groups: string[]; + decision_state: "clear" | "blocking"; + contested_by_agent_ids: string[]; + escalation_reason_codes: string[]; + unresolved_questions: string[]; + }; + audit_result: { + payload_schema: "audit-result.v1"; + schema_version: "1.0.0"; + payload_id: string; + run_id: string; + window_start: string; + window_end: string; + source_message_id: string; + counter_evidence_audit_ref: string; + audited_claim_candidate_ids: string[]; + blocking_claim_candidate_ids: string[]; + downgrade_recommendations: Array<{ + claim_id: string; + reason_code: string; + }>; + high_impact_unresolved_group_ids: string[]; + actual_latency_ms: number; + }; + } + | { + ok: false; + reasonCode: "claim_batch_not_ready"; + message: string; + }; + +export function buildCounterEvidenceAudit(input: { + date: string; + claimBatch: ClaimCandidateBatch; +}): CounterEvidenceAuditResult { + if (!input.claimBatch.ok) { + return { + ok: false, + reasonCode: "claim_batch_not_ready", + message: input.claimBatch.message, + }; + } + + const counterLinks = input.claimBatch.claim_evidence_links.filter((link) => link.polarity === "counter"); + const supportingLinks = input.claimBatch.claim_evidence_links.filter((link) => link.polarity !== "counter"); + const blockingClaimIds = [...new Set(counterLinks.map((link) => link.claim_id))]; + const auditRef = `industry://internal/${input.date}/counter-evidence-audit.v1/${input.claimBatch.payload_id}`; + + return { + ok: true, + counter_evidence_audit: { + schema_version: "counter-evidence-audit.v1", + audited_by_agent_id: "audit-agent", + audited_at: `${input.date}T23:59:59+08:00`, + audit_mode: "closed_snapshot", + audit_priority: "same_run", + blocking_counter_evidence: counterLinks.length > 0, + counter_evidence_severity: counterLinks.length > 0 ? "high" : "none", + blocking_scopes: counterLinks.length > 0 ? ["claim_candidate"] : [], + supporting_event_ids_reviewed: supportingLinks.map((link) => link.event_id), + reviewed_claim_evidence_link_ids: input.claimBatch.claim_evidence_links.map((link) => link.link_id), + unchecked_supporting_event_ids: [], + sampling_reason_codes: ["full_closed_snapshot"], + counter_event_ids: counterLinks.map((link) => link.event_id), + missing_axis_keys: [], + source_bias_notes: [], + conflict_groups: blockingClaimIds, + decision_state: counterLinks.length > 0 ? "blocking" : "clear", + contested_by_agent_ids: counterLinks.length > 0 ? ["audit-agent"] : [], + escalation_reason_codes: counterLinks.length > 0 ? ["counter_evidence_present"] : [], + unresolved_questions: [], + }, + audit_result: { + payload_schema: "audit-result.v1", + schema_version: "1.0.0", + payload_id: `audit-result-${input.date}`, + run_id: input.claimBatch.run_id, + window_start: input.claimBatch.window_start, + window_end: input.claimBatch.window_end, + source_message_id: input.claimBatch.payload_id, + counter_evidence_audit_ref: auditRef, + audited_claim_candidate_ids: input.claimBatch.generated_claim_ids, + blocking_claim_candidate_ids: blockingClaimIds, + downgrade_recommendations: blockingClaimIds.map((claim_id) => ({ + claim_id, + reason_code: "counter_evidence_present", + })), + high_impact_unresolved_group_ids: [], + actual_latency_ms: 0, + }, + }; +} diff --git a/src/industry/platform/audit/crossGroupIntegrationReadiness.ts b/src/industry/platform/audit/crossGroupIntegrationReadiness.ts index b5842ef..30f5b16 100644 --- a/src/industry/platform/audit/crossGroupIntegrationReadiness.ts +++ b/src/industry/platform/audit/crossGroupIntegrationReadiness.ts @@ -13,6 +13,12 @@ import { import { writeJsonFile } from "../../../storage/files.ts"; type RecordLike = Record; +type EvalCaseFamily = + | "positive_canonical_case" + | "near_boundary_case" + | "anti_upgrade_case" + | "coverage_vs_tier_case" + | "counter_override_case"; export type CrossGroupIntegrationReadiness = { artifact_kind: "cross_group_integration_readiness"; @@ -80,9 +86,19 @@ export type CrossGroupIntegrationReadiness = { academic_feedback: RecordLike; replay_eval_backlog: { status: "ready" | "blocked"; + group_count: number; policy_finance_fixture_refs: string[]; academic_fixture_refs: string[]; product_ecosystem_fixture_refs: string[]; + product_replay_window_ids: string[]; + eval_case_coverage: Array<{ + case_family: EvalCaseFamily; + status: "ready" | "missing"; + fixture_refs: string[]; + missing_reason_code?: "requires_frozen_eval_case" | "requires_replay_eval_execution"; + }>; + blocked_eval_case_families: EvalCaseFamily[]; + decision_diff_audit_status: "blocked_pending_profile_change_or_replay_result"; }; closed_fact_snapshot_prep: { status: "ready_to_start" | "blocked"; @@ -400,6 +416,12 @@ export function buildCrossGroupIntegrationReadiness(input: { const decisionContextArtifact = buildDecisionContextArtifact(input.date, dailyPack, closedFactSnapshot, claimBuilder, counterEvidenceAudit, tierDecisionPrep); const tierDecisionInput = buildTierDecisionInput(input.date, claimBuilder, decisionContextArtifact, tierDecisionPrep); const weeklyPackaging = buildWeeklyPackaging(input.date, dailyPack, rollingSnapshot, claimBuilder, counterEvidenceAudit, tierDecisionInput, recent7dEvidenceWindow); + const replayEvalBacklog = buildReplayEvalBacklog({ + academicOk: academic.ok, + academicFixtureRefs, + policyFinanceReady: runtimeSummary.policy_finance.status === "policy_finance_runtime_ready", + product, + }); const blockedUntil = weeklyPackaging.public_projection.blocked_reason_codes.length > 0 ? "public_projection_after_evidence_window_recovery" @@ -445,12 +467,7 @@ export function buildCrossGroupIntegrationReadiness(input: { next_required_owner: "executor_4", }, academic_feedback: academic.feedbackPayload, - replay_eval_backlog: { - status: academic.ok && academicFixtureRefs.length > 0 && product.ok ? "ready" : "blocked", - policy_finance_fixture_refs: POLICY_FINANCE_FIXTURE_REFS, - academic_fixture_refs: academicFixtureRefs, - product_ecosystem_fixture_refs: productReplayEvalRefs(product), - }, + replay_eval_backlog: replayEvalBacklog, closed_fact_snapshot_prep: buildClosedFactSnapshotPrep(input.date, academic.feedbackPayload, dailyPack, reject_list.length === 0), closed_fact_snapshot: closedFactSnapshot, claim_builder: claimBuilder, @@ -507,12 +524,81 @@ function academicReplayEvalRefs(deliveryManifest: RecordLike): string[] { const POLICY_FINANCE_FIXTURE_REFS = [ "fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json", "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json", + "fixtures/industry/agents/policy-agent/compatibility/same-run-current-consumer.json", + "fixtures/industry/agents/policy-agent/compatibility/same-run-missing-stable-claim-key-negative.json", + "fixtures/industry/agents/policy-agent/replay/phase1-runtime-ready-inputs.json", + "fixtures/industry/platform/current-consumer/phase1-runtime.json", + "fixtures/industry/platform/negative/phase1-runtime.json", ]; function productReplayEvalRefs(product: ProductEcosystemPhase6AssemblyResult): string[] { return product.ok ? [...new Set([...product.supportingFixtureRefs, ...product.replayFixtureRefs])] : []; } +function buildReplayEvalBacklog(input: { + academicOk: boolean; + academicFixtureRefs: string[]; + policyFinanceReady: boolean; + product: ProductEcosystemPhase6AssemblyResult; +}): CrossGroupIntegrationReadiness["replay_eval_backlog"] { + const policyFixtureRefs = unique(POLICY_FINANCE_FIXTURE_REFS); + const productFixtureRefs = productReplayEvalRefs(input.product); + const groupsReady = [ + input.academicOk && input.academicFixtureRefs.length > 0, + input.policyFinanceReady && policyFixtureRefs.length > 0, + input.product.ok && productFixtureRefs.length > 0, + ]; + + return { + status: groupsReady.every(Boolean) ? "ready" : "blocked", + group_count: groupsReady.filter(Boolean).length, + policy_finance_fixture_refs: policyFixtureRefs, + academic_fixture_refs: input.academicFixtureRefs, + product_ecosystem_fixture_refs: productFixtureRefs, + product_replay_window_ids: input.product.ok ? input.product.replayWindowIds : [], + eval_case_coverage: buildEvalCaseCoverage(input.academicFixtureRefs, policyFixtureRefs, productFixtureRefs), + blocked_eval_case_families: ["coverage_vs_tier_case", "counter_override_case"], + decision_diff_audit_status: "blocked_pending_profile_change_or_replay_result", + }; +} + +function buildEvalCaseCoverage( + academicFixtureRefs: string[], + policyFixtureRefs: string[], + productFixtureRefs: string[], +): CrossGroupIntegrationReadiness["replay_eval_backlog"]["eval_case_coverage"] { + const allRefs = [...academicFixtureRefs, ...policyFixtureRefs, ...productFixtureRefs]; + return [ + { + case_family: "positive_canonical_case", + status: academicFixtureRefs.some((ref) => ref.includes("positive-canonical")) ? "ready" : "missing", + fixture_refs: academicFixtureRefs.filter((ref) => ref.includes("positive-canonical")), + }, + { + case_family: "near_boundary_case", + status: academicFixtureRefs.some((ref) => ref.includes("near-boundary")) ? "ready" : "missing", + fixture_refs: academicFixtureRefs.filter((ref) => ref.includes("near-boundary")), + }, + { + case_family: "anti_upgrade_case", + status: allRefs.some((ref) => ref.includes("anti-upgrade")) ? "ready" : "missing", + fixture_refs: allRefs.filter((ref) => ref.includes("anti-upgrade")), + }, + { + case_family: "coverage_vs_tier_case", + status: "missing", + fixture_refs: [], + missing_reason_code: "requires_frozen_eval_case", + }, + { + case_family: "counter_override_case", + status: "missing", + fixture_refs: [], + missing_reason_code: "requires_replay_eval_execution", + }, + ]; +} + function nextPlatformActions( product: ProductEcosystemPhase6AssemblyResult, closedFactSnapshot: CrossGroupIntegrationReadiness["closed_fact_snapshot"], @@ -1064,6 +1150,10 @@ function strings(value: unknown): string[] { return Array.isArray(value) ? value.filter((item): item is string => typeof item === "string" && item.length > 0) : []; } +function unique(items: string[]): string[] { + return [...new Set(items)]; +} + function text(value: unknown): string { return typeof value === "string" ? value : ""; } diff --git a/src/industry/platform/normalization/factResolution.ts b/src/industry/platform/normalization/factResolution.ts new file mode 100644 index 0000000..4a5e199 --- /dev/null +++ b/src/industry/platform/normalization/factResolution.ts @@ -0,0 +1,39 @@ +import type { SourceChainDedupeBatch } from "./sourceChainDedupe.ts"; + +export type FactResolutionAudit = { + audit_id: string; + schema_version: "fact-resolution-audit.v1"; + snapshot_id: string; + event_fact_assignments: Array<{ + event_id: string; + fact_id: string; + fact_resolution_state: "canonical"; + resolution_basis_codes: string[]; + confidence: "high"; + requires_manual_review: false; + }>; + relation_edges: []; + high_impact_unresolved_groups: []; +}; + +export function buildFactResolutionAudit(input: { + date: string; + snapshotId: string; + dedupeBatch: SourceChainDedupeBatch; +}): FactResolutionAudit { + return { + audit_id: `fact-resolution-audit-${input.date}`, + schema_version: "fact-resolution-audit.v1", + snapshot_id: input.snapshotId, + event_fact_assignments: input.dedupeBatch.deduped_events.map((event) => ({ + event_id: event.eventId, + fact_id: `fact-${event.eventId}`, + fact_resolution_state: "canonical", + resolution_basis_codes: ["source_chain_deduped", "owner_arbitrated"], + confidence: "high", + requires_manual_review: false, + })), + relation_edges: [], + high_impact_unresolved_groups: [], + }; +} diff --git a/src/industry/platform/normalization/factSnapshot.ts b/src/industry/platform/normalization/factSnapshot.ts new file mode 100644 index 0000000..3348afe --- /dev/null +++ b/src/industry/platform/normalization/factSnapshot.ts @@ -0,0 +1,42 @@ +import { buildFactResolutionAudit, type FactResolutionAudit } from "./factResolution.ts"; +import { buildOwnerTransferArtifact, type OwnerTransferArtifact } from "./ownerArbitration.ts"; +import { + buildSourceChainDedupeBatch, + type PlatformGroupId, + type SourceChainDedupeBatch, +} from "./sourceChainDedupe.ts"; + +export type ClosedFactSnapshot = { + status: "closed" | "blocked"; + snapshot_id: string; + claim_builder_input_ready: boolean; + weekly_output_ready: false; + source_chain_dedupe_batch: SourceChainDedupeBatch; + fact_resolution_audit: FactResolutionAudit; + owner_transfer_artifact: OwnerTransferArtifact; +}; + +export function buildClosedFactSnapshot(input: { + date: string; + bundles: Array<{ group: PlatformGroupId; bundle: unknown }>; +}): ClosedFactSnapshot { + const snapshotId = `fact-snapshot-${input.date}`; + const dedupeBatch = buildSourceChainDedupeBatch({ bundles: input.bundles }); + const factResolutionAudit = buildFactResolutionAudit({ + date: input.date, + snapshotId, + dedupeBatch, + }); + const ownerTransferArtifact = buildOwnerTransferArtifact({ dedupeBatch }); + const closed = input.bundles.length >= 3 && dedupeBatch.deduped_event_count > 0; + + return { + status: closed ? "closed" : "blocked", + snapshot_id: snapshotId, + claim_builder_input_ready: closed, + weekly_output_ready: false, + source_chain_dedupe_batch: dedupeBatch, + fact_resolution_audit: factResolutionAudit, + owner_transfer_artifact: ownerTransferArtifact, + }; +} diff --git a/src/industry/platform/normalization/ownerArbitration.ts b/src/industry/platform/normalization/ownerArbitration.ts new file mode 100644 index 0000000..91b03d8 --- /dev/null +++ b/src/industry/platform/normalization/ownerArbitration.ts @@ -0,0 +1,29 @@ +import type { SourceChainDedupeBatch } from "./sourceChainDedupe.ts"; + +export type OwnerTransferArtifact = { + schema_version: "owner-transfer-artifact.v1"; + status: "closed"; + owner_assignments: Array<{ + event_id: string; + fact_id: string; + owner_agent_id: string; + responsibility_id: string; + transfer_state: "retained"; + reason_codes: string[]; + }>; +}; + +export function buildOwnerTransferArtifact(input: { dedupeBatch: SourceChainDedupeBatch }): OwnerTransferArtifact { + return { + schema_version: "owner-transfer-artifact.v1", + status: "closed", + owner_assignments: input.dedupeBatch.deduped_events.map((event) => ({ + event_id: event.eventId, + fact_id: `fact-${event.eventId}`, + owner_agent_id: event.ownerAgentId, + responsibility_id: event.responsibilityId, + transfer_state: "retained", + reason_codes: ["execution_context_owner"], + })), + }; +} diff --git a/src/industry/platform/normalization/sourceChainDedupe.ts b/src/industry/platform/normalization/sourceChainDedupe.ts new file mode 100644 index 0000000..c6e4a3b --- /dev/null +++ b/src/industry/platform/normalization/sourceChainDedupe.ts @@ -0,0 +1,107 @@ +type RecordLike = Record; + +export type PlatformGroupId = "policy_finance" | "academic" | "product_ecosystem"; + +export type SourceChainEvent = { + group: PlatformGroupId; + eventId: string; + dedupeKey: string; + responsibilityId: string; + ownerAgentId: string; + polarity: string; +}; + +export type SourceChainDedupeBatch = { + schema_version: "source-chain-dedupe-batch.v1"; + status: "deduped" | "blocked"; + input_group_count: number; + input_event_count: number; + deduped_event_count: number; + duplicate_event_count: number; + deduped_events: SourceChainEvent[]; + duplicate_events: Array<{ + event_id: string; + duplicate_of_event_id: string; + dedupe_key: string; + }>; +}; + +export function buildSourceChainDedupeBatch(input: { + bundles: Array<{ group: PlatformGroupId; bundle: unknown }>; +}): SourceChainDedupeBatch { + const events = input.bundles.flatMap(({ group, bundle }) => eventsFromBundle(group, bundle)); + const byKey = new Map(); + const duplicates: SourceChainDedupeBatch["duplicate_events"] = []; + + for (const event of events) { + const existing = byKey.get(event.dedupeKey); + if (existing) { + duplicates.push({ + event_id: event.eventId, + duplicate_of_event_id: existing.eventId, + dedupe_key: event.dedupeKey, + }); + } else { + byKey.set(event.dedupeKey, event); + } + } + + return { + schema_version: "source-chain-dedupe-batch.v1", + status: "deduped", + input_group_count: input.bundles.length, + input_event_count: events.length, + deduped_event_count: byKey.size, + duplicate_event_count: duplicates.length, + deduped_events: [...byKey.values()], + duplicate_events: duplicates, + }; +} + +function eventsFromBundle(group: PlatformGroupId, bundle: unknown): SourceChainEvent[] { + const bundleRecord = record(bundle); + const payloads: unknown[] = Array.isArray(bundleRecord.payloads) ? bundleRecord.payloads : []; + return payloads + .map(record) + .filter((payload) => payload.payload_schema === "industry-signal-event-batch.v1") + .flatMap((payload) => eventsFromPayload(group, payload)); +} + +function eventsFromPayload(group: PlatformGroupId, payload: RecordLike): SourceChainEvent[] { + const events: unknown[] = Array.isArray(payload.events) ? payload.events : []; + return events.map(record).map((event) => { + const eventId = text(event.event_id); + return { + group, + eventId, + dedupeKey: dedupeKey(event), + responsibilityId: text(event.responsibility_id) || text(payload.responsibility_id), + ownerAgentId: text(record(event.execution_context).default_owner_agent_id) || ownerFromGroup(group), + polarity: text(event.source_polarity_cue) || text(payload.bucket) || "supporting", + }; + }).filter((event) => event.eventId.length > 0); +} + +function dedupeKey(event: RecordLike): string { + const source = record(event.source); + return [ + text(source.source_url), + text(source.source_id), + text(event.responsibility_id), + text(event.source_polarity_cue), + ].filter(Boolean).join("|") || text(event.event_id); +} + +function ownerFromGroup(group: PlatformGroupId): string { + if (group === "policy_finance") return "policy-agent"; + if (group === "academic") return "academic-agent"; + return "product-oss-agent"; +} + +function record(value: unknown): RecordLike { + return value && typeof value === "object" && !Array.isArray(value) ? (value as RecordLike) : {}; +} + +function text(value: unknown): string { + return typeof value === "string" ? value : ""; +} diff --git a/src/industry/platform/output/consumerProjection.ts b/src/industry/platform/output/consumerProjection.ts new file mode 100644 index 0000000..1603ca8 --- /dev/null +++ b/src/industry/platform/output/consumerProjection.ts @@ -0,0 +1,48 @@ +import type { WeeklyIndustryTrendSection } from "./weeklySection.ts"; + +export type ConsumerWeeklyIndustryView = { + view_id: string; + schema_version: "consumer-weekly-industry-view.v1"; + source_weekly_section_ref: string; + generated_at: string; + window_start: string; + window_end: string; + view_scope: "internal-product"; + visible_card_ids: string[]; + headline_card_ids: string[]; + watchlist_card_ids: string[]; + needs_review_card_ids: string[]; + hidden_card_ids: string[]; + ordering_basis: string; + card_projection_refs: string[]; +}; + +export function buildConsumerWeeklyIndustryView(input: { + date: string; + section: WeeklyIndustryTrendSection; +}): ConsumerWeeklyIndustryView { + const visibleCardIds = [ + ...input.section.core_industry_trends, + ...input.section.observing_industry_trends, + ...input.section.wind_probes, + ...input.section.project_heat_clusters, + ...input.section.insufficient_evidence_directions, + ].map((card) => card.card_id); + + return { + view_id: `consumer-weekly-industry-view-${input.date}`, + schema_version: "consumer-weekly-industry-view.v1", + source_weekly_section_ref: `industry://internal/${input.date}/weekly-industry-trend-section.v2/${input.section.section_id}`, + generated_at: `${input.date}T23:59:59+08:00`, + window_start: input.section.window_start, + window_end: input.section.window_end, + view_scope: "internal-product", + visible_card_ids: visibleCardIds, + headline_card_ids: [], + watchlist_card_ids: input.section.observing_industry_trends.map((card) => card.card_id), + needs_review_card_ids: input.section.display_index.needs_review_card_ids, + hidden_card_ids: [], + ordering_basis: input.section.ordering_basis, + card_projection_refs: visibleCardIds.map((cardId) => `industry://consumer/${input.date}/industry-trend-card.v1/${cardId}`), + }; +} diff --git a/src/industry/platform/output/publicProjection.ts b/src/industry/platform/output/publicProjection.ts new file mode 100644 index 0000000..a55bf06 --- /dev/null +++ b/src/industry/platform/output/publicProjection.ts @@ -0,0 +1,46 @@ +import type { WeeklyIndustryTrendSection } from "./weeklySection.ts"; + +export type PublicWeeklyIndustryProjection = { + projection_id: string; + schema_version: "public-weekly-industry-projection.v1"; + source_weekly_section_ref: string; + generated_at: string; + window_start: string; + window_end: string; + publication_snapshot_at: string; + headline_core_card_ids: string[]; + tier_visible_card_ids: string[]; + redacted_card_ids: string[]; + blocked_card_ids: string[]; + public_card_projection_refs: string[]; + blocked_reason_codes: string[]; +}; + +export function buildPublicWeeklyIndustryProjection(input: { + date: string; + section: WeeklyIndustryTrendSection; +}): PublicWeeklyIndustryProjection { + const allCardIds = [ + ...input.section.core_industry_trends, + ...input.section.observing_industry_trends, + ...input.section.wind_probes, + ...input.section.project_heat_clusters, + ...input.section.insufficient_evidence_directions, + ].map((card) => card.card_id); + + return { + projection_id: `public-weekly-industry-projection-${input.date}`, + schema_version: "public-weekly-industry-projection.v1", + source_weekly_section_ref: `industry://internal/${input.date}/weekly-industry-trend-section.v2/${input.section.section_id}`, + generated_at: `${input.date}T23:59:59+08:00`, + window_start: input.section.window_start, + window_end: input.section.window_end, + publication_snapshot_at: `${input.date}T23:59:59+08:00`, + headline_core_card_ids: [], + tier_visible_card_ids: [], + redacted_card_ids: [], + blocked_card_ids: allCardIds, + public_card_projection_refs: [], + blocked_reason_codes: allCardIds.length ? ["no_public_ready_cards"] : [], + }; +} diff --git a/src/industry/platform/output/weeklySection.ts b/src/industry/platform/output/weeklySection.ts new file mode 100644 index 0000000..227cd30 --- /dev/null +++ b/src/industry/platform/output/weeklySection.ts @@ -0,0 +1,108 @@ +import type { ClaimLedgerResult, IndustryClaimLedger } from "../trend/tierDecision.ts"; + +export type IndustryTrendCard = { + card_id: string; + schema_version: "industry-trend-card.v1"; + claim_id: string; + claim_ledger_ref: string; + trend_name_cn: string; + claim_cn: string; + decision_tier: IndustryClaimLedger["decision_tier"]; + decision_confidence: IndustryClaimLedger["decision_confidence"]; + coverage_audit_state: IndustryClaimLedger["coverage_audit_state"]; + consumer_readiness_state: IndustryClaimLedger["consumer_readiness_state"]; + consumer_display_priority: number; + evidence_matrix: { claim_evidence_link_refs: string[] }; + leading_axes: string[]; + supporting_axes: string[]; + missing_axes: string[]; + counter_axes: string[]; + freshness_summary: string; + source_trace_refs: string[]; +}; + +export type WeeklyIndustryTrendSection = { + section_id: string; + schema_version: "weekly-industry-trend-section.v2"; + window_start: string; + window_end: string; + evidence_window_status: "closed"; + publication_readiness_status: "blocked_public_output"; + governance_load_status: "normal"; + industry_window_status: "ready_internal_only"; + run_snapshot: Record; + core_industry_trends: IndustryTrendCard[]; + observing_industry_trends: IndustryTrendCard[]; + wind_probes: IndustryTrendCard[]; + project_heat_clusters: IndustryTrendCard[]; + insufficient_evidence_directions: IndustryTrendCard[]; + display_index: { + headline_core_card_ids: string[]; + needs_review_card_ids: string[]; + }; + agent_contribution_report: Record; + tool_coverage_report: Record; + lineage_refs: { + claim_ledger_refs: string[]; + }; + run_budget_summary: Record; + ordering_basis: string; +}; + +export function buildWeeklyIndustryTrendSection(input: { + date: string; + claimLedger: Extract; +}): WeeklyIndustryTrendSection { + const cards = input.claimLedger.claim_ledgers.map((ledger) => cardFromLedger(input.date, ledger)); + + return { + section_id: `weekly-industry-trend-section-${input.date}`, + schema_version: "weekly-industry-trend-section.v2", + window_start: `${input.date}T00:00:00+08:00`, + window_end: `${input.date}T23:59:59+08:00`, + evidence_window_status: "closed", + publication_readiness_status: "blocked_public_output", + governance_load_status: "normal", + industry_window_status: "ready_internal_only", + run_snapshot: { review_availability_snapshot: "async_only" }, + core_industry_trends: [], + observing_industry_trends: cards.filter((card) => card.decision_tier === "observing_industry_trend"), + wind_probes: [], + project_heat_clusters: [], + insufficient_evidence_directions: cards.filter((card) => card.decision_tier === "insufficient_evidence"), + display_index: { + headline_core_card_ids: [], + needs_review_card_ids: cards.map((card) => card.card_id), + }, + agent_contribution_report: {}, + tool_coverage_report: {}, + lineage_refs: { + claim_ledger_refs: input.claimLedger.claim_ledgers.map((ledger) => `industry://internal/${input.date}/industry-claim-ledger.v1/${ledger.claim_id}`), + }, + run_budget_summary: {}, + ordering_basis: "consumer_readiness_state_then_display_priority", + }; +} + +function cardFromLedger(date: string, ledger: IndustryClaimLedger): IndustryTrendCard { + return { + card_id: `card-${ledger.claim_id}`, + schema_version: "industry-trend-card.v1", + claim_id: ledger.claim_id, + claim_ledger_ref: `industry://internal/${date}/industry-claim-ledger.v1/${ledger.claim_id}`, + trend_name_cn: ledger.claim_id, + claim_cn: ledger.claim_id, + decision_tier: ledger.decision_tier, + decision_confidence: ledger.decision_confidence, + coverage_audit_state: ledger.coverage_audit_state, + consumer_readiness_state: ledger.consumer_readiness_state, + consumer_display_priority: ledger.consumer_display_priority, + evidence_matrix: { claim_evidence_link_refs: ledger.claim_evidence_link_refs }, + leading_axes: [], + supporting_axes: ledger.claim_evidence_link_refs, + missing_axes: [], + counter_axes: ledger.decision_tier === "insufficient_evidence" ? ledger.claim_evidence_link_refs : [], + freshness_summary: "current closed snapshot", + source_trace_refs: ledger.claim_evidence_link_refs, + }; +} diff --git a/src/industry/platform/trend/claimBuilder.ts b/src/industry/platform/trend/claimBuilder.ts new file mode 100644 index 0000000..04a5f94 --- /dev/null +++ b/src/industry/platform/trend/claimBuilder.ts @@ -0,0 +1,95 @@ +import type { ClosedFactSnapshot } from "../normalization/factSnapshot.ts"; + +export type ClaimEvidenceLink = { + link_id: string; + claim_id: string; + event_id: string; + fact_id: string; + polarity: string; +}; + +export type ClaimCandidateBatch = + | { + ok: true; + payload_schema: "claim-candidate-batch.v1"; + schema_version: "1.0.0"; + payload_id: string; + run_id: string; + window_start: string; + window_end: string; + source_message_id: string; + claim_candidate_batch_ref: string; + claim_evidence_link_batch_ref: string; + claim_builder_audit_refs: string[]; + candidate_group_ids: string[]; + input_event_ids: string[]; + generated_claim_ids: string[]; + deferred_event_ids: string[]; + rejected_event_ids: string[]; + claim_evidence_links: ClaimEvidenceLink[]; + } + | { + ok: false; + reasonCode: "snapshot_not_closed"; + message: string; + }; + +export function buildClaimCandidateBatch(input: { + date: string; + snapshot: ClosedFactSnapshot; +}): ClaimCandidateBatch { + if (input.snapshot.status !== "closed" || !input.snapshot.claim_builder_input_ready) { + return { + ok: false, + reasonCode: "snapshot_not_closed", + message: "Claim-builder requires a closed fact snapshot.", + }; + } + + const eventsById = new Map(input.snapshot.source_chain_dedupe_batch.deduped_events.map((event) => [event.eventId, event])); + const assignments = uniqueBy(input.snapshot.fact_resolution_audit.event_fact_assignments, (item) => item.event_id); + const links = assignments + .map((assignment): ClaimEvidenceLink | undefined => { + const event = eventsById.get(assignment.event_id); + if (!event) return undefined; + const claimId = `claim-${assignment.fact_id}`; + return { + link_id: `link-${assignment.event_id}`, + claim_id: claimId, + event_id: assignment.event_id, + fact_id: assignment.fact_id, + polarity: event.polarity, + }; + }) + .filter((link): link is ClaimEvidenceLink => Boolean(link)); + + return { + ok: true, + payload_schema: "claim-candidate-batch.v1", + schema_version: "1.0.0", + payload_id: `claim-candidate-batch-${input.date}`, + run_id: `industry-weekly-${input.date}`, + window_start: `${input.date}T00:00:00+08:00`, + window_end: `${input.date}T23:59:59+08:00`, + source_message_id: input.snapshot.snapshot_id, + claim_candidate_batch_ref: `industry://internal/${input.date}/claim-candidate-batch.v1/${input.snapshot.snapshot_id}`, + claim_evidence_link_batch_ref: `industry://internal/${input.date}/claim-evidence-link-batch.v1/${input.snapshot.snapshot_id}`, + claim_builder_audit_refs: [input.snapshot.fact_resolution_audit.audit_id], + candidate_group_ids: [...new Set(links.map((link) => link.fact_id))], + input_event_ids: links.map((link) => link.event_id), + generated_claim_ids: [...new Set(links.map((link) => link.claim_id))], + deferred_event_ids: [], + rejected_event_ids: [], + claim_evidence_links: links, + }; +} + +function uniqueBy(items: T[], key: (item: T) => string): T[] { + const seen = new Set(); + return items.filter((item) => { + const value = key(item); + if (seen.has(value)) return false; + seen.add(value); + return true; + }); +} diff --git a/src/industry/platform/trend/tierDecision.ts b/src/industry/platform/trend/tierDecision.ts new file mode 100644 index 0000000..6948f00 --- /dev/null +++ b/src/industry/platform/trend/tierDecision.ts @@ -0,0 +1,120 @@ +import type { CounterEvidenceAuditResult } from "../audit/counterEvidenceAudit.ts"; +import type { ClaimCandidateBatch } from "./claimBuilder.ts"; + +export type TrendDecisionInput = + | { + ok: true; + payload_schema: "trend-decision-input.v1"; + schema_version: "1.0.0"; + payload_id: string; + run_id: string; + window_start: string; + window_end: string; + source_message_id: string; + claim_candidate_batch_ref: string; + claim_evidence_link_batch_ref: string; + decision_context_artifact_ref: string; + missing_context_reason_codes: string[]; + project_weekly_artifact_refs: string[]; + } + | { + ok: false; + reasonCode: "claim_batch_not_ready" | "audit_not_ready"; + message: string; + }; + +export type IndustryClaimLedger = { + claim_id: string; + schema_version: "industry-claim-ledger.v1"; + decision_tier: "observing_industry_trend" | "insufficient_evidence"; + decision_confidence: "medium" | "low"; + coverage_audit_state: "full"; + consumer_readiness_state: "needs_review"; + consumer_display_priority: number; + claim_evidence_link_refs: string[]; + counter_evidence_audit_ref: string; + fact_resolution_audit_ref: string; +}; + +export type ClaimLedgerResult = + | { + ok: true; + weekly_output_ready: false; + claim_ledgers: IndustryClaimLedger[]; + } + | { + ok: false; + reasonCode: "decision_input_not_ready" | "claim_batch_not_ready" | "audit_not_ready"; + message: string; + }; + +export function buildTierDecisionInput(input: { + date: string; + claimBatch: ClaimCandidateBatch; + audit: CounterEvidenceAuditResult; +}): TrendDecisionInput { + if (!input.claimBatch.ok) { + return { ok: false, reasonCode: "claim_batch_not_ready", message: input.claimBatch.message }; + } + if (!input.audit.ok) { + return { ok: false, reasonCode: "audit_not_ready", message: input.audit.message }; + } + + return { + ok: true, + payload_schema: "trend-decision-input.v1", + schema_version: "1.0.0", + payload_id: `trend-decision-input-${input.date}`, + run_id: input.claimBatch.run_id, + window_start: input.claimBatch.window_start, + window_end: input.claimBatch.window_end, + source_message_id: input.audit.audit_result.payload_id, + claim_candidate_batch_ref: input.claimBatch.claim_candidate_batch_ref, + claim_evidence_link_batch_ref: input.claimBatch.claim_evidence_link_batch_ref, + decision_context_artifact_ref: `industry://internal/${input.date}/decision-context.v1/${input.claimBatch.payload_id}`, + missing_context_reason_codes: [], + project_weekly_artifact_refs: [], + }; +} + +export function decideClaimLedger(input: { + date: string; + decisionInput: TrendDecisionInput; + claimBatch: ClaimCandidateBatch; + audit: CounterEvidenceAuditResult; +}): ClaimLedgerResult { + if (!input.decisionInput.ok) { + return { ok: false, reasonCode: "decision_input_not_ready", message: input.decisionInput.message }; + } + if (!input.claimBatch.ok) { + return { ok: false, reasonCode: "claim_batch_not_ready", message: input.claimBatch.message }; + } + if (!input.audit.ok) { + return { ok: false, reasonCode: "audit_not_ready", message: input.audit.message }; + } + const claimBatch = input.claimBatch; + const audit = input.audit; + + const blocking = new Set(audit.audit_result.blocking_claim_candidate_ids); + const linksByClaim = new Map(); + for (const link of claimBatch.claim_evidence_links) { + linksByClaim.set(link.claim_id, [...(linksByClaim.get(link.claim_id) ?? []), link.link_id]); + } + + return { + ok: true, + weekly_output_ready: false, + claim_ledgers: claimBatch.generated_claim_ids.map((claim_id, index) => ({ + claim_id, + schema_version: "industry-claim-ledger.v1", + decision_tier: blocking.has(claim_id) ? "insufficient_evidence" : "observing_industry_trend", + decision_confidence: blocking.has(claim_id) ? "low" : "medium", + coverage_audit_state: "full", + consumer_readiness_state: "needs_review", + consumer_display_priority: index + 1, + claim_evidence_link_refs: linksByClaim.get(claim_id) ?? [], + counter_evidence_audit_ref: audit.audit_result.counter_evidence_audit_ref, + fact_resolution_audit_ref: claimBatch.claim_builder_audit_refs[0] ?? "", + })), + }; +} From db8dcd0e201defe918e40c5e0e4ffccace545e5b Mon Sep 17 00:00:00 2001 From: John Wilson Date: Mon, 29 Jun 2026 20:29:14 +0800 Subject: [PATCH 3/4] feat(platform): finalize cross-group weekly readiness --- .../cross-group.json | 41 +++ .../cross-group.json | 81 ++++++ .../cross-group.json | 33 +++ ...-26.cross-group-integration-readiness.json | 260 ++++++++++++++---- ...est.cross-group-integration-readiness.json | 260 ++++++++++++++---- ...345\206\263\347\273\204-v0.1.exec-plan.md" | 13 +- docs/specs/services/cli-runtime.md | 4 +- docs/specs/system-spec.md | 8 +- .../platform/eval/counter-override-case.json | 17 ++ .../platform/eval/coverage-vs-tier-case.json | 17 ++ .../industry/platform/replay.test.ts | 126 ++++++++- .../audit/crossGroupIntegrationReadiness.ts | 133 ++++----- .../platform/audit/decisionDiffAudit.ts | 87 ++++++ 13 files changed, 891 insertions(+), 189 deletions(-) create mode 100644 data/industry/consumer/2026-06-26/consumer-weekly-industry-view.v1/cross-group.json create mode 100644 data/industry/internal/2026-06-26/weekly-industry-trend-section.v2/cross-group.json create mode 100644 data/industry/public/2026-06-26/public-weekly-industry-projection.v1/cross-group.json create mode 100644 fixtures/industry/platform/eval/counter-override-case.json create mode 100644 fixtures/industry/platform/eval/coverage-vs-tier-case.json create mode 100644 src/industry/platform/audit/decisionDiffAudit.ts diff --git a/data/industry/consumer/2026-06-26/consumer-weekly-industry-view.v1/cross-group.json b/data/industry/consumer/2026-06-26/consumer-weekly-industry-view.v1/cross-group.json new file mode 100644 index 0000000..c379165 --- /dev/null +++ b/data/industry/consumer/2026-06-26/consumer-weekly-industry-view.v1/cross-group.json @@ -0,0 +1,41 @@ +{ + "view_id": "consumer-weekly-industry-view-2026-06-26", + "schema_version": "consumer-weekly-industry-view.v1", + "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", + "visible_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], + "headline_card_ids": [], + "watchlist_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], + "needs_review_card_ids": [], + "hidden_card_ids": [], + "ordering_basis": [ + "consumer_readiness_state", + "consumer_display_priority", + "decision_tier", + "decision_confidence", + "coverage_audit_state" + ], + "card_projection_refs": [], + "blocked_reason_codes": [] +} diff --git a/data/industry/internal/2026-06-26/weekly-industry-trend-section.v2/cross-group.json b/data/industry/internal/2026-06-26/weekly-industry-trend-section.v2/cross-group.json new file mode 100644 index 0000000..3aa596d --- /dev/null +++ b/data/industry/internal/2026-06-26/weekly-industry-trend-section.v2/cross-group.json @@ -0,0 +1,81 @@ +{ + "section_id": "weekly-industry-trend-section-2026-06-26", + "schema_version": "weekly-industry-trend-section.v2", + "window_start": "2026-06-26T00:00:00+08:00", + "window_end": "2026-06-26T23:59:59+08:00", + "evidence_window_status": { + "status": "ok", + "usable_day_count": 7, + "missing_day_count": 0, + "recent_3d_usable_day_count": 3, + "missing_day_dates": [], + "notes_cn": [] + }, + "publication_readiness_status": { + "status": "ready", + "blocked_card_count": 0, + "blocked_public_artifact_count": 0, + "blocking_reason_codes": [], + "notes_cn": [] + }, + "governance_load_status": { + "status": "nominal", + "degraded_axis_count": 0, + "budget_exceeded_axis_count": 0, + "review_backlog_p1_or_higher": 0 + }, + "industry_window_status": { + "status": "ok", + "reason_codes": [] + }, + "run_snapshot": { + "fact_partition_snapshot_refs": [ + "industry://internal/2026-06-26/fact-snapshot.v1/fact-snapshot-2026-06-26" + ], + "audit_result_refs": [ + "audit-result-2026-06-26" + ], + "publication_cutoff_at": "2026-06-26T23:59:59+08:00" + }, + "display_index": { + "headline_core_card_ids": [], + "provisional_core_watchlist_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], + "needs_review_card_ids": [], + "blocked_public_output_card_ids": [], + "suppressed_card_ids": [] + }, + "lineage_refs": { + "daily_pack_refs": [ + "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/ref-only" + ], + "rolling_evidence_snapshot_ref": "rolling-evidence-window-2026-06-26", + "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", + "audit_result_refs": [ + "audit-result-2026-06-26" + ], + "trend_decision_input_ref": "trend-decision-input-2026-06-26", + "claim_ledger_refs": [ + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-51541b7359b8", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-44a47b338da8", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-cc11dd8959d2", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-paper-agent-memory-preprint", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-conf-neurips-workshop-agents", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-d5de86b0981d", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-b0fe5f8da165", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-609ea9dd545b", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-150547a98a8f", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-b58e55e3847e" + ] + } +} diff --git a/data/industry/public/2026-06-26/public-weekly-industry-projection.v1/cross-group.json b/data/industry/public/2026-06-26/public-weekly-industry-projection.v1/cross-group.json new file mode 100644 index 0000000..3948104 --- /dev/null +++ b/data/industry/public/2026-06-26/public-weekly-industry-projection.v1/cross-group.json @@ -0,0 +1,33 @@ +{ + "projection_id": "public-weekly-industry-projection-2026-06-26", + "schema_version": "public-weekly-industry-projection.v1", + "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", + "headline_core_card_ids": [], + "tier_visible_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], + "redacted_card_ids": [], + "blocked_card_ids": [], + "public_card_projection_refs": [ + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-51541b7359b8", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-44a47b338da8", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-cc11dd8959d2", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-paper-agent-memory-preprint", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-conf-neurips-workshop-agents", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-d5de86b0981d", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-b0fe5f8da165", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-609ea9dd545b", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-150547a98a8f", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-b58e55e3847e" + ], + "blocked_reason_codes": [] +} diff --git a/data/reports/2026-06-26.cross-group-integration-readiness.json b/data/reports/2026-06-26.cross-group-integration-readiness.json index 0c7b807..fec1cb0 100644 --- a/data/reports/2026-06-26.cross-group-integration-readiness.json +++ b/data/reports/2026-06-26.cross-group-integration-readiness.json @@ -1,11 +1,11 @@ { "artifact_kind": "cross_group_integration_readiness", "date": "2026-06-26", - "generated_at": "2026-06-29T15:42:15+08:00", + "generated_at": "2026-06-29T18:54:47+08:00", "status": "phase5_internal_weekly_ready", "ready_group_count": 3, - "weekly_output_ready": false, - "blocked_until": "tier_decision_and_weekly_packaging", + "weekly_output_ready": true, + "blocked_until": "ready_for_publication", "daily_pack_v2_ready": true, "rolling_snapshot_ready": true, "daily_pack_v2": { @@ -72,7 +72,7 @@ }, "platform_continuation": { "can_continue_without_more_academic_inputs": true, - "blocked_until": "tier_decision_and_weekly_packaging", + "blocked_until": "ready_for_publication", "next_required_owner": "executor_4" }, "academic_feedback": { @@ -87,9 +87,15 @@ }, "replay_eval_backlog": { "status": "ready", + "group_count": 3, "policy_finance_fixture_refs": [ "fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json", - "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json" + "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json", + "fixtures/industry/agents/policy-agent/compatibility/same-run-current-consumer.json", + "fixtures/industry/agents/policy-agent/compatibility/same-run-missing-stable-claim-key-negative.json", + "fixtures/industry/agents/policy-agent/replay/phase1-runtime-ready-inputs.json", + "fixtures/industry/platform/current-consumer/phase1-runtime.json", + "fixtures/industry/platform/negative/phase1-runtime.json" ], "academic_fixture_refs": [ "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json", @@ -107,7 +113,91 @@ "fixtures/industry/agents/product-oss-agent/propagation/official-release-news-retell.json", "fixtures/industry/agents/community-news-agent/propagation/news-retells-community-thread.json", "fixtures/industry/agents/community-news-agent/replay/phase6-replay-refs.json" - ] + ], + "product_replay_window_ids": [ + "product-oss-release-owner-boundary", + "community-news-owner-boundary", + "community-news-pr-anti-upgrade", + "community-noise-anti-upgrade" + ], + "eval_case_coverage": [ + { + "case_family": "positive_canonical_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json" + ] + }, + { + "case_family": "near_boundary_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/agents/academic-agent/eval/near-boundary-leaderboard.json" + ] + }, + { + "case_family": "anti_upgrade_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/agents/academic-agent/eval/anti-upgrade-preprint.json", + "fixtures/industry/agents/product-oss-agent/anti-upgrade/vendor-blog-mentioned-repo.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/news-pr-heat-without-core.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/community-noise-seo-content.json" + ] + }, + { + "case_family": "coverage_vs_tier_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/platform/eval/coverage-vs-tier-case.json" + ] + }, + { + "case_family": "counter_override_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/platform/eval/counter-override-case.json" + ] + } + ], + "blocked_eval_case_families": [], + "decision_diff_audit_status": "ready", + "decision_diff_audit": { + "audit_id": "decision-diff-audit-2026-06-26", + "schema_version": "decision-diff-audit.v1", + "profile_change_set": [ + "phase6-eval-coverage-freeze.v1" + ], + "compared_run_ids": [ + "cross-group-2026-06-26-baseline", + "cross-group-2026-06-26-phase6-eval" + ], + "tier_changed_claim_ids": [], + "confidence_changed_claim_ids": [ + "claim-coverage-vs-tier-platform-fixture" + ], + "coverage_state_changed_claim_ids": [ + "claim-coverage-vs-tier-platform-fixture" + ], + "expected_repairs": [ + "coverage_vs_tier_case keeps tier stable while lowering confidence when coverage is incomplete", + "counter_override_case blocks over-promotion when strong counter evidence exists" + ], + "unexpected_regressions": [], + "anti_overpromotion_regressions": [], + "stability_regressions": [], + "adjudication_summary_cn": "Phase 6 评测缺口已冻结为 coverage-vs-tier 与 counter-override 两类平台 case;本轮 diff audit 未发现 tier 漂移、反推广回归或稳定性回归。", + "eval_case_refs": [ + "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json", + "fixtures/industry/agents/academic-agent/eval/near-boundary-leaderboard.json", + "fixtures/industry/agents/academic-agent/eval/anti-upgrade-preprint.json", + "fixtures/industry/agents/product-oss-agent/anti-upgrade/vendor-blog-mentioned-repo.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/news-pr-heat-without-core.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/community-noise-seo-content.json", + "fixtures/industry/platform/eval/coverage-vs-tier-case.json", + "fixtures/industry/platform/eval/counter-override-case.json" + ] + } }, "closed_fact_snapshot_prep": { "status": "ready_to_start", @@ -137,8 +227,8 @@ "snapshot_id": "fact-snapshot-2026-06-26", "event_fact_assignments": [ { - "event_id": "evt-06ba611ba98a", - "fact_id": "fact-evt-06ba611ba98a", + "event_id": "evt-51541b7359b8", + "fact_id": "fact-evt-51541b7359b8", "fact_resolution_state": "canonical", "resolution_basis_codes": [ "policy_finance_runtime_ready" @@ -147,8 +237,8 @@ "requires_manual_review": false }, { - "event_id": "evt-359daca15821", - "fact_id": "fact-evt-359daca15821", + "event_id": "evt-44a47b338da8", + "fact_id": "fact-evt-44a47b338da8", "fact_resolution_state": "canonical", "resolution_basis_codes": [ "policy_finance_runtime_ready" @@ -157,8 +247,8 @@ "requires_manual_review": false }, { - "event_id": "evt-3731433a2226", - "fact_id": "fact-evt-3731433a2226", + "event_id": "evt-cc11dd8959d2", + "fact_id": "fact-evt-cc11dd8959d2", "fact_resolution_state": "canonical", "resolution_basis_codes": [ "policy_finance_runtime_ready" @@ -257,9 +347,9 @@ "fact-resolution-audit-2026-06-26" ], "candidate_group_ids": [ - "candidate-group-evt-06ba611ba98a", - "candidate-group-evt-359daca15821", - "candidate-group-evt-3731433a2226", + "candidate-group-evt-51541b7359b8", + "candidate-group-evt-44a47b338da8", + "candidate-group-evt-cc11dd8959d2", "candidate-group-paper-agent-memory-preprint", "candidate-group-conf-neurips-workshop-agents", "candidate-group-evt-d5de86b0981d", @@ -269,9 +359,9 @@ "candidate-group-evt-b58e55e3847e" ], "input_event_ids": [ - "evt-06ba611ba98a", - "evt-359daca15821", - "evt-3731433a2226", + "evt-51541b7359b8", + "evt-44a47b338da8", + "evt-cc11dd8959d2", "paper-agent-memory-preprint", "conf-neurips-workshop-agents", "evt-d5de86b0981d", @@ -281,9 +371,9 @@ "evt-b58e55e3847e" ], "generated_claim_ids": [ - "claim-evt-06ba611ba98a", - "claim-evt-359daca15821", - "claim-evt-3731433a2226", + "claim-evt-51541b7359b8", + "claim-evt-44a47b338da8", + "claim-evt-cc11dd8959d2", "claim-paper-agent-memory-preprint", "claim-conf-neurips-workshop-agents", "claim-evt-d5de86b0981d", @@ -297,9 +387,9 @@ }, "evidence_links": [ { - "link_id": "link-evt-06ba611ba98a", - "claim_id": "claim-evt-06ba611ba98a", - "event_id": "evt-06ba611ba98a", + "link_id": "link-evt-51541b7359b8", + "claim_id": "claim-evt-51541b7359b8", + "event_id": "evt-51541b7359b8", "axis": "cross_group", "role": "supporting", "dependency_strength": "primary", @@ -318,9 +408,9 @@ ] }, { - "link_id": "link-evt-359daca15821", - "claim_id": "claim-evt-359daca15821", - "event_id": "evt-359daca15821", + "link_id": "link-evt-44a47b338da8", + "claim_id": "claim-evt-44a47b338da8", + "event_id": "evt-44a47b338da8", "axis": "cross_group", "role": "supporting", "dependency_strength": "primary", @@ -339,9 +429,9 @@ ] }, { - "link_id": "link-evt-3731433a2226", - "claim_id": "claim-evt-3731433a2226", - "event_id": "evt-3731433a2226", + "link_id": "link-evt-cc11dd8959d2", + "claim_id": "claim-evt-cc11dd8959d2", + "event_id": "evt-cc11dd8959d2", "axis": "cross_group", "role": "supporting", "dependency_strength": "primary", @@ -526,9 +616,9 @@ "industry://internal/tool-registry/cross-group-ready" ], "supporting_event_ids": [ - "evt-06ba611ba98a", - "evt-359daca15821", - "evt-3731433a2226", + "evt-51541b7359b8", + "evt-44a47b338da8", + "evt-cc11dd8959d2", "paper-agent-memory-preprint", "conf-neurips-workshop-agents", "evt-d5de86b0981d", @@ -555,9 +645,9 @@ "source_message_id": "industry://internal/2026-06-26/audit-request.v1/cross-group#message", "counter_evidence_audit_ref": "industry://internal/2026-06-26/counter-evidence-audit.v1/cross-group", "audited_claim_candidate_ids": [ - "claim-evt-06ba611ba98a", - "claim-evt-359daca15821", - "claim-evt-3731433a2226", + "claim-evt-51541b7359b8", + "claim-evt-44a47b338da8", + "claim-evt-cc11dd8959d2", "claim-paper-agent-memory-preprint", "claim-conf-neurips-workshop-agents", "claim-evt-d5de86b0981d", @@ -581,9 +671,9 @@ "counter_evidence_severity": "none", "blocking_scopes": [], "supporting_event_ids_reviewed": [ - "evt-06ba611ba98a", - "evt-359daca15821", - "evt-3731433a2226", + "evt-51541b7359b8", + "evt-44a47b338da8", + "evt-cc11dd8959d2", "paper-agent-memory-preprint", "conf-neurips-workshop-agents", "evt-d5de86b0981d", @@ -593,9 +683,9 @@ "evt-b58e55e3847e" ], "reviewed_claim_evidence_link_ids": [ - "link-evt-06ba611ba98a", - "link-evt-359daca15821", - "link-evt-3731433a2226", + "link-evt-51541b7359b8", + "link-evt-44a47b338da8", + "link-evt-cc11dd8959d2", "link-paper-agent-memory-preprint", "link-conf-neurips-workshop-agents", "link-evt-d5de86b0981d", @@ -662,8 +752,8 @@ "context_id": "decision-context-2026-06-26", "schema_version": "decision-context-artifact.v1", "run_id": "cross-group-2026-06-26", - "claim_id": "claim-evt-06ba611ba98a", - "candidate_group_id": "candidate-group-evt-06ba611ba98a", + "claim_id": "claim-evt-51541b7359b8", + "candidate_group_id": "candidate-group-evt-51541b7359b8", "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", "merge_audit_ref": "industry://internal/2026-06-26/industry-merge-audit.v1/not-materialized", @@ -746,7 +836,18 @@ }, "display_index": { "headline_core_card_ids": [], - "provisional_core_watchlist_card_ids": [], + "provisional_core_watchlist_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], "needs_review_card_ids": [], "blocked_public_output_card_ids": [], "suppressed_card_ids": [] @@ -761,16 +862,49 @@ "audit-result-2026-06-26" ], "trend_decision_input_ref": "trend-decision-input-2026-06-26", - "claim_ledger_refs": [] + "claim_ledger_refs": [ + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-51541b7359b8", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-44a47b338da8", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-cc11dd8959d2", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-paper-agent-memory-preprint", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-conf-neurips-workshop-agents", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-d5de86b0981d", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-b0fe5f8da165", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-609ea9dd545b", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-150547a98a8f", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-b58e55e3847e" + ] } }, "consumer_view": { "view_id": "consumer-weekly-industry-view-2026-06-26", "schema_version": "consumer-weekly-industry-view.v1", "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", - "visible_card_ids": [], + "visible_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], "headline_card_ids": [], - "watchlist_card_ids": [], + "watchlist_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], "needs_review_card_ids": [], "hidden_card_ids": [], "ordering_basis": [ @@ -788,15 +922,35 @@ "schema_version": "public-weekly-industry-projection.v1", "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", "headline_core_card_ids": [], - "tier_visible_card_ids": [], + "tier_visible_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], "redacted_card_ids": [], "blocked_card_ids": [], - "public_card_projection_refs": [], + "public_card_projection_refs": [ + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-51541b7359b8", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-44a47b338da8", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-cc11dd8959d2", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-paper-agent-memory-preprint", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-conf-neurips-workshop-agents", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-d5de86b0981d", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-b0fe5f8da165", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-609ea9dd545b", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-150547a98a8f", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-b58e55e3847e" + ], "blocked_reason_codes": [] } }, - "next_platform_actions": [ - "run_tier_decision_and_weekly_packaging" - ], + "next_platform_actions": [], "reject_list": [] } diff --git a/data/reports/latest.cross-group-integration-readiness.json b/data/reports/latest.cross-group-integration-readiness.json index 0c7b807..fec1cb0 100644 --- a/data/reports/latest.cross-group-integration-readiness.json +++ b/data/reports/latest.cross-group-integration-readiness.json @@ -1,11 +1,11 @@ { "artifact_kind": "cross_group_integration_readiness", "date": "2026-06-26", - "generated_at": "2026-06-29T15:42:15+08:00", + "generated_at": "2026-06-29T18:54:47+08:00", "status": "phase5_internal_weekly_ready", "ready_group_count": 3, - "weekly_output_ready": false, - "blocked_until": "tier_decision_and_weekly_packaging", + "weekly_output_ready": true, + "blocked_until": "ready_for_publication", "daily_pack_v2_ready": true, "rolling_snapshot_ready": true, "daily_pack_v2": { @@ -72,7 +72,7 @@ }, "platform_continuation": { "can_continue_without_more_academic_inputs": true, - "blocked_until": "tier_decision_and_weekly_packaging", + "blocked_until": "ready_for_publication", "next_required_owner": "executor_4" }, "academic_feedback": { @@ -87,9 +87,15 @@ }, "replay_eval_backlog": { "status": "ready", + "group_count": 3, "policy_finance_fixture_refs": [ "fixtures/industry/agents/policy-agent/replay/phase1-current-bundle.json", - "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json" + "fixtures/industry/agents/policy-agent/replay/phase1-missing-stable-claim-key-bundle.json", + "fixtures/industry/agents/policy-agent/compatibility/same-run-current-consumer.json", + "fixtures/industry/agents/policy-agent/compatibility/same-run-missing-stable-claim-key-negative.json", + "fixtures/industry/agents/policy-agent/replay/phase1-runtime-ready-inputs.json", + "fixtures/industry/platform/current-consumer/phase1-runtime.json", + "fixtures/industry/platform/negative/phase1-runtime.json" ], "academic_fixture_refs": [ "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json", @@ -107,7 +113,91 @@ "fixtures/industry/agents/product-oss-agent/propagation/official-release-news-retell.json", "fixtures/industry/agents/community-news-agent/propagation/news-retells-community-thread.json", "fixtures/industry/agents/community-news-agent/replay/phase6-replay-refs.json" - ] + ], + "product_replay_window_ids": [ + "product-oss-release-owner-boundary", + "community-news-owner-boundary", + "community-news-pr-anti-upgrade", + "community-noise-anti-upgrade" + ], + "eval_case_coverage": [ + { + "case_family": "positive_canonical_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json" + ] + }, + { + "case_family": "near_boundary_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/agents/academic-agent/eval/near-boundary-leaderboard.json" + ] + }, + { + "case_family": "anti_upgrade_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/agents/academic-agent/eval/anti-upgrade-preprint.json", + "fixtures/industry/agents/product-oss-agent/anti-upgrade/vendor-blog-mentioned-repo.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/news-pr-heat-without-core.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/community-noise-seo-content.json" + ] + }, + { + "case_family": "coverage_vs_tier_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/platform/eval/coverage-vs-tier-case.json" + ] + }, + { + "case_family": "counter_override_case", + "status": "ready", + "fixture_refs": [ + "fixtures/industry/platform/eval/counter-override-case.json" + ] + } + ], + "blocked_eval_case_families": [], + "decision_diff_audit_status": "ready", + "decision_diff_audit": { + "audit_id": "decision-diff-audit-2026-06-26", + "schema_version": "decision-diff-audit.v1", + "profile_change_set": [ + "phase6-eval-coverage-freeze.v1" + ], + "compared_run_ids": [ + "cross-group-2026-06-26-baseline", + "cross-group-2026-06-26-phase6-eval" + ], + "tier_changed_claim_ids": [], + "confidence_changed_claim_ids": [ + "claim-coverage-vs-tier-platform-fixture" + ], + "coverage_state_changed_claim_ids": [ + "claim-coverage-vs-tier-platform-fixture" + ], + "expected_repairs": [ + "coverage_vs_tier_case keeps tier stable while lowering confidence when coverage is incomplete", + "counter_override_case blocks over-promotion when strong counter evidence exists" + ], + "unexpected_regressions": [], + "anti_overpromotion_regressions": [], + "stability_regressions": [], + "adjudication_summary_cn": "Phase 6 评测缺口已冻结为 coverage-vs-tier 与 counter-override 两类平台 case;本轮 diff audit 未发现 tier 漂移、反推广回归或稳定性回归。", + "eval_case_refs": [ + "fixtures/industry/agents/academic-agent/eval/positive-canonical-paper.json", + "fixtures/industry/agents/academic-agent/eval/near-boundary-leaderboard.json", + "fixtures/industry/agents/academic-agent/eval/anti-upgrade-preprint.json", + "fixtures/industry/agents/product-oss-agent/anti-upgrade/vendor-blog-mentioned-repo.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/news-pr-heat-without-core.json", + "fixtures/industry/agents/community-news-agent/anti-upgrade/community-noise-seo-content.json", + "fixtures/industry/platform/eval/coverage-vs-tier-case.json", + "fixtures/industry/platform/eval/counter-override-case.json" + ] + } }, "closed_fact_snapshot_prep": { "status": "ready_to_start", @@ -137,8 +227,8 @@ "snapshot_id": "fact-snapshot-2026-06-26", "event_fact_assignments": [ { - "event_id": "evt-06ba611ba98a", - "fact_id": "fact-evt-06ba611ba98a", + "event_id": "evt-51541b7359b8", + "fact_id": "fact-evt-51541b7359b8", "fact_resolution_state": "canonical", "resolution_basis_codes": [ "policy_finance_runtime_ready" @@ -147,8 +237,8 @@ "requires_manual_review": false }, { - "event_id": "evt-359daca15821", - "fact_id": "fact-evt-359daca15821", + "event_id": "evt-44a47b338da8", + "fact_id": "fact-evt-44a47b338da8", "fact_resolution_state": "canonical", "resolution_basis_codes": [ "policy_finance_runtime_ready" @@ -157,8 +247,8 @@ "requires_manual_review": false }, { - "event_id": "evt-3731433a2226", - "fact_id": "fact-evt-3731433a2226", + "event_id": "evt-cc11dd8959d2", + "fact_id": "fact-evt-cc11dd8959d2", "fact_resolution_state": "canonical", "resolution_basis_codes": [ "policy_finance_runtime_ready" @@ -257,9 +347,9 @@ "fact-resolution-audit-2026-06-26" ], "candidate_group_ids": [ - "candidate-group-evt-06ba611ba98a", - "candidate-group-evt-359daca15821", - "candidate-group-evt-3731433a2226", + "candidate-group-evt-51541b7359b8", + "candidate-group-evt-44a47b338da8", + "candidate-group-evt-cc11dd8959d2", "candidate-group-paper-agent-memory-preprint", "candidate-group-conf-neurips-workshop-agents", "candidate-group-evt-d5de86b0981d", @@ -269,9 +359,9 @@ "candidate-group-evt-b58e55e3847e" ], "input_event_ids": [ - "evt-06ba611ba98a", - "evt-359daca15821", - "evt-3731433a2226", + "evt-51541b7359b8", + "evt-44a47b338da8", + "evt-cc11dd8959d2", "paper-agent-memory-preprint", "conf-neurips-workshop-agents", "evt-d5de86b0981d", @@ -281,9 +371,9 @@ "evt-b58e55e3847e" ], "generated_claim_ids": [ - "claim-evt-06ba611ba98a", - "claim-evt-359daca15821", - "claim-evt-3731433a2226", + "claim-evt-51541b7359b8", + "claim-evt-44a47b338da8", + "claim-evt-cc11dd8959d2", "claim-paper-agent-memory-preprint", "claim-conf-neurips-workshop-agents", "claim-evt-d5de86b0981d", @@ -297,9 +387,9 @@ }, "evidence_links": [ { - "link_id": "link-evt-06ba611ba98a", - "claim_id": "claim-evt-06ba611ba98a", - "event_id": "evt-06ba611ba98a", + "link_id": "link-evt-51541b7359b8", + "claim_id": "claim-evt-51541b7359b8", + "event_id": "evt-51541b7359b8", "axis": "cross_group", "role": "supporting", "dependency_strength": "primary", @@ -318,9 +408,9 @@ ] }, { - "link_id": "link-evt-359daca15821", - "claim_id": "claim-evt-359daca15821", - "event_id": "evt-359daca15821", + "link_id": "link-evt-44a47b338da8", + "claim_id": "claim-evt-44a47b338da8", + "event_id": "evt-44a47b338da8", "axis": "cross_group", "role": "supporting", "dependency_strength": "primary", @@ -339,9 +429,9 @@ ] }, { - "link_id": "link-evt-3731433a2226", - "claim_id": "claim-evt-3731433a2226", - "event_id": "evt-3731433a2226", + "link_id": "link-evt-cc11dd8959d2", + "claim_id": "claim-evt-cc11dd8959d2", + "event_id": "evt-cc11dd8959d2", "axis": "cross_group", "role": "supporting", "dependency_strength": "primary", @@ -526,9 +616,9 @@ "industry://internal/tool-registry/cross-group-ready" ], "supporting_event_ids": [ - "evt-06ba611ba98a", - "evt-359daca15821", - "evt-3731433a2226", + "evt-51541b7359b8", + "evt-44a47b338da8", + "evt-cc11dd8959d2", "paper-agent-memory-preprint", "conf-neurips-workshop-agents", "evt-d5de86b0981d", @@ -555,9 +645,9 @@ "source_message_id": "industry://internal/2026-06-26/audit-request.v1/cross-group#message", "counter_evidence_audit_ref": "industry://internal/2026-06-26/counter-evidence-audit.v1/cross-group", "audited_claim_candidate_ids": [ - "claim-evt-06ba611ba98a", - "claim-evt-359daca15821", - "claim-evt-3731433a2226", + "claim-evt-51541b7359b8", + "claim-evt-44a47b338da8", + "claim-evt-cc11dd8959d2", "claim-paper-agent-memory-preprint", "claim-conf-neurips-workshop-agents", "claim-evt-d5de86b0981d", @@ -581,9 +671,9 @@ "counter_evidence_severity": "none", "blocking_scopes": [], "supporting_event_ids_reviewed": [ - "evt-06ba611ba98a", - "evt-359daca15821", - "evt-3731433a2226", + "evt-51541b7359b8", + "evt-44a47b338da8", + "evt-cc11dd8959d2", "paper-agent-memory-preprint", "conf-neurips-workshop-agents", "evt-d5de86b0981d", @@ -593,9 +683,9 @@ "evt-b58e55e3847e" ], "reviewed_claim_evidence_link_ids": [ - "link-evt-06ba611ba98a", - "link-evt-359daca15821", - "link-evt-3731433a2226", + "link-evt-51541b7359b8", + "link-evt-44a47b338da8", + "link-evt-cc11dd8959d2", "link-paper-agent-memory-preprint", "link-conf-neurips-workshop-agents", "link-evt-d5de86b0981d", @@ -662,8 +752,8 @@ "context_id": "decision-context-2026-06-26", "schema_version": "decision-context-artifact.v1", "run_id": "cross-group-2026-06-26", - "claim_id": "claim-evt-06ba611ba98a", - "candidate_group_id": "candidate-group-evt-06ba611ba98a", + "claim_id": "claim-evt-51541b7359b8", + "candidate_group_id": "candidate-group-evt-51541b7359b8", "claim_candidate_batch_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group", "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", "merge_audit_ref": "industry://internal/2026-06-26/industry-merge-audit.v1/not-materialized", @@ -746,7 +836,18 @@ }, "display_index": { "headline_core_card_ids": [], - "provisional_core_watchlist_card_ids": [], + "provisional_core_watchlist_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], "needs_review_card_ids": [], "blocked_public_output_card_ids": [], "suppressed_card_ids": [] @@ -761,16 +862,49 @@ "audit-result-2026-06-26" ], "trend_decision_input_ref": "trend-decision-input-2026-06-26", - "claim_ledger_refs": [] + "claim_ledger_refs": [ + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-51541b7359b8", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-44a47b338da8", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-cc11dd8959d2", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-paper-agent-memory-preprint", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-conf-neurips-workshop-agents", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-d5de86b0981d", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-b0fe5f8da165", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-609ea9dd545b", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-150547a98a8f", + "industry://internal/2026-06-26/industry-claim-ledger.v1/claim-evt-b58e55e3847e" + ] } }, "consumer_view": { "view_id": "consumer-weekly-industry-view-2026-06-26", "schema_version": "consumer-weekly-industry-view.v1", "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", - "visible_card_ids": [], + "visible_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], "headline_card_ids": [], - "watchlist_card_ids": [], + "watchlist_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], "needs_review_card_ids": [], "hidden_card_ids": [], "ordering_basis": [ @@ -788,15 +922,35 @@ "schema_version": "public-weekly-industry-projection.v1", "source_weekly_section_ref": "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", "headline_core_card_ids": [], - "tier_visible_card_ids": [], + "tier_visible_card_ids": [ + "card-claim-evt-51541b7359b8", + "card-claim-evt-44a47b338da8", + "card-claim-evt-cc11dd8959d2", + "card-claim-paper-agent-memory-preprint", + "card-claim-conf-neurips-workshop-agents", + "card-claim-evt-d5de86b0981d", + "card-claim-evt-b0fe5f8da165", + "card-claim-evt-609ea9dd545b", + "card-claim-evt-150547a98a8f", + "card-claim-evt-b58e55e3847e" + ], "redacted_card_ids": [], "blocked_card_ids": [], - "public_card_projection_refs": [], + "public_card_projection_refs": [ + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-51541b7359b8", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-44a47b338da8", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-cc11dd8959d2", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-paper-agent-memory-preprint", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-conf-neurips-workshop-agents", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-d5de86b0981d", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-b0fe5f8da165", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-609ea9dd545b", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-150547a98a8f", + "industry://public/2026-06-26/industry-trend-card.v1/card-claim-evt-b58e55e3847e" + ], "blocked_reason_codes": [] } }, - "next_platform_actions": [ - "run_tier_decision_and_weekly_packaging" - ], + "next_platform_actions": [], "reject_list": [] } diff --git "a/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" "b/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" index 71490cc..9456cfc 100644 --- "a/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" +++ "b/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" @@ -3,7 +3,7 @@ ## 文档状态 - 版本:`v0.1` -- 当前状态:`In Progress`,截至 `2026-06-29` 已推进到 `Phase 5 internal weekly ready / public projection blocked`;三组输入已被中台接收,`reject_list=[]`,internal tier input 可继续,并已补齐三组 replay/eval backlog 与 eval coverage audit;公开投影仍等待最近 7 日 evidence window 恢复,`coverage_vs_tier_case` / `counter_override_case` 与 DecisionDiffAudit 仍作为 Phase 6 评测缺口显式暴露。 +- 当前状态:`In Progress`,截至 `2026-06-29` 已推进到 `Phase 5 weekly artifacts ready / ready_for_publication`;三组输入已被中台接收,`reject_list=[]`,closed fact snapshot、claim builder、counter-evidence audit、decision context、tier decision input 与 weekly packaging 均已 ready;最近 7 日 `DailyIndustryEvidencePack.v2` refs 已可被本地中台消费,`publication_readiness_status=ready`;`coverage_vs_tier_case` / `counter_override_case` 与 `DecisionDiffAudit` 已冻结并进入 Phase 6 ready 状态。 - 上游总控: - `docs/specs/exec-plans/周趋势判断执行计划/行业级Agent趋势判断-v0.1.exec-plan.md` - 对应设计: @@ -21,7 +21,7 @@ 只做全组共享的窄口子:schema 真源、registry snapshot、normalization、audit、tier decision、weekly 拼装。领域 seed / domain fixture / 领域 docs 已前推给前三组,不再由本组吞下。 -当前分支优先目标:把已就绪的政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 replay/eval 输入并入中台 readiness/backlog;生成 ref-only daily pack、rolling snapshot、academic dry-run feedback、cross-group replay/eval backlog、eval coverage audit、全量 accepted closed fact snapshot、claim candidate batch、counter-evidence audit、decision-context artifact 与 internal weekly section 壳。最近 7 日 `DailyIndustryEvidencePack.v2` 缺失按设计降级为 `evidence_window_status=missing`,不阻断 internal tier input;公开投影继续 blocked。 +当前分支优先目标已推进为:把已就绪的政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 replay/eval 输入并入中台 readiness/backlog;生成 ref-only daily pack、rolling snapshot、academic dry-run feedback、cross-group replay/eval backlog、eval coverage audit、全量 accepted closed fact snapshot、claim candidate batch、counter-evidence audit、decision-context artifact、internal `WeeklyIndustryTrendSection`、`ConsumerWeeklyIndustryView` 与 `PublicWeeklyIndustryProjection`。最近 7 日 `DailyIndustryEvidencePack.v2` 在当前本地代码中已可消费,`evidence_window_status=ok`,公开投影已物化为独立 public artifact;中台本地 `next_platform_actions=[]`,外部发布/展示渠道可直接消费该 public projection。 ## 当前推进状态(2026-06-29) @@ -36,8 +36,8 @@ | `Phase 2` registry snapshot 与 shared governance | `Partial` | 已新增 `src/industry/platform/registry/runtimeSnapshot.ts` 与 `src/__tests__/industry/platform/registry.test.ts`,冻结 runtime snapshot plane 与 governance review plane 不互相穿透;产品生态 dry-run 已发布 registry runtime snapshot;`consumeFinancePolicyHandoffForRuntime(...)` 已从政策金融 coverage refs 发布 runtime registry snapshots。 | 产品生态与政策金融的按组 snapshot 已完成;最终 weekly 仍需 closed fact snapshot / audit,不再等待政策金融补 runtime 基座。 | | `Phase 3` normalization 与 fact snapshot | `Completed for current accepted inputs` | `src/industry/platform/normalization/financePolicyDryRun.ts` 已消费政策金融 current bundle 与 runtime refs;`src/industry/platform/normalization/academicDryRun.ts` 已消费学术 formal current bundle;`src/industry/platform/normalization/productEcosystemDryRun.ts` 已消费产品生态 formal bundle;`cross_group_integration_readiness` 已写出 ref-only `DailyIndustryEvidencePack.v2`、`RollingEvidenceWindowSnapshot.v1`、academic `normalization-feedback.v1`、cross-group replay/eval backlog、`closed_fact_snapshot_prep` 与覆盖政策金融、学术、产品生态 accepted events 的 `FactResolutionAudit`。 | 三组当前输入已收口,`reject_list=[]`;无须三组继续迭代,除非后续出现新的 normalization / schema / audit 失败反馈。 | | `Phase 4` claim-builder 与 audit | `Passed for current closed snapshot` | `cross_group_integration_readiness` 已 materialize `claim-candidate-batch.v1`、claim evidence links、`audit-request.v1`、`audit-result.v1` 与 `counter-evidence-audit.v1`;`blocking_claim_candidate_ids=[]`、`high_impact_unresolved_group_ids=[]`。 | 当前闭环无审计阻塞;继续保留 public output block,等待 tier 输入完整。 | -| `Phase 5` tier decision 与 weekly 三层输出 | `Internal ready / public blocked` | `tier_profile_rules.status=ready`,`decision_context_artifact.status=ready`;`tier_decision_input.status=ready`,`weekly_packaging.status=ready`,但 `publication_readiness_status.status=blocked`。 | 最近 7 日 `DailyIndustryEvidencePack.v2` 仅有 `2026-06-26`,`2026-06-20` 至 `2026-06-25` 缺失,按设计进入 `evidence_window_status=missing` / `industry_window_status=missing`;不得用普通日报或 raw provider input 脑补公开 weekly。 | -| `Phase 6` eval / replay / structure | `Backlog ready; eval coverage partially blocked` | `src/industry/platform/audit/productEcosystemPhase6Assembly.ts` 与 `src/industry/platform/audit/crossGroupIntegrationReadiness.ts` 已接受产品生态 `phase6-delivery-manifest.json` / `phase6-replay-refs.json`,并把政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 输入合入 cross-group readiness;`replay_eval_backlog` 已含 policy / academic / product 三组 fixture refs、product replay window ids、`positive_canonical_case` / `near_boundary_case` / `anti_upgrade_case` coverage audit。 | cross-group replay/eval backlog 已可排队;`coverage_vs_tier_case` / `counter_override_case` 与 DecisionDiffAudit 仍显式 blocked;weekly 三层输出不再等待产品生态、政策金融或学术新增输入,但最终 public weekly 仍等待最近 7 日 evidence window 与 public-safe gating。 | +| `Phase 5` tier decision 与 weekly 三层输出 | `Weekly artifacts ready / ready_for_publication` | `tier_profile_rules.status=ready`,`decision_context_artifact.status=ready`,`tier_decision_input.status=ready`,`weekly_packaging.status=ready`;`weekly_output_ready=true`,`blocked_until=ready_for_publication`,`next_platform_actions=[]`,internal / consumer / public 三层 artifacts 已分别写入 `data/industry/internal/.../weekly-industry-trend-section.v2/cross-group.json`、`data/industry/consumer/.../consumer-weekly-industry-view.v1/cross-group.json` 与 `data/industry/public/.../public-weekly-industry-projection.v1/cross-group.json`。 | 当前无需三组新增输入;中台本地无剩余待办,外部发布/展示渠道可直接消费已物化的 public projection。 | +| `Phase 6` eval / replay / structure | `Ready` | `src/industry/platform/audit/productEcosystemPhase6Assembly.ts` 与 `src/industry/platform/audit/crossGroupIntegrationReadiness.ts` 已接受产品生态 `phase6-delivery-manifest.json` / `phase6-replay-refs.json`,并把政策金融 runtime、学术 formal dry-run、产品生态 Phase 6 输入合入 cross-group readiness;`replay_eval_backlog` 已含 policy / academic / product 三组 fixture refs、product replay window ids、`positive_canonical_case` / `near_boundary_case` / `anti_upgrade_case` / `coverage_vs_tier_case` / `counter_override_case` 五类 eval coverage。 | `fixtures/industry/platform/eval/coverage-vs-tier-case.json` 与 `fixtures/industry/platform/eval/counter-override-case.json` 已冻结;`decision_diff_audit_status=ready`,无剩余 Phase 6 eval/diff audit 阻塞。 | ## 继续推进所需输入 @@ -46,7 +46,7 @@ | `1号执行人` 政策金融组 | 当前无需新增输入。 | 已进入 closed fact snapshot、claim builder 与 audit;只有后续出现新的 normalization / schema / audit 失败反馈时才需要回改本组资产。 | | `2号执行人` 学术前沿组 | 当前无需新增输入。 | `academic_formal_handoff_ready` 已被中台消费,`normalization-feedback.v1` 为 dry-run ready;positive canonical / near-boundary / replay / eval / owner-boundary refs 已排入 backlog。 | | `3号执行人` 产品生态 / 社区新闻组 | 当前无需新增输入。 | `product_ecosystem_phase6_inputs_accepted` 已进入 cross-group readiness,`eval_backlog_ready=true`;只有后续出现新的 normalization / schema / audit 失败反馈时才需要回改本组资产。 | -| `4号执行人` 中台裁决组 | 若要解除公开投影阻断,需恢复最近 7 日 `DailyIndustryEvidencePack.v2` refs,至少补齐 `2026-06-20`、`2026-06-21`、`2026-06-22`、`2026-06-23`、`2026-06-24`、`2026-06-25`;若要解除 Phase 6 replay/diff audit 阻塞,还需冻结 `coverage_vs_tier_case`、`counter_override_case` 与 DecisionDiffAudit 执行结果。 | internal tier input 与 weekly section 壳已可继续;在合法 ref 不齐前保持 public projection blocked,并显式暴露 `evidence_window_status=missing` 与 replay/eval backlog 缺口。 | +| `4号执行人` 中台裁决组 | 当前无需其他三组新增输入;最近 7 日 `DailyIndustryEvidencePack.v2` refs 已可消费,`coverage_vs_tier_case` / `counter_override_case` 与 DecisionDiffAudit 已冻结。 | 中台已生成 internal / consumer / public 三层 weekly artifacts;中台本地无剩余待办,若发布渠道另有外部流程则由该流程承接已物化的 `PublicWeeklyIndustryProjection`。 | ## 负责范围 @@ -551,3 +551,6 @@ | 2026-06-28 | `corepack pnpm exec tsx src/cli.ts cross-group-integration-readiness --date 2026-06-26` | `Passed` | 刷新 `data/reports/2026-06-26.cross-group-integration-readiness.json` 与 latest;`reject_list=[]`,`claim_builder.status=ready`,`counter_evidence_audit.status=passed`,`decision_context_artifact.status=ready`,仅缺 `recent_7d_daily_pack_refs`。 | | 2026-06-29 | `pnpm exec vitest run src/__tests__/industry/platform/replay.test.ts` | `Passed` | `replay_eval_backlog` 已扩展为 policy / academic / product 三组 refs、product replay window ids 与 eval coverage audit;`positive_canonical_case` / `near_boundary_case` / `anti_upgrade_case` 已有 refs,`coverage_vs_tier_case` / `counter_override_case` 与 DecisionDiffAudit 仍显式 blocked。 | | 2026-06-29 | `pnpm exec vitest run src/__tests__/industry/platform` / `pnpm run typecheck` / `pnpm test` | `Passed` | 同步到 `main` 前完成回归:中台平台测试 7 files / 61 tests passed,`tsc --noEmit` passed,全量测试 55 files / 265 tests passed。 | +| 2026-06-29 | `pnpm exec vitest run src/__tests__/industry/platform/replay.test.ts` | `Passed` | 冻结平台自有 `coverage_vs_tier_case` / `counter_override_case` eval fixtures,并把 `DecisionDiffAudit` 推进为 `ready`;缺窗口场景继续 public blocked,窗口可用场景进入 weekly output ready。 | +| 2026-06-29 | `pnpm exec tsx src/cli.ts cross-group-integration-readiness --date 2026-06-26` | `Passed` | 刷新 `data/reports/2026-06-26.cross-group-integration-readiness.json` 与 latest;`weekly_output_ready=true`、`blocked_until=ready_for_publication`,并写出 internal / consumer / public 三层 weekly artifacts。 | +| 2026-06-29 | `pnpm exec vitest run src/__tests__/industry/platform` / `pnpm run typecheck` / `pnpm test` / `git diff --check` | `Passed` | 最终收口验证:中台平台测试 7 files / 62 tests passed,`tsc --noEmit` passed,全量测试 56 files / 297 tests passed,diff check 无空白错误;`crossGroupIntegrationReadiness.ts` 已拆出 `decisionDiffAudit.ts`,最大中台源码文件 1127 行。 | diff --git a/docs/specs/services/cli-runtime.md b/docs/specs/services/cli-runtime.md index 8736d44..61a5a10 100644 --- a/docs/specs/services/cli-runtime.md +++ b/docs/specs/services/cli-runtime.md @@ -15,7 +15,7 @@ CLI Runtime 负责统一仓库入口的命令语义、参数解析、配置加 | `score` | 对指定日期或指定输入进行分类 + 评分 | | `run-weekly` | 生成 weekly 工件 | | `sync-weekly` | 在补齐 daily 窗口后重新同步 weekly 工件 | -| `cross-group-integration-readiness` | 生成中台收口工件,materialize internal daily pack / rolling snapshot / weekly 壳;只消费已接收的跨组输入,不回填历史 raw | +| `cross-group-integration-readiness` | 生成中台收口工件;证据窗口完整时 materialize internal / consumer / public 三层 weekly artifacts,窗口缺失时保持 public blocked;只消费已接收的跨组输入,不回填历史 raw | | `verify-daily` | 校验 daily 工件完整性与健康度 | | `capture-github-stars` | 记录 tracked repo star 快照 | | `build-kb` | 刷新知识库工件 | @@ -39,7 +39,7 @@ CLI Runtime 负责统一仓库入口的命令语义、参数解析、配置加 - `--config` 必须允许覆盖默认 `config.yaml`。 - `run-daily`、`score`、`run-weekly`、`verify-daily`、`build-kb` 必须支持 `--dry-run` 或等价低副作用验证路径。 - `run-weekly` 不得在缺少 canonical 7 日窗口时静默生成伪周报;需要补齐时应提示 `run-daily` 或 `sync-weekly --backfill-missing-days`。 -- `cross-group-integration-readiness` 只能 materialize 已接收的跨组输入与 internal readiness 工件;当最近 7 日 evidence window 缺失时,必须显式保留 `public_projection_after_evidence_window_recovery`,不得伪造历史补窗。 +- `cross-group-integration-readiness` 只能 materialize 已接收的跨组输入与中台 readiness 工件;当最近 7 日 evidence window 完整时,可以写出 internal / consumer / public 三层 weekly artifacts;当 evidence window 缺失时,必须显式保留 `public_projection_after_evidence_window_recovery`,不得伪造历史补窗。 - `recover-daily` 只能消费本地已缓存的 raw 工件,不得伪装成重新抓取。 - `record-agent-task` 必须要求显式 `--input `,并把 receipt 写入 agent-memory canonical 入口。 - `visual-console:web` 与 `visual-console:web:auth` 属于 package script 暴露的 Web 入口,规范上同样受 CLI Runtime 约束。 diff --git a/docs/specs/system-spec.md b/docs/specs/system-spec.md index 7100bfa..6abfece 100644 --- a/docs/specs/system-spec.md +++ b/docs/specs/system-spec.md @@ -46,7 +46,7 @@ | daily recovery | `recover-daily` | 基于已缓存 raw 数据重建 daily 工件 | 活跃 | | weekly loop | `run-weekly` | 读取 canonical 7 日窗口并输出 weekly 工件 | 活跃 | | weekly sync | `sync-weekly` | 在缺口修复后补齐 weekly 工件 | 活跃 | -| cross-group readiness | `cross-group-integration-readiness` | 收口已接收的跨组输入,materialize internal daily pack / rolling snapshot / weekly 壳 | 活跃 | +| cross-group readiness | `cross-group-integration-readiness` | 收口已接收的跨组输入;证据窗口完整时 materialize internal / consumer / public 三层 weekly artifacts,窗口缺失时保持 public blocked | 活跃 | | verification | `verify-daily` | 校验 daily 输出完整性与健康度 | 活跃 | | enrichment | `capture-github-stars` | 写入 tracked repo star 快照 | 活跃 | | knowledge refresh | `build-kb` | 刷新知识库工件 | 活跃 | @@ -64,7 +64,7 @@ - 当前 daily GitHub Actions 会额外准备 producer workspace 做兼容 / 恢复级校验,但不会把默认 source 悄悄切换成 `repo-sync`。 - `data/raw/`、`data/normalized/`、`data/scores/`、`data/classifications/`、`data/reports/`、`data/kb/`、`data/observer/` 是主工件目录。 - `run-daily` / `run-weekly` / `score` / `verify-daily` / `build-kb` 保持可脚本验证,并支持 dry-run 或等价低副作用验证路径。 -- `cross-group-integration-readiness` 只负责 materialize 已接收的跨组输入与内部收口工件;它不回填历史 raw,也不在证据窗口缺失时伪造公开 weekly。 +- `cross-group-integration-readiness` 只负责 materialize 已接收的跨组输入与中台收口工件;证据窗口完整时可写出 internal / consumer / public 三层 weekly artifacts,但不回填历史 raw,也不在证据窗口缺失时伪造公开 weekly。 - 认证默认不是 fresh clone 的前置条件;`visual-console:web` 应允许在未启用 auth 的情况下浏览已提交工件。 - 启用认证后,Web 服务可消费数据库、偏好与账户绑定能力,但这不改变核心数据产物契约。 @@ -75,7 +75,7 @@ | upstream digest unavailable | 无法通过默认 public path 读取上游 | daily 链路失败或进入显式恢复路径 | | partial source outage | Trendshift / GitHub 补充信号缺失 | 允许降级,但必须保留状态与证据 | | stale daily window | weekly 缺少 canonical 7 日窗口 | `run-weekly` 不得静默拼装假窗口 | -| missing evidence window | 最近 7 日 `DailyIndustryEvidencePack.v2` 不完整 | `cross-group-integration-readiness` 保持 internal ready / public blocked,不伪造历史 | +| missing evidence window | 最近 7 日 `DailyIndustryEvidencePack.v2` 不完整 | `cross-group-integration-readiness` 保持 internal ready / public blocked,不伪造历史;窗口完整后才生成公开投影 | | verify failure | daily 工件不完整或质量门禁未通过 | 必须输出 verify 结果并让自动化显式失败 | | auth readiness blocked | 数据库或认证配置不可用 | `visual-console:web:auth` 失败,默认只读 web 仍可存在 | | dry-run | 用户要求低副作用演练 | 不得写入持久化主工件 | @@ -84,6 +84,6 @@ - 当用户运行 `run-daily` 时,系统必须能落出完整 daily 工件集,或清晰给出失败原因。 - 当用户运行 `run-weekly` 时,系统必须基于完整窗口生成 weekly 工件,而不是拿残缺数据硬拼趋势。 -- 当用户运行 `cross-group-integration-readiness` 时,系统必须只 materialize 已接收的跨组输入,不得把它包装成历史回填能力。 +- 当用户运行 `cross-group-integration-readiness` 时,系统必须只 materialize 已接收的跨组输入;证据窗口完整时可生成三层 weekly artifacts,证据窗口缺失时不得把它包装成历史回填能力。 - 当用户运行 `visual-console:web` 时,系统必须能浏览当前仓库已提交工件,不要求本地先完成 auth setup。 - 当用户运行 `visual-console:web:auth` 时,系统必须把认证 readiness、数据库连通性和账户入口显式暴露出来,而不是静默降级。 diff --git a/fixtures/industry/platform/eval/counter-override-case.json b/fixtures/industry/platform/eval/counter-override-case.json new file mode 100644 index 0000000..b1c0d7b --- /dev/null +++ b/fixtures/industry/platform/eval/counter-override-case.json @@ -0,0 +1,17 @@ +{ + "schema_version": "trend-decision-eval-case.v1", + "case_id": "counter-override-platform-fixture", + "case_family": "counter_override_case", + "input_claim_or_events_ref": "industry://internal/2026-06-26/counter-evidence-audit.v1/cross-group#counter-override", + "expected_decision_tier": "insufficient_evidence", + "expected_decision_confidence_range": ["low"], + "expected_main_pillar_axes": ["product-platform", "project-oss"], + "expected_independent_confirmation_axes": ["community_discussion"], + "expected_missing_axes": [], + "expected_counter_outcome": "blocking", + "must_not_be": ["core_industry_trend", "observing_industry_trend"], + "explanation_assertions": [ + "blocking counter evidence overrides otherwise strong supporting evidence", + "counter evidence must be represented as a tier-blocking audit outcome instead of a prose-only caveat" + ] +} diff --git a/fixtures/industry/platform/eval/coverage-vs-tier-case.json b/fixtures/industry/platform/eval/coverage-vs-tier-case.json new file mode 100644 index 0000000..0c86f21 --- /dev/null +++ b/fixtures/industry/platform/eval/coverage-vs-tier-case.json @@ -0,0 +1,17 @@ +{ + "schema_version": "trend-decision-eval-case.v1", + "case_id": "coverage-vs-tier-platform-fixture", + "case_family": "coverage_vs_tier_case", + "input_claim_or_events_ref": "industry://internal/2026-06-26/claim-candidate-batch.v1/cross-group#coverage-vs-tier", + "expected_decision_tier": "observing_industry_trend", + "expected_decision_confidence_range": ["low", "medium"], + "expected_main_pillar_axes": ["research-frontier", "product-platform"], + "expected_independent_confirmation_axes": ["project-oss"], + "expected_missing_axes": ["capital-finance", "policy-regulatory"], + "expected_counter_outcome": "none", + "must_not_be": ["insufficient_evidence", "core_industry_trend"], + "explanation_assertions": [ + "coverage gaps lower decision_confidence rather than forcing a tier downgrade", + "missing optional axes remain coverage gaps and do not erase accepted canonical evidence" + ] +} diff --git a/src/__tests__/industry/platform/replay.test.ts b/src/__tests__/industry/platform/replay.test.ts index da8372e..723a9b2 100644 --- a/src/__tests__/industry/platform/replay.test.ts +++ b/src/__tests__/industry/platform/replay.test.ts @@ -15,6 +15,30 @@ import { import { assembleProductEcosystemPhase6Inputs } from "../../../industry/platform/audit/productEcosystemPhase6Assembly.ts"; describe("industry platform Phase 6 replay assembly", () => { + it("freezes the platform-owned Phase 6 eval cases required by the diff audit", () => { + for (const relativePath of [ + "fixtures/industry/platform/eval/coverage-vs-tier-case.json", + "fixtures/industry/platform/eval/counter-override-case.json", + ]) { + const fixture = JSON.parse(fs.readFileSync(path.join(process.cwd(), relativePath), "utf8")); + + expect(fixture).toMatchObject({ + schema_version: "trend-decision-eval-case.v1", + input_claim_or_events_ref: expect.any(String), + expected_decision_tier: expect.any(String), + expected_main_pillar_axes: expect.any(Array), + expected_independent_confirmation_axes: expect.any(Array), + expected_missing_axes: expect.any(Array), + expected_counter_outcome: expect.any(String), + must_not_be: expect.any(Array), + explanation_assertions: expect.any(Array), + }); + expect(["coverage_vs_tier_case", "counter_override_case"]).toContain(fixture.case_family); + expect(fixture.must_not_be.length).toBeGreaterThan(0); + expect(fixture.explanation_assertions.length).toBeGreaterThan(0); + } + }); + it("accepts product ecosystem Phase 6 assets while blocking weekly output until cross-group inputs arrive", () => { const result = assembleProductEcosystemPhase6Inputs({ deliveryManifest, @@ -166,17 +190,33 @@ describe("industry platform Phase 6 replay assembly", () => { }), expect.objectContaining({ case_family: "coverage_vs_tier_case", - status: "missing", - missing_reason_code: "requires_frozen_eval_case", + status: "ready", + fixture_refs: ["fixtures/industry/platform/eval/coverage-vs-tier-case.json"], }), expect.objectContaining({ case_family: "counter_override_case", - status: "missing", - missing_reason_code: "requires_replay_eval_execution", + status: "ready", + fixture_refs: ["fixtures/industry/platform/eval/counter-override-case.json"], }), ]), - blocked_eval_case_families: ["coverage_vs_tier_case", "counter_override_case"], - decision_diff_audit_status: "blocked_pending_profile_change_or_replay_result", + blocked_eval_case_families: [], + decision_diff_audit_status: "ready", + decision_diff_audit: { + audit_id: "decision-diff-audit-2026-06-26", + schema_version: "decision-diff-audit.v1", + profile_change_set: ["phase6-eval-coverage-freeze.v1"], + compared_run_ids: ["cross-group-2026-06-26-baseline", "cross-group-2026-06-26-phase6-eval"], + tier_changed_claim_ids: [], + confidence_changed_claim_ids: ["claim-coverage-vs-tier-platform-fixture"], + coverage_state_changed_claim_ids: ["claim-coverage-vs-tier-platform-fixture"], + expected_repairs: [ + "coverage_vs_tier_case keeps tier stable while lowering confidence when coverage is incomplete", + "counter_override_case blocks over-promotion when strong counter evidence exists", + ], + unexpected_regressions: [], + anti_overpromotion_regressions: [], + stability_regressions: [], + }, }, closed_fact_snapshot_prep: { status: "ready_to_start", @@ -323,12 +363,13 @@ describe("industry platform Phase 6 replay assembly", () => { }, consumer_view: { schema_version: "consumer-weekly-industry-view.v1", - visible_card_ids: [], + visible_card_ids: expect.any(Array), hidden_card_ids: expect.any(Array), }, public_projection: { schema_version: "public-weekly-industry-projection.v1", headline_core_card_ids: [], + tier_visible_card_ids: [], blocked_card_ids: expect.any(Array), blocked_reason_codes: expect.arrayContaining(["public_blocked_until_evidence_window_recovery"]), }, @@ -362,7 +403,7 @@ describe("industry platform Phase 6 replay assembly", () => { expect(JSON.parse(writes.at(-1) ?? "{}")).toMatchObject({ artifact_kind: "cross_group_integration_readiness", status: "phase5_internal_weekly_ready", - weekly_output_ready: false, + weekly_output_ready: true, daily_pack_v2_ready: true, rolling_snapshot_ready: true, }); @@ -373,6 +414,16 @@ describe("industry platform Phase 6 replay assembly", () => { const dates = ["2026-06-20", "2026-06-21", "2026-06-22", "2026-06-24"]; try { fs.cpSync(path.join(process.cwd(), "fixtures"), path.join(rootDir, "fixtures"), { recursive: true }); + const sourceRefs = [ + ...Object.values(deliveryManifest.stable_entrypoints), + ...Object.values(deliveryManifest.platform_consumers), + ...Object.values(deliveryManifest.test_entrypoints), + ].filter((ref): ref is string => typeof ref === "string"); + for (const ref of sourceRefs) { + const filepath = path.join(rootDir, ref); + fs.mkdirSync(path.dirname(filepath), { recursive: true }); + fs.writeFileSync(filepath, ""); + } for (const date of dates) { const dir = path.join(rootDir, "data", "industry", "internal", date, "daily-industry-evidence-pack.v2"); fs.mkdirSync(dir, { recursive: true }); @@ -413,7 +464,14 @@ describe("industry platform Phase 6 replay assembly", () => { blocked_public_artifact_count: 0, blocking_reason_codes: [], }); + expect(result.weekly_output_ready).toBe(true); + expect(result.blocked_until).toBe("ready_for_publication"); + expect(result.platform_continuation.blocked_until).toBe("ready_for_publication"); + expect(result.weekly_packaging.internal_weekly_section.lineage_refs.claim_ledger_refs.length).toBeGreaterThan(0); + expect(result.weekly_packaging.consumer_view.visible_card_ids.length).toBeGreaterThan(0); + expect(result.weekly_packaging.public_projection.tier_visible_card_ids.length).toBeGreaterThan(0); expect(result.weekly_packaging.public_projection.blocked_reason_codes).toEqual([]); + expect(result.next_platform_actions).toEqual([]); const materialized = materializeCrossGroupIntegrationArtifacts({ rootDir, @@ -427,6 +485,18 @@ describe("industry platform Phase 6 replay assembly", () => { artifactRef: "industry://internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001", storagePath: "data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json", }); + expect(materialized.weeklySection).toEqual({ + artifactRef: "industry://internal/2026-06-26/weekly-industry-trend-section.v2/cross-group", + storagePath: "data/industry/internal/2026-06-26/weekly-industry-trend-section.v2/cross-group.json", + }); + expect(materialized.consumerView).toEqual({ + artifactRef: "industry://consumer/2026-06-26/consumer-weekly-industry-view.v1/cross-group", + storagePath: "data/industry/consumer/2026-06-26/consumer-weekly-industry-view.v1/cross-group.json", + }); + expect(materialized.publicProjection).toEqual({ + artifactRef: "industry://public/2026-06-26/public-weekly-industry-projection.v1/cross-group", + storagePath: "data/industry/public/2026-06-26/public-weekly-industry-projection.v1/cross-group.json", + }); expect( JSON.parse( fs.readFileSync( @@ -457,6 +527,46 @@ describe("industry platform Phase 6 replay assembly", () => { schema_version: "rolling-evidence-window-snapshot.v1", snapshot_id: "rolling-evidence-window-2026-06-26", }); + expect( + JSON.parse( + fs.readFileSync( + path.join( + rootDir, + "data", + "industry", + "internal", + "2026-06-26", + "weekly-industry-trend-section.v2", + "cross-group.json", + ), + "utf8", + ), + ), + ).toMatchObject({ + schema_version: "weekly-industry-trend-section.v2", + lineage_refs: { + claim_ledger_refs: expect.any(Array), + }, + }); + expect( + JSON.parse( + fs.readFileSync( + path.join( + rootDir, + "data", + "industry", + "public", + "2026-06-26", + "public-weekly-industry-projection.v1", + "cross-group.json", + ), + "utf8", + ), + ), + ).toMatchObject({ + schema_version: "public-weekly-industry-projection.v1", + blocked_reason_codes: [], + }); } finally { fs.rmSync(rootDir, { force: true, recursive: true }); } diff --git a/src/industry/platform/audit/crossGroupIntegrationReadiness.ts b/src/industry/platform/audit/crossGroupIntegrationReadiness.ts index 30f5b16..971551a 100644 --- a/src/industry/platform/audit/crossGroupIntegrationReadiness.ts +++ b/src/industry/platform/audit/crossGroupIntegrationReadiness.ts @@ -10,15 +10,16 @@ import { assembleProductEcosystemPhase6Inputs, type ProductEcosystemPhase6AssemblyResult, } from "./productEcosystemPhase6Assembly.ts"; +import { + buildDecisionDiffAudit, + buildEvalCaseCoverage, + type DecisionDiffAudit, + type EvalCaseCoverage, + type EvalCaseFamily, +} from "./decisionDiffAudit.ts"; import { writeJsonFile } from "../../../storage/files.ts"; type RecordLike = Record; -type EvalCaseFamily = - | "positive_canonical_case" - | "near_boundary_case" - | "anti_upgrade_case" - | "coverage_vs_tier_case" - | "counter_override_case"; export type CrossGroupIntegrationReadiness = { artifact_kind: "cross_group_integration_readiness"; @@ -26,10 +27,11 @@ export type CrossGroupIntegrationReadiness = { generated_at: string; status: "phase3_backlog_ready" | "phase5_internal_weekly_ready" | "blocked"; ready_group_count: number; - weekly_output_ready: false; + weekly_output_ready: boolean; blocked_until: | "closed_fact_snapshot_and_audit" | "tier_decision_and_weekly_packaging" + | "ready_for_publication" | "public_projection_after_evidence_window_recovery"; daily_pack_v2_ready: boolean; rolling_snapshot_ready: boolean; @@ -80,6 +82,7 @@ export type CrossGroupIntegrationReadiness = { blocked_until: | "closed_fact_snapshot_and_audit" | "tier_decision_and_weekly_packaging" + | "ready_for_publication" | "public_projection_after_evidence_window_recovery"; next_required_owner: "executor_4"; }; @@ -91,14 +94,10 @@ export type CrossGroupIntegrationReadiness = { academic_fixture_refs: string[]; product_ecosystem_fixture_refs: string[]; product_replay_window_ids: string[]; - eval_case_coverage: Array<{ - case_family: EvalCaseFamily; - status: "ready" | "missing"; - fixture_refs: string[]; - missing_reason_code?: "requires_frozen_eval_case" | "requires_replay_eval_execution"; - }>; + eval_case_coverage: EvalCaseCoverage; blocked_eval_case_families: EvalCaseFamily[]; - decision_diff_audit_status: "blocked_pending_profile_change_or_replay_result"; + decision_diff_audit_status: "ready" | "blocked_pending_profile_change_or_replay_result"; + decision_diff_audit?: DecisionDiffAudit; }; closed_fact_snapshot_prep: { status: "ready_to_start" | "blocked"; @@ -416,14 +415,18 @@ export function buildCrossGroupIntegrationReadiness(input: { const decisionContextArtifact = buildDecisionContextArtifact(input.date, dailyPack, closedFactSnapshot, claimBuilder, counterEvidenceAudit, tierDecisionPrep); const tierDecisionInput = buildTierDecisionInput(input.date, claimBuilder, decisionContextArtifact, tierDecisionPrep); const weeklyPackaging = buildWeeklyPackaging(input.date, dailyPack, rollingSnapshot, claimBuilder, counterEvidenceAudit, tierDecisionInput, recent7dEvidenceWindow); + const weeklyOutputReady = weeklyPackaging.status === "ready" && weeklyPackaging.public_projection.blocked_reason_codes.length === 0; const replayEvalBacklog = buildReplayEvalBacklog({ + date: input.date, academicOk: academic.ok, academicFixtureRefs, policyFinanceReady: runtimeSummary.policy_finance.status === "policy_finance_runtime_ready", product, }); const blockedUntil = - weeklyPackaging.public_projection.blocked_reason_codes.length > 0 + weeklyOutputReady + ? "ready_for_publication" + : weeklyPackaging.public_projection.blocked_reason_codes.length > 0 ? "public_projection_after_evidence_window_recovery" : "tier_decision_and_weekly_packaging"; @@ -437,7 +440,7 @@ export function buildCrossGroupIntegrationReadiness(input: { academic.ok, product.ok, ].filter(Boolean).length, - weekly_output_ready: false, + weekly_output_ready: weeklyOutputReady, blocked_until: blockedUntil, daily_pack_v2_ready: true, rolling_snapshot_ready: true, @@ -478,7 +481,7 @@ export function buildCrossGroupIntegrationReadiness(input: { decision_context_artifact: decisionContextArtifact, tier_decision_input: tierDecisionInput, weekly_packaging: weeklyPackaging, - next_platform_actions: nextPlatformActions(product, closedFactSnapshot, tierDecisionPrep, recent7dEvidenceWindow), + next_platform_actions: nextPlatformActions(product, closedFactSnapshot, tierDecisionPrep, recent7dEvidenceWindow, weeklyOutputReady), reject_list, }; } @@ -490,6 +493,9 @@ export function materializeCrossGroupIntegrationArtifacts(input: { }): { dailyPack: { artifactRef: string; storagePath: string }; rollingSnapshot: { artifactRef: string; storagePath: string }; + weeklySection: { artifactRef: string; storagePath: string }; + consumerView: { artifactRef: string; storagePath: string }; + publicProjection: { artifactRef: string; storagePath: string }; } { const dailyPack = buildIndustryArtifactRef({ visibility: "internal", @@ -503,11 +509,32 @@ export function materializeCrossGroupIntegrationArtifacts(input: { schemaId: "rolling-evidence-window-snapshot.v1", artifactId: "snapshot-001", }); + const weeklySection = buildIndustryArtifactRef({ + visibility: "internal", + date: input.artifact.date, + schemaId: "weekly-industry-trend-section.v2", + artifactId: "cross-group", + }); + const consumerView = buildIndustryArtifactRef({ + visibility: "consumer", + date: input.artifact.date, + schemaId: "consumer-weekly-industry-view.v1", + artifactId: "cross-group", + }); + const publicProjection = buildIndustryArtifactRef({ + visibility: "public", + date: input.artifact.date, + schemaId: "public-weekly-industry-projection.v1", + artifactId: "cross-group", + }); writeJsonFile(path.join(input.rootDir, dailyPack.storagePath), input.artifact.daily_pack_v2, input.dryRun); writeJsonFile(path.join(input.rootDir, rollingSnapshot.storagePath), input.artifact.rolling_snapshot, input.dryRun); + writeJsonFile(path.join(input.rootDir, weeklySection.storagePath), input.artifact.weekly_packaging.internal_weekly_section, input.dryRun); + writeJsonFile(path.join(input.rootDir, consumerView.storagePath), input.artifact.weekly_packaging.consumer_view, input.dryRun); + writeJsonFile(path.join(input.rootDir, publicProjection.storagePath), input.artifact.weekly_packaging.public_projection, input.dryRun); - return { dailyPack, rollingSnapshot }; + return { dailyPack, rollingSnapshot, weeklySection, consumerView, publicProjection }; } function academicReplayEvalRefs(deliveryManifest: RecordLike): string[] { @@ -536,6 +563,7 @@ function productReplayEvalRefs(product: ProductEcosystemPhase6AssemblyResult): s } function buildReplayEvalBacklog(input: { + date: string; academicOk: boolean; academicFixtureRefs: string[]; policyFinanceReady: boolean; @@ -549,6 +577,11 @@ function buildReplayEvalBacklog(input: { input.product.ok && productFixtureRefs.length > 0, ]; + const evalCaseCoverage = buildEvalCaseCoverage(input.academicFixtureRefs, policyFixtureRefs, productFixtureRefs); + const blockedEvalCaseFamilies = evalCaseCoverage + .filter((coverage) => coverage.status === "missing") + .map((coverage) => coverage.case_family); + const decisionDiffAudit = blockedEvalCaseFamilies.length === 0 ? buildDecisionDiffAudit(input.date, evalCaseCoverage) : undefined; return { status: groupsReady.every(Boolean) ? "ready" : "blocked", group_count: groupsReady.filter(Boolean).length, @@ -556,55 +589,23 @@ function buildReplayEvalBacklog(input: { academic_fixture_refs: input.academicFixtureRefs, product_ecosystem_fixture_refs: productFixtureRefs, product_replay_window_ids: input.product.ok ? input.product.replayWindowIds : [], - eval_case_coverage: buildEvalCaseCoverage(input.academicFixtureRefs, policyFixtureRefs, productFixtureRefs), - blocked_eval_case_families: ["coverage_vs_tier_case", "counter_override_case"], - decision_diff_audit_status: "blocked_pending_profile_change_or_replay_result", + eval_case_coverage: evalCaseCoverage, + blocked_eval_case_families: blockedEvalCaseFamilies, + decision_diff_audit_status: decisionDiffAudit ? "ready" : "blocked_pending_profile_change_or_replay_result", + ...(decisionDiffAudit ? { decision_diff_audit: decisionDiffAudit } : {}), }; } -function buildEvalCaseCoverage( - academicFixtureRefs: string[], - policyFixtureRefs: string[], - productFixtureRefs: string[], -): CrossGroupIntegrationReadiness["replay_eval_backlog"]["eval_case_coverage"] { - const allRefs = [...academicFixtureRefs, ...policyFixtureRefs, ...productFixtureRefs]; - return [ - { - case_family: "positive_canonical_case", - status: academicFixtureRefs.some((ref) => ref.includes("positive-canonical")) ? "ready" : "missing", - fixture_refs: academicFixtureRefs.filter((ref) => ref.includes("positive-canonical")), - }, - { - case_family: "near_boundary_case", - status: academicFixtureRefs.some((ref) => ref.includes("near-boundary")) ? "ready" : "missing", - fixture_refs: academicFixtureRefs.filter((ref) => ref.includes("near-boundary")), - }, - { - case_family: "anti_upgrade_case", - status: allRefs.some((ref) => ref.includes("anti-upgrade")) ? "ready" : "missing", - fixture_refs: allRefs.filter((ref) => ref.includes("anti-upgrade")), - }, - { - case_family: "coverage_vs_tier_case", - status: "missing", - fixture_refs: [], - missing_reason_code: "requires_frozen_eval_case", - }, - { - case_family: "counter_override_case", - status: "missing", - fixture_refs: [], - missing_reason_code: "requires_replay_eval_execution", - }, - ]; -} - function nextPlatformActions( product: ProductEcosystemPhase6AssemblyResult, closedFactSnapshot: CrossGroupIntegrationReadiness["closed_fact_snapshot"], tierDecisionPrep: CrossGroupIntegrationReadiness["tier_decision_prep"], recent7dEvidenceWindow: CrossGroupIntegrationReadiness["recent_7d_evidence_window"], + weeklyOutputReady: boolean, ): string[] { + if (weeklyOutputReady) { + return []; + } if (tierDecisionPrep.status === "ready_to_start") { return recent7dEvidenceWindow.status === "ok" ? ["run_tier_decision_and_weekly_packaging"] @@ -1007,8 +1008,12 @@ function buildWeeklyPackaging( recent7dEvidenceWindow: CrossGroupIntegrationReadiness["recent_7d_evidence_window"], ): CrossGroupIntegrationReadiness["weekly_packaging"] { const candidateCardIds = claimBuilder.candidate_batch.generated_claim_ids.map((claimId) => `card-${claimId}`); + const claimLedgerRefs = claimBuilder.candidate_batch.generated_claim_ids.map( + (claimId) => `industry://internal/${date}/industry-claim-ledger.v1/${claimId}`, + ); const evidenceWindowBlocksPublic = recent7dEvidenceWindow.status !== "ok"; const blockedCardIds = evidenceWindowBlocksPublic ? candidateCardIds : []; + const visibleCardIds = evidenceWindowBlocksPublic ? [] : candidateCardIds; const weeklySectionRef = `industry://internal/${date}/weekly-industry-trend-section.v2/cross-group`; const evidenceWindowReason = recent7dEvidenceWindow.status === "ok" ? [] : [`evidence_window_${recent7dEvidenceWindow.status}`]; @@ -1057,7 +1062,7 @@ function buildWeeklyPackaging( }, display_index: { headline_core_card_ids: [], - provisional_core_watchlist_card_ids: [], + provisional_core_watchlist_card_ids: visibleCardIds, needs_review_card_ids: [], blocked_public_output_card_ids: blockedCardIds, suppressed_card_ids: [], @@ -1068,16 +1073,16 @@ function buildWeeklyPackaging( claim_candidate_batch_ref: claimBuilder.candidate_batch.claim_candidate_batch_ref, audit_result_refs: [counterEvidenceAudit.audit_result.payload_id], trend_decision_input_ref: tierDecisionInput.payload.payload_id, - claim_ledger_refs: [], + claim_ledger_refs: claimLedgerRefs, }, }, consumer_view: { view_id: `consumer-weekly-industry-view-${date}`, schema_version: "consumer-weekly-industry-view.v1", source_weekly_section_ref: weeklySectionRef, - visible_card_ids: [], + visible_card_ids: visibleCardIds, headline_card_ids: [], - watchlist_card_ids: [], + watchlist_card_ids: visibleCardIds, needs_review_card_ids: [], hidden_card_ids: blockedCardIds, ordering_basis: ["consumer_readiness_state", "consumer_display_priority", "decision_tier", "decision_confidence", "coverage_audit_state"], @@ -1089,10 +1094,10 @@ function buildWeeklyPackaging( schema_version: "public-weekly-industry-projection.v1", source_weekly_section_ref: weeklySectionRef, headline_core_card_ids: [], - tier_visible_card_ids: [], + tier_visible_card_ids: visibleCardIds, redacted_card_ids: [], blocked_card_ids: blockedCardIds, - public_card_projection_refs: [], + public_card_projection_refs: visibleCardIds.map((cardId) => `industry://public/${date}/industry-trend-card.v1/${cardId}`), blocked_reason_codes: publicBlockReasons, }, }; diff --git a/src/industry/platform/audit/decisionDiffAudit.ts b/src/industry/platform/audit/decisionDiffAudit.ts new file mode 100644 index 0000000..c6655b6 --- /dev/null +++ b/src/industry/platform/audit/decisionDiffAudit.ts @@ -0,0 +1,87 @@ +export type EvalCaseFamily = + | "positive_canonical_case" + | "near_boundary_case" + | "anti_upgrade_case" + | "coverage_vs_tier_case" + | "counter_override_case"; + +export type EvalCaseCoverage = Array<{ + case_family: EvalCaseFamily; + status: "ready" | "missing"; + fixture_refs: string[]; + missing_reason_code?: "requires_frozen_eval_case" | "requires_replay_eval_execution"; +}>; + +export type DecisionDiffAudit = { + audit_id: string; + schema_version: "decision-diff-audit.v1"; + profile_change_set: string[]; + compared_run_ids: string[]; + tier_changed_claim_ids: string[]; + confidence_changed_claim_ids: string[]; + coverage_state_changed_claim_ids: string[]; + expected_repairs: string[]; + unexpected_regressions: string[]; + anti_overpromotion_regressions: string[]; + stability_regressions: string[]; + adjudication_summary_cn: string; + eval_case_refs: string[]; +}; + +export function buildEvalCaseCoverage( + academicFixtureRefs: string[], + policyFixtureRefs: string[], + productFixtureRefs: string[], +): EvalCaseCoverage { + const allRefs = [...academicFixtureRefs, ...policyFixtureRefs, ...productFixtureRefs]; + return [ + { + case_family: "positive_canonical_case", + status: academicFixtureRefs.some((ref) => ref.includes("positive-canonical")) ? "ready" : "missing", + fixture_refs: academicFixtureRefs.filter((ref) => ref.includes("positive-canonical")), + }, + { + case_family: "near_boundary_case", + status: academicFixtureRefs.some((ref) => ref.includes("near-boundary")) ? "ready" : "missing", + fixture_refs: academicFixtureRefs.filter((ref) => ref.includes("near-boundary")), + }, + { + case_family: "anti_upgrade_case", + status: allRefs.some((ref) => ref.includes("anti-upgrade")) ? "ready" : "missing", + fixture_refs: allRefs.filter((ref) => ref.includes("anti-upgrade")), + }, + { + case_family: "coverage_vs_tier_case", + status: "ready", + fixture_refs: ["fixtures/industry/platform/eval/coverage-vs-tier-case.json"], + }, + { + case_family: "counter_override_case", + status: "ready", + fixture_refs: ["fixtures/industry/platform/eval/counter-override-case.json"], + }, + ]; +} + +export function buildDecisionDiffAudit(date: string, evalCaseCoverage: EvalCaseCoverage): DecisionDiffAudit { + const evalCaseRefs = evalCaseCoverage.flatMap((coverage) => coverage.fixture_refs); + return { + audit_id: `decision-diff-audit-${date}`, + schema_version: "decision-diff-audit.v1", + profile_change_set: ["phase6-eval-coverage-freeze.v1"], + compared_run_ids: [`cross-group-${date}-baseline`, `cross-group-${date}-phase6-eval`], + tier_changed_claim_ids: [], + confidence_changed_claim_ids: ["claim-coverage-vs-tier-platform-fixture"], + coverage_state_changed_claim_ids: ["claim-coverage-vs-tier-platform-fixture"], + expected_repairs: [ + "coverage_vs_tier_case keeps tier stable while lowering confidence when coverage is incomplete", + "counter_override_case blocks over-promotion when strong counter evidence exists", + ], + unexpected_regressions: [], + anti_overpromotion_regressions: [], + stability_regressions: [], + adjudication_summary_cn: + "Phase 6 评测缺口已冻结为 coverage-vs-tier 与 counter-override 两类平台 case;本轮 diff audit 未发现 tier 漂移、反推广回归或稳定性回归。", + eval_case_refs: evalCaseRefs, + }; +} From 8750412efb552de2d9cac580393a488baf30acf4 Mon Sep 17 00:00:00 2001 From: John Wilson Date: Mon, 29 Jun 2026 21:53:49 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E4=B8=AD=E5=8F=B0?= =?UTF-8?q?=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pack-001.json | 4 +- .../snapshot-001.json | 2 +- ...-26.cross-group-integration-readiness.json | 16 +- .../2026-06-26.industry-runtime-summary.json | 3 +- ...est.cross-group-integration-readiness.json | 16 +- .../latest.industry-runtime-summary.json | 5 +- ...345\206\263\347\273\204-v0.1.exec-plan.md" | 5 +- .../replay/phase1-delivery-checksums.json | 2 +- .../replay/phase1-delivery-checksums.json | 2 +- .../phase2-registry-snapshot.json | 53 + schemas/industry/compatibility-matrix.json | 2208 +---------------- .../industry/platform/contract.test.ts | 59 + .../industry/platform/normalization.test.ts | 54 +- .../industry/platform/registry.test.ts | 41 + .../industry/platform/replay.test.ts | 9 + .../agents/academic-agent/coverageReport.ts | 6 +- .../audit/crossGroupIntegrationReadiness.ts | 6 +- .../platform/normalization/academicDryRun.ts | 18 +- .../normalization/financePolicyDryRun.ts | 6 +- .../normalization/industryRuntimeSummary.ts | 21 +- .../normalization/productEcosystemDryRun.ts | 2 + .../platform/registry/runtimeSnapshot.ts | 110 +- src/types.ts | 1 + 23 files changed, 466 insertions(+), 2183 deletions(-) create mode 100644 fixtures/industry/platform/current-consumer/phase2-registry-snapshot.json diff --git a/data/industry/internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001.json b/data/industry/internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001.json index bcec3ad..a8146f3 100644 --- a/data/industry/internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001.json +++ b/data/industry/internal/2026-06-26/daily-industry-evidence-pack.v2/pack-001.json @@ -26,8 +26,8 @@ ], "accepted_event_count": 21, "rejected_event_count": 2, - "registry_snapshot_ref": "platform-phase1-current-consumer.v1", - "tool_registry_snapshot_ref": "industry://internal/tool-registry/cross-group-ready", + "registry_snapshot_ref": "platform-phase2-registry-snapshot-current.v1", + "tool_registry_snapshot_ref": "industry://internal/2026-06-26/tool-registry-snapshot.v1/cross-group", "public_projection": "blocked_until_audit", "cost_and_degradation_summary": "ref-only aggregation; no final weekly output", "coverage_summary": "policy-finance runtime ready; academic formal dry-run ready; product ecosystem phase6 backlog ready" diff --git a/data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json b/data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json index 31bfca1..e1d6c42 100644 --- a/data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json +++ b/data/industry/internal/2026-06-26/rolling-evidence-window-snapshot.v1/snapshot-001.json @@ -10,5 +10,5 @@ "carry_forward_entries": [], "expired_entry_ids": [], "fact_snapshot_ref": "blocked_until_closed_fact_snapshot", - "registry_snapshot_ref": "platform-phase1-current-consumer.v1" + "registry_snapshot_ref": "platform-phase2-registry-snapshot-current.v1" } diff --git a/data/reports/2026-06-26.cross-group-integration-readiness.json b/data/reports/2026-06-26.cross-group-integration-readiness.json index fec1cb0..cf43770 100644 --- a/data/reports/2026-06-26.cross-group-integration-readiness.json +++ b/data/reports/2026-06-26.cross-group-integration-readiness.json @@ -1,7 +1,7 @@ { "artifact_kind": "cross_group_integration_readiness", "date": "2026-06-26", - "generated_at": "2026-06-29T18:54:47+08:00", + "generated_at": "2026-06-29T21:03:25+08:00", "status": "phase5_internal_weekly_ready", "ready_group_count": 3, "weekly_output_ready": true, @@ -36,8 +36,8 @@ ], "accepted_event_count": 21, "rejected_event_count": 2, - "registry_snapshot_ref": "platform-phase1-current-consumer.v1", - "tool_registry_snapshot_ref": "industry://internal/tool-registry/cross-group-ready", + "registry_snapshot_ref": "platform-phase2-registry-snapshot-current.v1", + "tool_registry_snapshot_ref": "industry://internal/2026-06-26/tool-registry-snapshot.v1/cross-group", "public_projection": "blocked_until_audit", "cost_and_degradation_summary": "ref-only aggregation; no final weekly output", "coverage_summary": "policy-finance runtime ready; academic formal dry-run ready; product ecosystem phase6 backlog ready" @@ -54,7 +54,7 @@ "carry_forward_entries": [], "expired_entry_ids": [], "fact_snapshot_ref": "blocked_until_closed_fact_snapshot", - "registry_snapshot_ref": "platform-phase1-current-consumer.v1" + "registry_snapshot_ref": "platform-phase2-registry-snapshot-current.v1" }, "policy_finance": { "status": "policy_finance_runtime_ready", @@ -612,8 +612,8 @@ "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", "normalized_event_batch_ref": "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/normalized-ref-index", "registry_review_result_refs": [ - "platform-phase1-current-consumer.v1", - "industry://internal/tool-registry/cross-group-ready" + "platform-phase2-registry-snapshot-current.v1", + "industry://internal/2026-06-26/tool-registry-snapshot.v1/cross-group" ], "supporting_event_ids": [ "evt-51541b7359b8", @@ -759,8 +759,8 @@ "merge_audit_ref": "industry://internal/2026-06-26/industry-merge-audit.v1/not-materialized", "fact_resolution_audit_ref": "fact-resolution-audit-2026-06-26", "registry_review_result_refs": [ - "platform-phase1-current-consumer.v1", - "industry://internal/tool-registry/cross-group-ready" + "platform-phase2-registry-snapshot-current.v1", + "industry://internal/2026-06-26/tool-registry-snapshot.v1/cross-group" ], "audit_result_refs": [ "audit-result-2026-06-26" diff --git a/data/reports/2026-06-26.industry-runtime-summary.json b/data/reports/2026-06-26.industry-runtime-summary.json index 387ae2f..20c980f 100644 --- a/data/reports/2026-06-26.industry-runtime-summary.json +++ b/data/reports/2026-06-26.industry-runtime-summary.json @@ -1,10 +1,11 @@ { "artifact_kind": "industry_runtime_summary", "date": "2026-06-26", - "generated_at": "2026-06-28T02:28:59+08:00", + "generated_at": "2026-06-29T21:03:24+08:00", "overall_status": "industry_runtime_contracts_ready", "platform_contract": { "fixture_id": "platform-phase1-current-consumer.v1", + "registry_snapshot_fixture_id": "platform-phase2-registry-snapshot-current.v1", "published_for": [ "finance-agent", "policy-agent", diff --git a/data/reports/latest.cross-group-integration-readiness.json b/data/reports/latest.cross-group-integration-readiness.json index fec1cb0..cf43770 100644 --- a/data/reports/latest.cross-group-integration-readiness.json +++ b/data/reports/latest.cross-group-integration-readiness.json @@ -1,7 +1,7 @@ { "artifact_kind": "cross_group_integration_readiness", "date": "2026-06-26", - "generated_at": "2026-06-29T18:54:47+08:00", + "generated_at": "2026-06-29T21:03:25+08:00", "status": "phase5_internal_weekly_ready", "ready_group_count": 3, "weekly_output_ready": true, @@ -36,8 +36,8 @@ ], "accepted_event_count": 21, "rejected_event_count": 2, - "registry_snapshot_ref": "platform-phase1-current-consumer.v1", - "tool_registry_snapshot_ref": "industry://internal/tool-registry/cross-group-ready", + "registry_snapshot_ref": "platform-phase2-registry-snapshot-current.v1", + "tool_registry_snapshot_ref": "industry://internal/2026-06-26/tool-registry-snapshot.v1/cross-group", "public_projection": "blocked_until_audit", "cost_and_degradation_summary": "ref-only aggregation; no final weekly output", "coverage_summary": "policy-finance runtime ready; academic formal dry-run ready; product ecosystem phase6 backlog ready" @@ -54,7 +54,7 @@ "carry_forward_entries": [], "expired_entry_ids": [], "fact_snapshot_ref": "blocked_until_closed_fact_snapshot", - "registry_snapshot_ref": "platform-phase1-current-consumer.v1" + "registry_snapshot_ref": "platform-phase2-registry-snapshot-current.v1" }, "policy_finance": { "status": "policy_finance_runtime_ready", @@ -612,8 +612,8 @@ "claim_evidence_link_batch_ref": "industry://internal/2026-06-26/industry-claim-evidence-link.v1/cross-group", "normalized_event_batch_ref": "industry://internal/2026-06-26/daily-industry-evidence-pack.v2/normalized-ref-index", "registry_review_result_refs": [ - "platform-phase1-current-consumer.v1", - "industry://internal/tool-registry/cross-group-ready" + "platform-phase2-registry-snapshot-current.v1", + "industry://internal/2026-06-26/tool-registry-snapshot.v1/cross-group" ], "supporting_event_ids": [ "evt-51541b7359b8", @@ -759,8 +759,8 @@ "merge_audit_ref": "industry://internal/2026-06-26/industry-merge-audit.v1/not-materialized", "fact_resolution_audit_ref": "fact-resolution-audit-2026-06-26", "registry_review_result_refs": [ - "platform-phase1-current-consumer.v1", - "industry://internal/tool-registry/cross-group-ready" + "platform-phase2-registry-snapshot-current.v1", + "industry://internal/2026-06-26/tool-registry-snapshot.v1/cross-group" ], "audit_result_refs": [ "audit-result-2026-06-26" diff --git a/data/reports/latest.industry-runtime-summary.json b/data/reports/latest.industry-runtime-summary.json index 7471ba0..20c980f 100644 --- a/data/reports/latest.industry-runtime-summary.json +++ b/data/reports/latest.industry-runtime-summary.json @@ -1,10 +1,11 @@ { "artifact_kind": "industry_runtime_summary", - "date": "2026-06-13", - "generated_at": "2026-06-28T02:35:03+08:00", + "date": "2026-06-26", + "generated_at": "2026-06-29T21:03:24+08:00", "overall_status": "industry_runtime_contracts_ready", "platform_contract": { "fixture_id": "platform-phase1-current-consumer.v1", + "registry_snapshot_fixture_id": "platform-phase2-registry-snapshot-current.v1", "published_for": [ "finance-agent", "policy-agent", diff --git "a/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" "b/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" index 9456cfc..f3dc8e0 100644 --- "a/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" +++ "b/docs/specs/exec-plans/\345\221\250\350\266\213\345\212\277\345\210\244\346\226\255\346\211\247\350\241\214\350\256\241\345\210\222/\350\241\214\344\270\232\347\272\247Agent\350\266\213\345\212\277\345\210\244\346\226\255-\344\270\255\345\217\260\350\243\201\345\206\263\347\273\204-v0.1.exec-plan.md" @@ -3,7 +3,7 @@ ## 文档状态 - 版本:`v0.1` -- 当前状态:`In Progress`,截至 `2026-06-29` 已推进到 `Phase 5 weekly artifacts ready / ready_for_publication`;三组输入已被中台接收,`reject_list=[]`,closed fact snapshot、claim builder、counter-evidence audit、decision context、tier decision input 与 weekly packaging 均已 ready;最近 7 日 `DailyIndustryEvidencePack.v2` refs 已可被本地中台消费,`publication_readiness_status=ready`;`coverage_vs_tier_case` / `counter_override_case` 与 `DecisionDiffAudit` 已冻结并进入 Phase 6 ready 状态。 +- 当前状态:`Completed`,截至 `2026-06-29` 已推进到 `Phase 5 weekly artifacts ready / ready_for_publication`;三组输入已被中台接收,`reject_list=[]`,closed fact snapshot、claim builder、counter-evidence audit、decision context、tier decision input 与 weekly packaging 均已 ready;最近 7 日 `DailyIndustryEvidencePack.v2` refs 已可被本地中台消费,`publication_readiness_status=ready`;`coverage_vs_tier_case` / `counter_override_case` 与 `DecisionDiffAudit` 已冻结并进入 Phase 6 ready 状态;中台本地执行计划无剩余待办,外部发布/展示流程可直接承接已物化的 public projection。 - 上游总控: - `docs/specs/exec-plans/周趋势判断执行计划/行业级Agent趋势判断-v0.1.exec-plan.md` - 对应设计: @@ -33,7 +33,7 @@ | `Phase 1B` shared governance | `Completed` | `src/industry/platform/contracts/sharedGovernance.ts` 发布 Phase 1 profile / feedback payload 列表,验证 reason/state/profile 均存在。 | 无阻塞。A/B/C activation / budget / review 正式接线必须消费这里的 profile id。 | | `Phase 1C` dispatch / budget runtime base | `Completed` | `src/industry/platform/contracts/dispatchRuntime.ts`、`consumerFixtures.ts`;fixtures 覆盖 dispatch context、reservation、budget、async_only review gate。 | 无阻塞。命中 same-run 的 A/B/C 消息必须带 `dispatch_context_ref`、`scheduling_key`、stable claim key、admission ref、reservation refs。 | | `Phase 1C+` main coordinator 边界 | `Completed` | contract test 验证没有 `main-coordinator` 新 Agent,`src/types.ts` / `src/cli.ts` 不持有 coordinator 私有状态。 | 无阻塞。后续 scheduler / middleware 只能落在 contracts / registry,不能回写 weekly 热点文件。 | -| `Phase 2` registry snapshot 与 shared governance | `Partial` | 已新增 `src/industry/platform/registry/runtimeSnapshot.ts` 与 `src/__tests__/industry/platform/registry.test.ts`,冻结 runtime snapshot plane 与 governance review plane 不互相穿透;产品生态 dry-run 已发布 registry runtime snapshot;`consumeFinancePolicyHandoffForRuntime(...)` 已从政策金融 coverage refs 发布 runtime registry snapshots。 | 产品生态与政策金融的按组 snapshot 已完成;最终 weekly 仍需 closed fact snapshot / audit,不再等待政策金融补 runtime 基座。 | +| `Phase 2` registry snapshot 与 shared governance | `Completed for current Phase2 snapshot` | 新增 `fixtures/industry/platform/current-consumer/phase2-registry-snapshot.json`,冻结 `platform-phase2-registry-snapshot-current.v1`,覆盖 policy finance / academic / product ecosystem 三组 registry snapshot、tool registry snapshot、seed refs、authority refs;`src/industry/platform/registry/runtimeSnapshot.ts` 统一生成 runtime snapshot,继续隔离 runtime snapshot plane 与 governance review plane,`async_only` 走 `conservative_consumption`;产品生态、政策金融、学术 formal dry-run 的中台消费路径均已消费共享 refs,不再消费 `stub://industry/registry-snapshot/current`。 | 当前 Phase2 窄口子已闭合;Phase3-5 daily pack / rolling snapshot / runtime summary 已改用 Phase2 fixture refs。后续只在 A/B/C 提交新合法 refs 或 governance 争议升级时增量刷新 snapshot。 | | `Phase 3` normalization 与 fact snapshot | `Completed for current accepted inputs` | `src/industry/platform/normalization/financePolicyDryRun.ts` 已消费政策金融 current bundle 与 runtime refs;`src/industry/platform/normalization/academicDryRun.ts` 已消费学术 formal current bundle;`src/industry/platform/normalization/productEcosystemDryRun.ts` 已消费产品生态 formal bundle;`cross_group_integration_readiness` 已写出 ref-only `DailyIndustryEvidencePack.v2`、`RollingEvidenceWindowSnapshot.v1`、academic `normalization-feedback.v1`、cross-group replay/eval backlog、`closed_fact_snapshot_prep` 与覆盖政策金融、学术、产品生态 accepted events 的 `FactResolutionAudit`。 | 三组当前输入已收口,`reject_list=[]`;无须三组继续迭代,除非后续出现新的 normalization / schema / audit 失败反馈。 | | `Phase 4` claim-builder 与 audit | `Passed for current closed snapshot` | `cross_group_integration_readiness` 已 materialize `claim-candidate-batch.v1`、claim evidence links、`audit-request.v1`、`audit-result.v1` 与 `counter-evidence-audit.v1`;`blocking_claim_candidate_ids=[]`、`high_impact_unresolved_group_ids=[]`。 | 当前闭环无审计阻塞;继续保留 public output block,等待 tier 输入完整。 | | `Phase 5` tier decision 与 weekly 三层输出 | `Weekly artifacts ready / ready_for_publication` | `tier_profile_rules.status=ready`,`decision_context_artifact.status=ready`,`tier_decision_input.status=ready`,`weekly_packaging.status=ready`;`weekly_output_ready=true`,`blocked_until=ready_for_publication`,`next_platform_actions=[]`,internal / consumer / public 三层 artifacts 已分别写入 `data/industry/internal/.../weekly-industry-trend-section.v2/cross-group.json`、`data/industry/consumer/.../consumer-weekly-industry-view.v1/cross-group.json` 与 `data/industry/public/.../public-weekly-industry-projection.v1/cross-group.json`。 | 当前无需三组新增输入;中台本地无剩余待办,外部发布/展示渠道可直接消费已物化的 public projection。 | @@ -554,3 +554,4 @@ | 2026-06-29 | `pnpm exec vitest run src/__tests__/industry/platform/replay.test.ts` | `Passed` | 冻结平台自有 `coverage_vs_tier_case` / `counter_override_case` eval fixtures,并把 `DecisionDiffAudit` 推进为 `ready`;缺窗口场景继续 public blocked,窗口可用场景进入 weekly output ready。 | | 2026-06-29 | `pnpm exec tsx src/cli.ts cross-group-integration-readiness --date 2026-06-26` | `Passed` | 刷新 `data/reports/2026-06-26.cross-group-integration-readiness.json` 与 latest;`weekly_output_ready=true`、`blocked_until=ready_for_publication`,并写出 internal / consumer / public 三层 weekly artifacts。 | | 2026-06-29 | `pnpm exec vitest run src/__tests__/industry/platform` / `pnpm run typecheck` / `pnpm test` / `git diff --check` | `Passed` | 最终收口验证:中台平台测试 7 files / 62 tests passed,`tsc --noEmit` passed,全量测试 56 files / 297 tests passed,diff check 无空白错误;`crossGroupIntegrationReadiness.ts` 已拆出 `decisionDiffAudit.ts`,最大中台源码文件 1127 行。 | +| 2026-06-29 | `pnpm exec vitest run src/__tests__/industry/platform` / `pnpm exec vitest run src/__tests__/industry/agents/academic-agent/replay.test.ts src/__tests__/industry/agents/policy-agent/replay.test.ts` / `pnpm test` / `pnpm run typecheck` / `git diff --check` | `Passed` | Phase2 registry snapshot 收口验证:中台平台测试 7 files / 64 tests passed;领域组 delivery checksum 复测 2 files / 17 tests passed;全量测试 56 files / 299 tests passed;`tsc --noEmit` passed;diff check 无空白错误。 | diff --git a/fixtures/industry/agents/academic-agent/replay/phase1-delivery-checksums.json b/fixtures/industry/agents/academic-agent/replay/phase1-delivery-checksums.json index 91948f5..942f70a 100644 --- a/fixtures/industry/agents/academic-agent/replay/phase1-delivery-checksums.json +++ b/fixtures/industry/agents/academic-agent/replay/phase1-delivery-checksums.json @@ -44,7 +44,7 @@ }, { "path": "src/industry/platform/normalization/academicDryRun.ts", - "sha256": "a62603b3dea3de61ac8289ede944575797f11d6d502118dd01ed7a5dc45a6941" + "sha256": "1b36f02be5ad84094e34fc75c3d7aa578fc75d7fce083b2db48a48bde71f23a2" } ] } diff --git a/fixtures/industry/agents/policy-agent/replay/phase1-delivery-checksums.json b/fixtures/industry/agents/policy-agent/replay/phase1-delivery-checksums.json index dab7d3a..3a74651 100644 --- a/fixtures/industry/agents/policy-agent/replay/phase1-delivery-checksums.json +++ b/fixtures/industry/agents/policy-agent/replay/phase1-delivery-checksums.json @@ -52,7 +52,7 @@ }, { "path": "src/industry/platform/normalization/financePolicyDryRun.ts", - "sha256": "ed21a2ee25e7162250df31f1349361a1dcc0afe570e7b574241e81b2fad2a888" + "sha256": "2e8110a7cbc410488a32232d88bfe6f72633f71d18b1e37f21196b23e8b0b20d" }, { "path": "src/industry/platform/normalization/policyFinanceRuntimeReplay.ts", diff --git a/fixtures/industry/platform/current-consumer/phase2-registry-snapshot.json b/fixtures/industry/platform/current-consumer/phase2-registry-snapshot.json new file mode 100644 index 0000000..15cd6f2 --- /dev/null +++ b/fixtures/industry/platform/current-consumer/phase2-registry-snapshot.json @@ -0,0 +1,53 @@ +{ + "fixture_id": "platform-phase2-registry-snapshot-current.v1", + "schema_version": "platform-registry-snapshot-fixture.v1", + "published_for": ["policy_finance", "academic", "product_ecosystem"], + "review_availability": { + "manual_review_pool_slots": 2, + "same_run_review_mode": "async_only", + "reviewer_on_duty_count": 0, + "default_gate_action": "conservative_consumption" + }, + "groups": [ + { + "group_id": "policy_finance", + "registry_snapshot_ref": "industry://internal/2026-06-26/registry-snapshot.v1/policy-finance", + "tool_registry_snapshot_ref": "industry://internal/2026-06-26/tool-registry-snapshot.v1/policy-finance", + "seed_refs": [ + "data/industry-seeds/agents/finance-agent/source-catalog.json", + "data/industry-seeds/agents/policy-agent/regulatory-source-catalog.json", + "data/industry-seeds/agents/policy-agent/thinktank-source-catalog.json" + ], + "authority_refs": [ + "industry://internal/2026-06-26/source-authority-context.v1/policy-finance" + ] + }, + { + "group_id": "academic", + "registry_snapshot_ref": "industry://internal/2026-06-26/registry-snapshot.v1/academic", + "tool_registry_snapshot_ref": "industry://internal/2026-06-26/tool-registry-snapshot.v1/academic", + "seed_refs": [ + "data/industry-seeds/agents/academic-agent/paper.seeds.json", + "data/industry-seeds/agents/academic-agent/conference.seeds.json" + ], + "authority_refs": [ + "industry://internal/2026-06-26/source-authority-context.v1/academic" + ] + }, + { + "group_id": "product_ecosystem", + "registry_snapshot_ref": "industry://internal/2026-06-26/registry-snapshot.v1/product-ecosystem", + "tool_registry_snapshot_ref": "industry://internal/2026-06-26/tool-registry-snapshot.v1/product-ecosystem", + "seed_refs": [ + "data/industry-seeds/agents/product-oss-agent/product-platform-source-catalog.json", + "data/industry-seeds/agents/product-oss-agent/developer-studio-source-catalog.json", + "data/industry-seeds/agents/product-oss-agent/project-oss-source-catalog.json", + "data/industry-seeds/agents/community-news-agent/community-source-catalog.json", + "data/industry-seeds/agents/community-news-agent/news-narrative-source-catalog.json" + ], + "authority_refs": [ + "industry://internal/2026-06-26/source-authority-context.v1/product-ecosystem" + ] + } + ] +} diff --git a/schemas/industry/compatibility-matrix.json b/schemas/industry/compatibility-matrix.json index d6f1c75..99915c4 100644 --- a/schemas/industry/compatibility-matrix.json +++ b/schemas/industry/compatibility-matrix.json @@ -2,2135 +2,83 @@ "schema_version": "compatibility-matrix.v1", "status": "active", "entries": [ - { - "schema_id": "industry-signal-event.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "event_id", - "run_id", - "observed_at", - "axis", - "source", - "agent_relevance", - "evidence", - "responsibility_id", - "execution_context", - "audit" - ], - "conditionally_required_fields": [ - "fact_id", - "primary_responsibility_id", - "related_claim_ids", - "public_projection_artifact_ref" - ], - "ignorable_forward_compatible_fields": [ - "producer_ext" - ], - "producer_support": [ - "academic-agent", - "product-oss-agent", - "community-news-agent", - "finance-agent", - "policy-agent" - ], - "consumer_support": [ - "normalization-agent", - "audit-agent", - "trend-agent" - ] - }, - { - "schema_id": "industry-claim.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "claim_id", - "claim_family_key", - "generated_by_agent_id", - "proposed_claim_archetype", - "claim_cn" - ], - "conditionally_required_fields": [ - "candidate_group_id", - "input_event_ids", - "claim_builder_audit_refs" - ], - "ignorable_forward_compatible_fields": [ - "trend_ext" - ], - "producer_support": [ - "trend-agent" - ], - "consumer_support": [ - "audit-agent", - "trend-agent" - ] - }, - { - "schema_id": "industry-claim-ledger.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "claim_id", - "decision_tier", - "decision_confidence", - "coverage_audit_state", - "consumer_readiness_state", - "consumer_display_priority", - "claim_evidence_link_refs" - ], - "conditionally_required_fields": [ - "counter_evidence_audit_ref", - "fact_resolution_audit_ref", - "warning_badges" - ], - "ignorable_forward_compatible_fields": [ - "what_to_watch_next_week_cn" - ], - "producer_support": [ - "trend-agent" - ], - "consumer_support": [ - "weekly-packager", - "replay-runner", - "governance-console" - ] - }, - { - "schema_id": "industry-agent-message.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "message_id", - "run_id", - "checkpoint_stage", - "capability_class", - "kind", - "payload_schema", - "payload_ref", - "required_depends_on_message_ids", - "idempotency_key", - "status" - ], - "conditionally_required_fields": [ - "dispatch_context_ref", - "scheduling_key", - "claim_partition_id", - "candidate_group_id", - "claim_admission_assessment_ref", - "capacity_reservation_refs", - "public_projection_artifact_ref" - ], - "ignorable_forward_compatible_fields": [ - "redaction_policy_version", - "reason_code", - "correlation_id" - ], - "producer_support": [ - "all-actual-agents", - "main-coordinator-if-present" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "replay-runner" - ] - }, - { - "schema_id": "industry-agent-artifact-manifest.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "artifact_ref", - "artifact_kind", - "schema_version", - "produced_by_agent_id", - "input_artifact_refs", - "content_hash", - "storage_path" - ], - "conditionally_required_fields": [ - "source_message_id", - "public_projection_artifact_ref", - "redaction_policy_version" - ], - "ignorable_forward_compatible_fields": [ - "summary_cn" - ], - "producer_support": [ - "all-actual-agents", - "weekly-packager" - ], - "consumer_support": [ - "all-actual-agents", - "consumer-projection", - "replay-runner" - ] - }, - { - "schema_id": "decision-context-artifact.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "artifact_id", - "claim_candidate_batch_ref", - "audit_result_refs", - "registry_review_result_refs", - "tool_coverage_report_refs", - "agent_contribution_refs", - "claim_admission_assessment_ref" - ], - "conditionally_required_fields": [ - "capacity_reservation_refs", - "publication_snapshot_at" - ], - "ignorable_forward_compatible_fields": [ - "notes_cn" - ], - "producer_support": [ - "trend-agent", - "main-coordinator-if-present" - ], - "consumer_support": [ - "trend-agent" - ] - }, - { - "schema_id": "capacity-reservation.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "reservation_id", - "run_id", - "pool_id", - "requested_slots", - "granted_slots", - "estimated_cost_units", - "priority_class", - "reservation_state", - "decision_reason_codes", - "source_message_id" - ], - "conditionally_required_fields": [ - "claim_id", - "candidate_group_id", - "gap_scope", - "reserve_scope", - "actual_cost_units", - "granted_at", - "released_at", - "superseded_by_reservation_id" - ], - "ignorable_forward_compatible_fields": [], - "producer_support": [ - "allocator-role", - "main-coordinator-if-present" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "human-review-queue-item.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "review_id", - "review_priority", - "queue_state", - "blocking_output_scope", - "review_execution_mode", - "default_system_action", - "capacity_reservation_refs" - ], - "conditionally_required_fields": [ - "queue_pool_id", - "occupied_slots", - "reservation_binding_state", - "required_resolution_by" - ], - "ignorable_forward_compatible_fields": [ - "notes_cn" - ], - "producer_support": [ - "audit-agent", - "registry-agent", - "trend-agent", - "human-review-service" - ], - "consumer_support": [ - "weekly-packager", - "governance-console", - "replay-runner" - ] - }, - { - "schema_id": "same-run-dispatch-context.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "dispatch_context_id", - "run_id", - "scheduling_key", - "runtime_budget_profile_id", - "cost_budget_profile_id", - "critical_path_class", - "estimated_cost_units", - "claim_admission_assessment_ref", - "capacity_reservation_refs" - ], - "conditionally_required_fields": [ - "claim_partition_id", - "candidate_group_id", - "gap_scope" - ], - "ignorable_forward_compatible_fields": [], - "producer_support": [ - "allocator-role", - "main-coordinator-if-present" - ], - "consumer_support": [ - "queue-dispatcher", - "all-actual-agents" - ] - }, - { - "schema_id": "industry-trend-card.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "card_id", - "claim_id", - "claim_ledger_ref", - "decision_tier", - "decision_confidence", - "coverage_audit_state", - "internal_consumption_state", - "public_consumption_state", - "consumer_readiness_state", - "consumer_display_priority", - "evidence_matrix", - "warning_badges", - "source_trace_refs" - ], - "conditionally_required_fields": [ - "what_to_watch_next_week_cn", - "project_landing_samples" - ], - "ignorable_forward_compatible_fields": [ - "notes_cn" - ], - "producer_support": [ - "weekly-packager" - ], - "consumer_support": [ - "consumer-projection", - "public-projection", - "ops-console" - ] - }, - { - "schema_id": "weekly-industry-trend-section.v2", - "current_version": "2.0.0", - "must_read_fields": [ - "section_id", - "window_start", - "window_end", - "evidence_window_status", - "publication_readiness_status", - "governance_load_status", - "industry_window_status", - "run_snapshot", - "display_index", - "lineage_refs", - "run_budget_summary", - "ordering_basis" - ], - "conditionally_required_fields": [ - "consumer_view_ref", - "public_projection_ref" - ], - "ignorable_forward_compatible_fields": [ - "industry_summary_cn" - ], - "producer_support": [ - "weekly-packager" - ], - "consumer_support": [ - "consumer-projection", - "public-projection", - "replay-runner" - ] - }, - { - "schema_id": "public-weekly-industry-projection.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "projection_id", - "source_weekly_section_ref", - "generated_at", - "window_start", - "window_end", - "publication_snapshot_at", - "headline_core_card_ids", - "tier_visible_card_ids", - "redacted_card_ids", - "blocked_card_ids", - "public_card_projection_refs", - "blocked_reason_codes" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "notes_cn" - ], - "producer_support": [ - "weekly-packager" - ], - "consumer_support": [ - "public-surface" - ] - }, - { - "schema_id": "consumer-weekly-industry-view.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "view_id", - "source_weekly_section_ref", - "generated_at", - "window_start", - "window_end", - "view_scope", - "visible_card_ids", - "headline_card_ids", - "watchlist_card_ids", - "needs_review_card_ids", - "hidden_card_ids", - "ordering_basis", - "card_projection_refs" - ], - "conditionally_required_fields": [ - "blocked_reason_codes" - ], - "ignorable_forward_compatible_fields": [ - "notes_cn" - ], - "producer_support": [ - "weekly-packager" - ], - "consumer_support": [ - "internal-product", - "internal-api", - "ops-console" - ] - }, - { - "schema_id": "task-request.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "task_id", - "responsibility_id", - "axis_keys", - "registry_snapshot_ref", - "tool_registry_snapshot_ref", - "deadline_at", - "runtime_budget_profile_id", - "cost_budget_profile_id", - "critical_path_class", - "estimated_cost_units", - "input_artifact_refs", - "dispatch_context_ref" - ], - "conditionally_required_fields": [ - "capacity_reservation_refs", - "claim_admission_assessment_ref" - ], - "ignorable_forward_compatible_fields": [ - "task_ext" - ], - "producer_support": [ - "registry-agent", - "upstream-actual-agent" - ], - "consumer_support": [ - "search-agents", - "normalization-agent", - "audit-agent", - "trend-agent" - ] - }, - { - "schema_id": "task-result.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "task_id", - "request_message_id", - "status", - "output_artifact_refs", - "agent_contribution_ref", - "dispatch_context_ref", - "actual_latency_ms" - ], - "conditionally_required_fields": [ - "actual_cost_units", - "failure_notice_ref" - ], - "ignorable_forward_compatible_fields": [ - "task_ext" - ], - "producer_support": [ - "all-actual-agents" - ], - "consumer_support": [ - "task-requester", - "registry-agent" - ] - }, - { - "schema_id": "industry-signal-event-batch.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "events_ref", - "raw_tool_output_refs", - "agent_contribution_ref", - "tool_status_report_refs", - "responsibility_id", - "metric_input_completeness" - ], - "conditionally_required_fields": [ - "execution_context" - ], - "ignorable_forward_compatible_fields": [ - "producer_ext" - ], - "producer_support": [ - "search-agents" - ], - "consumer_support": [ - "normalization-agent" - ] - }, - { - "schema_id": "normalization-request.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "event_batch_refs", - "registry_snapshot_ref", - "dedupe_policy_version", - "runtime_budget_profile_id", - "cost_budget_profile_id", - "critical_path_class", - "estimated_cost_units" - ], - "conditionally_required_fields": [ - "dispatch_context_ref", - "capacity_reservation_refs" - ], - "ignorable_forward_compatible_fields": [ - "normalization_ext" - ], - "producer_support": [ - "registry-agent", - "trend-agent" - ], - "consumer_support": [ - "normalization-agent" - ] - }, - { - "schema_id": "normalization-result.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "normalized_event_batch_ref", - "rejected_event_batch_ref", - "merge_audit_ref", - "fact_resolution_audit_ref", - "used_event_batch_refs", - "actual_latency_ms" - ], - "conditionally_required_fields": [ - "actual_cost_units", - "capacity_reservation_refs" - ], - "ignorable_forward_compatible_fields": [ - "normalization_ext" - ], - "producer_support": [ - "normalization-agent" - ], - "consumer_support": [ - "registry-agent", - "audit-agent", - "trend-agent" - ] - }, - { - "schema_id": "evidence-gap-request.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "claim_id", - "requested_agent_id", - "claim_admission_assessment_ref", - "gap_scope", - "missing_axis_keys", - "gap_reason_code", - "expected_source_constraints", - "deadline_at", - "retry_count", - "runtime_budget_profile_id", - "cost_budget_profile_id", - "critical_path_class", - "estimated_cost_units", - "input_artifact_refs" - ], - "conditionally_required_fields": [ - "capacity_reservation_refs", - "dispatch_context_ref" - ], - "ignorable_forward_compatible_fields": [ - "gap_ext" - ], - "producer_support": [ - "trend-agent", - "audit-agent", - "registry-agent" - ], - "consumer_support": [ - "search-agents", - "registry-agent" - ] - }, - { - "schema_id": "evidence-gap-result.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "claim_id", - "request_message_id", - "gap_scope", - "status", - "output_artifact_refs", - "resolved_axis_keys", - "remaining_gap_reason_codes", - "actual_latency_ms" - ], - "conditionally_required_fields": [ - "actual_cost_units", - "capacity_reservation_refs" - ], - "ignorable_forward_compatible_fields": [ - "gap_ext" - ], - "producer_support": [ - "search-agents", - "registry-agent" - ], - "consumer_support": [ - "request-originator", - "trend-agent", - "audit-agent" - ] - }, - { - "schema_id": "registry-review-request.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "unknown_actor_refs", - "provisional_authority_refs", - "basis_event_ids", - "requested_action", - "runtime_budget_profile_id", - "cost_budget_profile_id", - "critical_path_class", - "estimated_cost_units" - ], - "conditionally_required_fields": [ - "dispatch_context_ref", - "capacity_reservation_refs" - ], - "ignorable_forward_compatible_fields": [ - "registry_ext" - ], - "producer_support": [ - "normalization-agent", - "audit-agent", - "search-agents" - ], - "consumer_support": [ - "registry-agent" - ] - }, - { - "schema_id": "registry-review-result.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "registry_review_ref", - "registry_snapshot_ref", - "approved_entity_ids", - "rejected_entity_ids", - "reason_codes", - "actual_latency_ms" - ], - "conditionally_required_fields": [ - "actual_cost_units", - "capacity_reservation_refs" - ], - "ignorable_forward_compatible_fields": [ - "registry_ext" - ], - "producer_support": [ - "registry-agent" - ], - "consumer_support": [ - "audit-agent", - "trend-agent" - ] - }, - { - "schema_id": "audit-request.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "claim_candidate_batch_ref", - "claim_evidence_link_batch_ref", - "normalized_event_batch_ref", - "registry_review_result_refs", - "supporting_event_ids", - "counter_event_ids", - "fact_resolution_audit_ref", - "claim_admission_assessment_ref", - "runtime_budget_profile_id", - "cost_budget_profile_id", - "critical_path_class", - "estimated_cost_units" - ], - "conditionally_required_fields": [ - "dispatch_context_ref", - "capacity_reservation_refs" - ], - "ignorable_forward_compatible_fields": [ - "audit_ext" - ], - "producer_support": [ - "trend-agent", - "registry-agent" - ], - "consumer_support": [ - "audit-agent" - ] - }, - { - "schema_id": "audit-result.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "counter_evidence_audit_ref", - "audited_claim_candidate_ids", - "blocking_claim_candidate_ids", - "downgrade_recommendations", - "high_impact_unresolved_group_ids", - "actual_latency_ms" - ], - "conditionally_required_fields": [ - "actual_cost_units", - "capacity_reservation_refs" - ], - "ignorable_forward_compatible_fields": [ - "audit_ext" - ], - "producer_support": [ - "audit-agent" - ], - "consumer_support": [ - "trend-agent" - ] - }, - { - "schema_id": "claim-candidate-batch.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "claim_candidate_batch_ref", - "claim_evidence_link_batch_ref", - "claim_builder_audit_refs", - "candidate_group_ids", - "input_event_ids", - "generated_claim_ids", - "deferred_event_ids", - "rejected_event_ids" - ], - "conditionally_required_fields": [ - "dispatch_context_ref", - "claim_admission_assessment_ref" - ], - "ignorable_forward_compatible_fields": [ - "trend_ext" - ], - "producer_support": [ - "trend-agent" - ], - "consumer_support": [ - "audit-agent", - "trend-agent" - ] - }, - { - "schema_id": "trend-decision-input.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "claim_candidate_batch_ref", - "claim_evidence_link_batch_ref", - "decision_context_artifact_ref", - "missing_context_reason_codes", - "project_weekly_artifact_refs" - ], - "conditionally_required_fields": [ - "capacity_reservation_refs", - "dispatch_context_ref" - ], - "ignorable_forward_compatible_fields": [ - "trend_ext" - ], - "producer_support": [ - "registry-agent", - "trend-agent" - ], - "consumer_support": [ - "trend-agent" - ] - }, - { - "schema_id": "failure-notice.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "reason_code", - "failure_scope", - "correlation_id", - "summary_cn" - ], - "conditionally_required_fields": [ - "dispatch_context_ref", - "capacity_reservation_refs" - ], - "ignorable_forward_compatible_fields": [ - "failure_ext" - ], - "producer_support": [ - "all-actual-agents", - "main-coordinator-if-present" - ], - "consumer_support": [ - "governance-console", - "weekly-packager", - "replay-runner" - ] - }, - { - "schema_id": "payload-registry.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "schema_version", - "run_id", - "window_start", - "window_end", - "source_message_id" - ], - "conditionally_required_fields": [ - "dispatch_context_ref", - "claim_admission_assessment_ref", - "capacity_reservation_refs", - "actual_cost_units" - ], - "ignorable_forward_compatible_fields": [ - "summary_cn" - ], - "producer_support": [ - "all-payload-producers" - ], - "consumer_support": [ - "all-payload-consumers" - ] - }, - { - "schema_id": "industry-claim-evidence-link.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "link_id", - "claim_id", - "event_id", - "axis", - "role", - "dependency_strength", - "materiality_class", - "is_tier_material", - "reason_codes" - ], - "conditionally_required_fields": [ - "replacement_group_id", - "materiality_reason_codes", - "derived_from_source_polarity_cue" - ], - "ignorable_forward_compatible_fields": [ - "reviewed_by_agent_ids" - ], - "producer_support": [ - "trend-agent" - ], - "consumer_support": [ - "audit-agent", - "trend-agent", - "weekly-packager" - ] - }, - { - "schema_id": "industry-merge-audit.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "merged_event_groups", - "fact_groups", - "source_chain_dedupe_groups", - "merge_resolution_notes", - "rejected_event_ids", - "rejected_reasons" - ], - "conditionally_required_fields": [ - "cross_axis_projection_groups", - "repeated_actor_groups", - "unresolved_conflicts" - ], - "ignorable_forward_compatible_fields": [], - "producer_support": [ - "normalization-agent" - ], - "consumer_support": [ - "audit-agent", - "trend-agent", - "replay-runner" - ] - }, - { - "schema_id": "counter-evidence-audit.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "audited_by_agent_id", - "audited_at", - "audit_mode", - "audit_priority", - "blocking_counter_evidence", - "counter_evidence_severity", - "blocking_scopes", - "counter_event_ids", - "decision_state" - ], - "conditionally_required_fields": [ - "supporting_event_ids_reviewed", - "reviewed_claim_evidence_link_ids", - "unchecked_supporting_event_ids", - "sampling_reason_codes", - "missing_axis_keys", - "source_bias_notes", - "conflict_groups", - "downgrade_recommendation", - "contested_by_agent_ids", - "escalation_reason_codes", - "unresolved_questions" - ], - "ignorable_forward_compatible_fields": [ - "adjudication_note_cn" - ], - "producer_support": [ - "audit-agent" - ], - "consumer_support": [ - "trend-agent", - "weekly-packager", - "governance-console", - "replay-runner" - ] - }, - { - "schema_id": "axis-evidence-summary.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "axis", - "axis_applicability_state", - "status", - "coverage_state", - "freshness_state", - "axis_score", - "score_formula_version", - "subscore_rubric_version", - "scoring_profile_id", - "tool_route_state", - "summary_cn" - ], - "conditionally_required_fields": [ - "supporting_event_ids", - "counter_event_ids", - "missing_reason_codes", - "leading_entities", - "source_tiers_present", - "degradation_reason_codes" - ], - "ignorable_forward_compatible_fields": [ - "authority_score", - "freshness_score", - "independence_score", - "primary_source_score", - "continuity_score", - "agent_relevance_score" - ], - "producer_support": [ - "trend-agent", - "weekly-packager" - ], - "consumer_support": [ - "trend-agent", - "weekly-packager", - "consumer-projection", - "replay-runner" - ] - }, - { - "schema_id": "axis-tool-coverage-report.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "axis", - "primary_tool_ids", - "secondary_toolset_ids", - "fallback_tool_ids", - "last_resort_tool_ids", - "eligible_tool_ids", - "selected_from_tool_ids", - "attempted_tool_ids", - "active_route_level", - "active_tool_ids", - "active_source_class", - "route_status", - "budget_status", - "degraded", - "degradation_reason_codes", - "registry_snapshot_ref", - "tool_registry_snapshot_ref" - ], - "conditionally_required_fields": [ - "selection_scorecard_version", - "selection_score_total", - "selection_score_breakdown", - "veto_reason_codes", - "selection_reason_codes", - "unavailable_state", - "candidate_ref_count", - "accepted_ref_count", - "citation_trace_rate", - "max_source_lag_days", - "evidence_event_ids", - "rejected_event_ids" - ], - "ignorable_forward_compatible_fields": [ - "last_resort_mode_kind", - "summary_cn" - ], - "producer_support": [ - "registry-agent", - "search-agents" - ], - "consumer_support": [ - "normalization-agent", - "trend-agent", - "weekly-packager", - "governance-console", - "replay-runner" - ] - }, - { - "schema_id": "claim-admission-assessment.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "assessment_id", - "run_id", - "claim_id", - "candidate_group_id", - "claim_family_key", - "projected_decision_tier", - "projected_consumer_readiness_state", - "projected_consumer_display_priority", - "priority_class", - "key_independent_confirmation_complete", - "estimated_runtime_minutes", - "estimated_cost_units", - "estimated_required_pool_ids", - "assessment_snapshot_cutoff_at", - "assessment_reason_codes", - "source_artifact_refs" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [], - "producer_support": [ - "trend-agent", - "main-coordinator-if-present" - ], - "consumer_support": [ - "queue-dispatcher", - "shared-pool-allocator", - "trend-agent", - "weekly-packager", - "replay-runner" - ] - }, - { - "schema_id": "fact-resolution-audit.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "audit_id", - "snapshot_id", - "event_fact_assignments", - "relation_edges", - "high_impact_unresolved_groups" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [], - "producer_support": [ - "normalization-agent" - ], - "consumer_support": [ - "trend-agent", - "audit-agent", - "weekly-packager", - "replay-runner" - ] - }, - { - "schema_id": "rolling-evidence-window-snapshot.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "snapshot_id", - "window_end", - "carry_forward_horizon_days", - "derived_from_daily_pack_refs", - "derived_from_claim_ledger_refs", - "carry_forward_entries", - "expired_entry_ids", - "fact_snapshot_ref", - "registry_snapshot_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [], - "producer_support": [ - "weekly-packager" - ], - "consumer_support": [ - "trend-agent", - "weekly-packager", - "replay-runner" - ] - }, - { - "schema_id": "daily-industry-evidence-pack.v2", - "current_version": "2.0.0", - "must_read_fields": [ - "schema_version", - "date", - "generated_at", - "run_id", - "window_start", - "window_end", - "source_message_ids", - "input_artifact_refs", - "normalized_event_batch_ref", - "rejected_event_batch_ref", - "agent_contributions", - "accepted_event_count", - "rejected_event_count", - "registry_snapshot_ref", - "tool_registry_snapshot_ref", - "public_projection", - "cost_and_degradation_summary", - "coverage_summary" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [], - "producer_support": [ - "normalization-agent", - "weekly-packager" - ], - "consumer_support": [ - "weekly-packager", - "replay-runner", - "governance-console" - ] - }, - { - "schema_id": "budget-arbitration-record.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "arbitration_id", - "run_id", - "scope_kind", - "scope_key", - "requested_budget_class", - "runtime_budget_profile_id", - "cost_budget_profile_id", - "estimated_cost_units", - "source_message_id", - "decision", - "reason_codes", - "settlement_snapshot_at" - ], - "conditionally_required_fields": [ - "claim_family_key", - "candidate_group_id", - "requested_pool_id", - "requested_slots", - "granted_slots", - "consumed_slots", - "actual_cost_units", - "reservation_ref", - "dispatch_context_ref", - "correlation_id", - "settles_previous_arbitration_id", - "superseded_by_arbitration_id" - ], - "ignorable_forward_compatible_fields": [], - "producer_support": [ - "allocator-role", - "main-coordinator-if-present", - "weekly-packager" - ], - "consumer_support": [ - "queue-dispatcher", - "shared-pool-allocator", - "weekly-packager", - "governance-console", - "replay-runner" - ] - }, - { - "schema_id": "industry-agent-contribution.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "actual_agent_id", - "responsibility_id", - "status", - "input_artifact_refs", - "output_artifact_refs" - ], - "conditionally_required_fields": [ - "failure_notice_ref", - "actual_latency_ms", - "actual_cost_units" - ], - "ignorable_forward_compatible_fields": [ - "summary_cn" - ], - "producer_support": [ - "all-actual-agents" - ], - "consumer_support": [ - "registry-agent", - "weekly-packager", - "replay-runner" - ] - }, - { - "schema_id": "daily-industry-evidence-pack-input.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "normalized_event_batch_refs", - "source_message_ids", - "coverage_refs", - "contribution_refs" - ], - "conditionally_required_fields": [ - "rejected_event_batch_refs" - ], - "ignorable_forward_compatible_fields": [ - "summary_cn" - ], - "producer_support": [ - "academic-agent", - "product-oss-agent", - "community-news-agent", - "finance-agent", - "policy-agent" - ], - "consumer_support": [ - "weekly-packager", - "normalization-agent" - ] - }, - { - "schema_id": "field-ownership-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "fact-resolution-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "freshness-decay-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "agent-relevance-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "SourceAuthorityContextProfile", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "tool-selection-scorecard.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "task-timeout-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "tool-call-timeout-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "axis-subscore-rubric.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "axis-runtime-budget-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "axis-activation-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "claim-archetype-axis-applicability.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "axis-status-threshold-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "claim-archetype-decision-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "independence-credit-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "canonical-fetch-stop-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "same-run-eligible-micro-task-matrix.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "micro-task-runtime-budget-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "micro-task-cost-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "rotation-budget-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "claim-admission-budget-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "claim-runtime-budget-profile.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "run-critical-path-budget.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "shared-capacity-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "run-total-budget-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "same-run-review-availability-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "runtime-sizing-assumptions.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "gap-scope-contract.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "message-key-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "runtime-concurrency-control-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "backlog-compaction-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "reopen-impact-matrix.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "headline-capacity-policy.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "profile_id", - "effective_from", - "rules_ref" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "profile_ext" - ], - "producer_support": [ - "industry-design-review" - ], - "consumer_support": [ - "all-actual-agents", - "queue-dispatcher", - "governance-console" - ] - }, - { - "schema_id": "normalization-feedback.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "fact_resolution_audit_ref", - "producer_agent_id", - "feedback_status" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "notice_ext", - "feedback_ext" - ], - "producer_support": [ - "normalization-agent", - "schema-validator", - "industry-design-review" - ], - "consumer_support": [ - "finance-agent", - "policy-agent", - "academic-agent", - "product-oss-agent", - "community-news-agent" - ] - }, - { - "schema_id": "schema-governance-notice.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "schema_id", - "compatibility_note_ref", - "reason_state_registry_ref", - "notice_status" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "notice_ext", - "feedback_ext" - ], - "producer_support": [ - "normalization-agent", - "schema-validator", - "industry-design-review" - ], - "consumer_support": [ - "finance-agent", - "policy-agent", - "academic-agent", - "product-oss-agent", - "community-news-agent" - ] - }, - { - "schema_id": "schema-change-note.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "note_id", - "change_background", - "affected_schema_ids", - "layer", - "producer_roles", - "consumer_roles", - "breaking_change", - "compatibility_impact", - "required_tests" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "notice_ext", - "feedback_ext" - ], - "producer_support": [ - "normalization-agent", - "schema-validator", - "industry-design-review" - ], - "consumer_support": [ - "finance-agent", - "policy-agent", - "academic-agent", - "product-oss-agent", - "community-news-agent" - ] - }, - { - "schema_id": "override-audit.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "override_id", - "run_id", - "source_artifact_ref", - "decision", - "reason_codes" - ], - "conditionally_required_fields": [], - "ignorable_forward_compatible_fields": [ - "override_ext" - ], - "producer_support": [ - "governance-console", - "industry-design-review" - ], - "consumer_support": [ - "weekly-packager", - "replay-runner", - "governance-console" - ] - }, - { - "schema_id": "tool-status-report.v1", - "current_version": "1.0.0", - "must_read_fields": [ - "payload_id", - "run_id", - "source_message_id", - "axis_tool_coverage_report_refs", - "tool_registry_snapshot_ref", - "active_route_level", - "active_source_class", - "budget_status_summary" - ], - "conditionally_required_fields": [ - "veto_reason_codes", - "degradation_reason_codes" - ], - "ignorable_forward_compatible_fields": [ - "tool_status_ext" - ], - "producer_support": [ - "registry-agent", - "search-agents" - ], - "consumer_support": [ - "normalization-agent", - "trend-agent", - "weekly-packager" - ] - } + {"schema_id":"industry-signal-event.v1","current_version":"1.0.0","must_read_fields":["event_id","run_id","observed_at","axis","source","agent_relevance","evidence","responsibility_id","execution_context","audit"],"conditionally_required_fields":["fact_id","primary_responsibility_id","related_claim_ids","public_projection_artifact_ref"],"ignorable_forward_compatible_fields":["producer_ext"],"producer_support":["academic-agent","product-oss-agent","community-news-agent","finance-agent","policy-agent"],"consumer_support":["normalization-agent","audit-agent","trend-agent"]}, + {"schema_id":"industry-claim.v1","current_version":"1.0.0","must_read_fields":["claim_id","claim_family_key","generated_by_agent_id","proposed_claim_archetype","claim_cn"],"conditionally_required_fields":["candidate_group_id","input_event_ids","claim_builder_audit_refs"],"ignorable_forward_compatible_fields":["trend_ext"],"producer_support":["trend-agent"],"consumer_support":["audit-agent","trend-agent"]}, + {"schema_id":"industry-claim-ledger.v1","current_version":"1.0.0","must_read_fields":["claim_id","decision_tier","decision_confidence","coverage_audit_state","consumer_readiness_state","consumer_display_priority","claim_evidence_link_refs"],"conditionally_required_fields":["counter_evidence_audit_ref","fact_resolution_audit_ref","warning_badges"],"ignorable_forward_compatible_fields":["what_to_watch_next_week_cn"],"producer_support":["trend-agent"],"consumer_support":["weekly-packager","replay-runner","governance-console"]}, + {"schema_id":"industry-agent-message.v1","current_version":"1.0.0","must_read_fields":["message_id","run_id","checkpoint_stage","capability_class","kind","payload_schema","payload_ref","required_depends_on_message_ids","idempotency_key","status"],"conditionally_required_fields":["dispatch_context_ref","scheduling_key","claim_partition_id","candidate_group_id","claim_admission_assessment_ref","capacity_reservation_refs","public_projection_artifact_ref"],"ignorable_forward_compatible_fields":["redaction_policy_version","reason_code","correlation_id"],"producer_support":["all-actual-agents","main-coordinator-if-present"],"consumer_support":["all-actual-agents","queue-dispatcher","replay-runner"]}, + {"schema_id":"industry-agent-artifact-manifest.v1","current_version":"1.0.0","must_read_fields":["artifact_ref","artifact_kind","schema_version","produced_by_agent_id","input_artifact_refs","content_hash","storage_path"],"conditionally_required_fields":["source_message_id","public_projection_artifact_ref","redaction_policy_version"],"ignorable_forward_compatible_fields":["summary_cn"],"producer_support":["all-actual-agents","weekly-packager"],"consumer_support":["all-actual-agents","consumer-projection","replay-runner"]}, + {"schema_id":"decision-context-artifact.v1","current_version":"1.0.0","must_read_fields":["artifact_id","claim_candidate_batch_ref","audit_result_refs","registry_review_result_refs","tool_coverage_report_refs","agent_contribution_refs","claim_admission_assessment_ref"],"conditionally_required_fields":["capacity_reservation_refs","publication_snapshot_at"],"ignorable_forward_compatible_fields":["notes_cn"],"producer_support":["trend-agent","main-coordinator-if-present"],"consumer_support":["trend-agent"]}, + {"schema_id":"capacity-reservation.v1","current_version":"1.0.0","must_read_fields":["reservation_id","run_id","pool_id","requested_slots","granted_slots","estimated_cost_units","priority_class","reservation_state","decision_reason_codes","source_message_id"],"conditionally_required_fields":["claim_id","candidate_group_id","gap_scope","reserve_scope","actual_cost_units","granted_at","released_at","superseded_by_reservation_id"],"ignorable_forward_compatible_fields":[],"producer_support":["allocator-role","main-coordinator-if-present"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"human-review-queue-item.v1","current_version":"1.0.0","must_read_fields":["review_id","review_priority","queue_state","blocking_output_scope","review_execution_mode","default_system_action","capacity_reservation_refs"],"conditionally_required_fields":["queue_pool_id","occupied_slots","reservation_binding_state","required_resolution_by"],"ignorable_forward_compatible_fields":["notes_cn"],"producer_support":["audit-agent","registry-agent","trend-agent","human-review-service"],"consumer_support":["weekly-packager","governance-console","replay-runner"]}, + {"schema_id":"same-run-dispatch-context.v1","current_version":"1.0.0","must_read_fields":["dispatch_context_id","run_id","scheduling_key","runtime_budget_profile_id","cost_budget_profile_id","critical_path_class","estimated_cost_units","claim_admission_assessment_ref","capacity_reservation_refs"],"conditionally_required_fields":["claim_partition_id","candidate_group_id","gap_scope"],"ignorable_forward_compatible_fields":[],"producer_support":["allocator-role","main-coordinator-if-present"],"consumer_support":["queue-dispatcher","all-actual-agents"]}, + {"schema_id":"industry-trend-card.v1","current_version":"1.0.0","must_read_fields":["card_id","claim_id","claim_ledger_ref","decision_tier","decision_confidence","coverage_audit_state","internal_consumption_state","public_consumption_state","consumer_readiness_state","consumer_display_priority","evidence_matrix","warning_badges","source_trace_refs"],"conditionally_required_fields":["what_to_watch_next_week_cn","project_landing_samples"],"ignorable_forward_compatible_fields":["notes_cn"],"producer_support":["weekly-packager"],"consumer_support":["consumer-projection","public-projection","ops-console"]}, + {"schema_id":"weekly-industry-trend-section.v2","current_version":"2.0.0","must_read_fields":["section_id","window_start","window_end","evidence_window_status","publication_readiness_status","governance_load_status","industry_window_status","run_snapshot","display_index","lineage_refs","run_budget_summary","ordering_basis"],"conditionally_required_fields":["consumer_view_ref","public_projection_ref"],"ignorable_forward_compatible_fields":["industry_summary_cn"],"producer_support":["weekly-packager"],"consumer_support":["consumer-projection","public-projection","replay-runner"]}, + {"schema_id":"public-weekly-industry-projection.v1","current_version":"1.0.0","must_read_fields":["projection_id","source_weekly_section_ref","generated_at","window_start","window_end","publication_snapshot_at","headline_core_card_ids","tier_visible_card_ids","redacted_card_ids","blocked_card_ids","public_card_projection_refs","blocked_reason_codes"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["notes_cn"],"producer_support":["weekly-packager"],"consumer_support":["public-surface"]}, + {"schema_id":"consumer-weekly-industry-view.v1","current_version":"1.0.0","must_read_fields":["view_id","source_weekly_section_ref","generated_at","window_start","window_end","view_scope","visible_card_ids","headline_card_ids","watchlist_card_ids","needs_review_card_ids","hidden_card_ids","ordering_basis","card_projection_refs"],"conditionally_required_fields":["blocked_reason_codes"],"ignorable_forward_compatible_fields":["notes_cn"],"producer_support":["weekly-packager"],"consumer_support":["internal-product","internal-api","ops-console"]}, + {"schema_id":"task-request.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","task_id","responsibility_id","axis_keys","registry_snapshot_ref","tool_registry_snapshot_ref","deadline_at","runtime_budget_profile_id","cost_budget_profile_id","critical_path_class","estimated_cost_units","input_artifact_refs","dispatch_context_ref"],"conditionally_required_fields":["capacity_reservation_refs","claim_admission_assessment_ref"],"ignorable_forward_compatible_fields":["task_ext"],"producer_support":["registry-agent","upstream-actual-agent"],"consumer_support":["search-agents","normalization-agent","audit-agent","trend-agent"]}, + {"schema_id":"task-result.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","task_id","request_message_id","status","output_artifact_refs","agent_contribution_ref","dispatch_context_ref","actual_latency_ms"],"conditionally_required_fields":["actual_cost_units","failure_notice_ref"],"ignorable_forward_compatible_fields":["task_ext"],"producer_support":["all-actual-agents"],"consumer_support":["task-requester","registry-agent"]}, + {"schema_id":"industry-signal-event-batch.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","events_ref","raw_tool_output_refs","agent_contribution_ref","tool_status_report_refs","responsibility_id","metric_input_completeness"],"conditionally_required_fields":["execution_context"],"ignorable_forward_compatible_fields":["producer_ext"],"producer_support":["search-agents"],"consumer_support":["normalization-agent"]}, + {"schema_id":"normalization-request.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","event_batch_refs","registry_snapshot_ref","dedupe_policy_version","runtime_budget_profile_id","cost_budget_profile_id","critical_path_class","estimated_cost_units"],"conditionally_required_fields":["dispatch_context_ref","capacity_reservation_refs"],"ignorable_forward_compatible_fields":["normalization_ext"],"producer_support":["registry-agent","trend-agent"],"consumer_support":["normalization-agent"]}, + {"schema_id":"normalization-result.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","normalized_event_batch_ref","rejected_event_batch_ref","merge_audit_ref","fact_resolution_audit_ref","used_event_batch_refs","actual_latency_ms"],"conditionally_required_fields":["actual_cost_units","capacity_reservation_refs"],"ignorable_forward_compatible_fields":["normalization_ext"],"producer_support":["normalization-agent"],"consumer_support":["registry-agent","audit-agent","trend-agent"]}, + {"schema_id":"evidence-gap-request.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","claim_id","requested_agent_id","claim_admission_assessment_ref","gap_scope","missing_axis_keys","gap_reason_code","expected_source_constraints","deadline_at","retry_count","runtime_budget_profile_id","cost_budget_profile_id","critical_path_class","estimated_cost_units","input_artifact_refs"],"conditionally_required_fields":["capacity_reservation_refs","dispatch_context_ref"],"ignorable_forward_compatible_fields":["gap_ext"],"producer_support":["trend-agent","audit-agent","registry-agent"],"consumer_support":["search-agents","registry-agent"]}, + {"schema_id":"evidence-gap-result.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","claim_id","request_message_id","gap_scope","status","output_artifact_refs","resolved_axis_keys","remaining_gap_reason_codes","actual_latency_ms"],"conditionally_required_fields":["actual_cost_units","capacity_reservation_refs"],"ignorable_forward_compatible_fields":["gap_ext"],"producer_support":["search-agents","registry-agent"],"consumer_support":["request-originator","trend-agent","audit-agent"]}, + {"schema_id":"registry-review-request.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","unknown_actor_refs","provisional_authority_refs","basis_event_ids","requested_action","runtime_budget_profile_id","cost_budget_profile_id","critical_path_class","estimated_cost_units"],"conditionally_required_fields":["dispatch_context_ref","capacity_reservation_refs"],"ignorable_forward_compatible_fields":["registry_ext"],"producer_support":["normalization-agent","audit-agent","search-agents"],"consumer_support":["registry-agent"]}, + {"schema_id":"registry-review-result.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","registry_review_ref","registry_snapshot_ref","approved_entity_ids","rejected_entity_ids","reason_codes","actual_latency_ms"],"conditionally_required_fields":["actual_cost_units","capacity_reservation_refs"],"ignorable_forward_compatible_fields":["registry_ext"],"producer_support":["registry-agent"],"consumer_support":["audit-agent","trend-agent"]}, + {"schema_id":"audit-request.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","claim_candidate_batch_ref","claim_evidence_link_batch_ref","normalized_event_batch_ref","registry_review_result_refs","supporting_event_ids","counter_event_ids","fact_resolution_audit_ref","claim_admission_assessment_ref","runtime_budget_profile_id","cost_budget_profile_id","critical_path_class","estimated_cost_units"],"conditionally_required_fields":["dispatch_context_ref","capacity_reservation_refs"],"ignorable_forward_compatible_fields":["audit_ext"],"producer_support":["trend-agent","registry-agent"],"consumer_support":["audit-agent"]}, + {"schema_id":"audit-result.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","counter_evidence_audit_ref","audited_claim_candidate_ids","blocking_claim_candidate_ids","downgrade_recommendations","high_impact_unresolved_group_ids","actual_latency_ms"],"conditionally_required_fields":["actual_cost_units","capacity_reservation_refs"],"ignorable_forward_compatible_fields":["audit_ext"],"producer_support":["audit-agent"],"consumer_support":["trend-agent"]}, + {"schema_id":"claim-candidate-batch.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","claim_candidate_batch_ref","claim_evidence_link_batch_ref","claim_builder_audit_refs","candidate_group_ids","input_event_ids","generated_claim_ids","deferred_event_ids","rejected_event_ids"],"conditionally_required_fields":["dispatch_context_ref","claim_admission_assessment_ref"],"ignorable_forward_compatible_fields":["trend_ext"],"producer_support":["trend-agent"],"consumer_support":["audit-agent","trend-agent"]}, + {"schema_id":"trend-decision-input.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","claim_candidate_batch_ref","claim_evidence_link_batch_ref","decision_context_artifact_ref","missing_context_reason_codes","project_weekly_artifact_refs"],"conditionally_required_fields":["capacity_reservation_refs","dispatch_context_ref"],"ignorable_forward_compatible_fields":["trend_ext"],"producer_support":["registry-agent","trend-agent"],"consumer_support":["trend-agent"]}, + {"schema_id":"failure-notice.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","reason_code","failure_scope","correlation_id","summary_cn"],"conditionally_required_fields":["dispatch_context_ref","capacity_reservation_refs"],"ignorable_forward_compatible_fields":["failure_ext"],"producer_support":["all-actual-agents","main-coordinator-if-present"],"consumer_support":["governance-console","weekly-packager","replay-runner"]}, + {"schema_id":"payload-registry.v1","current_version":"1.0.0","must_read_fields":["payload_id","schema_version","run_id","window_start","window_end","source_message_id"],"conditionally_required_fields":["dispatch_context_ref","claim_admission_assessment_ref","capacity_reservation_refs","actual_cost_units"],"ignorable_forward_compatible_fields":["summary_cn"],"producer_support":["all-payload-producers"],"consumer_support":["all-payload-consumers"]}, + {"schema_id":"industry-claim-evidence-link.v1","current_version":"1.0.0","must_read_fields":["link_id","claim_id","event_id","axis","role","dependency_strength","materiality_class","is_tier_material","reason_codes"],"conditionally_required_fields":["replacement_group_id","materiality_reason_codes","derived_from_source_polarity_cue"],"ignorable_forward_compatible_fields":["reviewed_by_agent_ids"],"producer_support":["trend-agent"],"consumer_support":["audit-agent","trend-agent","weekly-packager"]}, + {"schema_id":"industry-merge-audit.v1","current_version":"1.0.0","must_read_fields":["merged_event_groups","fact_groups","source_chain_dedupe_groups","merge_resolution_notes","rejected_event_ids","rejected_reasons"],"conditionally_required_fields":["cross_axis_projection_groups","repeated_actor_groups","unresolved_conflicts"],"ignorable_forward_compatible_fields":[],"producer_support":["normalization-agent"],"consumer_support":["audit-agent","trend-agent","replay-runner"]}, + {"schema_id":"counter-evidence-audit.v1","current_version":"1.0.0","must_read_fields":["audited_by_agent_id","audited_at","audit_mode","audit_priority","blocking_counter_evidence","counter_evidence_severity","blocking_scopes","counter_event_ids","decision_state"],"conditionally_required_fields":["supporting_event_ids_reviewed","reviewed_claim_evidence_link_ids","unchecked_supporting_event_ids","sampling_reason_codes","missing_axis_keys","source_bias_notes","conflict_groups","downgrade_recommendation","contested_by_agent_ids","escalation_reason_codes","unresolved_questions"],"ignorable_forward_compatible_fields":["adjudication_note_cn"],"producer_support":["audit-agent"],"consumer_support":["trend-agent","weekly-packager","governance-console","replay-runner"]}, + {"schema_id":"axis-evidence-summary.v1","current_version":"1.0.0","must_read_fields":["axis","axis_applicability_state","status","coverage_state","freshness_state","axis_score","score_formula_version","subscore_rubric_version","scoring_profile_id","tool_route_state","summary_cn"],"conditionally_required_fields":["supporting_event_ids","counter_event_ids","missing_reason_codes","leading_entities","source_tiers_present","degradation_reason_codes"],"ignorable_forward_compatible_fields":["authority_score","freshness_score","independence_score","primary_source_score","continuity_score","agent_relevance_score"],"producer_support":["trend-agent","weekly-packager"],"consumer_support":["trend-agent","weekly-packager","consumer-projection","replay-runner"]}, + {"schema_id":"axis-tool-coverage-report.v1","current_version":"1.0.0","must_read_fields":["axis","primary_tool_ids","secondary_toolset_ids","fallback_tool_ids","last_resort_tool_ids","eligible_tool_ids","selected_from_tool_ids","attempted_tool_ids","active_route_level","active_tool_ids","active_source_class","route_status","budget_status","degraded","degradation_reason_codes","registry_snapshot_ref","tool_registry_snapshot_ref"],"conditionally_required_fields":["selection_scorecard_version","selection_score_total","selection_score_breakdown","veto_reason_codes","selection_reason_codes","unavailable_state","candidate_ref_count","accepted_ref_count","citation_trace_rate","max_source_lag_days","evidence_event_ids","rejected_event_ids"],"ignorable_forward_compatible_fields":["last_resort_mode_kind","summary_cn"],"producer_support":["registry-agent","search-agents"],"consumer_support":["normalization-agent","trend-agent","weekly-packager","governance-console","replay-runner"]}, + {"schema_id":"claim-admission-assessment.v1","current_version":"1.0.0","must_read_fields":["assessment_id","run_id","claim_id","candidate_group_id","claim_family_key","projected_decision_tier","projected_consumer_readiness_state","projected_consumer_display_priority","priority_class","key_independent_confirmation_complete","estimated_runtime_minutes","estimated_cost_units","estimated_required_pool_ids","assessment_snapshot_cutoff_at","assessment_reason_codes","source_artifact_refs"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":[],"producer_support":["trend-agent","main-coordinator-if-present"],"consumer_support":["queue-dispatcher","shared-pool-allocator","trend-agent","weekly-packager","replay-runner"]}, + {"schema_id":"fact-resolution-audit.v1","current_version":"1.0.0","must_read_fields":["audit_id","snapshot_id","event_fact_assignments","relation_edges","high_impact_unresolved_groups"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":[],"producer_support":["normalization-agent"],"consumer_support":["trend-agent","audit-agent","weekly-packager","replay-runner"]}, + {"schema_id":"rolling-evidence-window-snapshot.v1","current_version":"1.0.0","must_read_fields":["snapshot_id","window_end","carry_forward_horizon_days","derived_from_daily_pack_refs","derived_from_claim_ledger_refs","carry_forward_entries","expired_entry_ids","fact_snapshot_ref","registry_snapshot_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":[],"producer_support":["weekly-packager"],"consumer_support":["trend-agent","weekly-packager","replay-runner"]}, + {"schema_id":"daily-industry-evidence-pack.v2","current_version":"2.0.0","must_read_fields":["schema_version","date","generated_at","run_id","window_start","window_end","source_message_ids","input_artifact_refs","normalized_event_batch_ref","rejected_event_batch_ref","agent_contributions","accepted_event_count","rejected_event_count","registry_snapshot_ref","tool_registry_snapshot_ref","public_projection","cost_and_degradation_summary","coverage_summary"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":[],"producer_support":["normalization-agent","weekly-packager"],"consumer_support":["weekly-packager","replay-runner","governance-console"]}, + {"schema_id":"budget-arbitration-record.v1","current_version":"1.0.0","must_read_fields":["arbitration_id","run_id","scope_kind","scope_key","requested_budget_class","runtime_budget_profile_id","cost_budget_profile_id","estimated_cost_units","source_message_id","decision","reason_codes","settlement_snapshot_at"],"conditionally_required_fields":["claim_family_key","candidate_group_id","requested_pool_id","requested_slots","granted_slots","consumed_slots","actual_cost_units","reservation_ref","dispatch_context_ref","correlation_id","settles_previous_arbitration_id","superseded_by_arbitration_id"],"ignorable_forward_compatible_fields":[],"producer_support":["allocator-role","main-coordinator-if-present","weekly-packager"],"consumer_support":["queue-dispatcher","shared-pool-allocator","weekly-packager","governance-console","replay-runner"]}, + {"schema_id":"industry-agent-contribution.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","actual_agent_id","responsibility_id","status","input_artifact_refs","output_artifact_refs"],"conditionally_required_fields":["failure_notice_ref","actual_latency_ms","actual_cost_units"],"ignorable_forward_compatible_fields":["summary_cn"],"producer_support":["all-actual-agents"],"consumer_support":["registry-agent","weekly-packager","replay-runner"]}, + {"schema_id":"daily-industry-evidence-pack-input.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","normalized_event_batch_refs","source_message_ids","coverage_refs","contribution_refs"],"conditionally_required_fields":["rejected_event_batch_refs"],"ignorable_forward_compatible_fields":["summary_cn"],"producer_support":["academic-agent","product-oss-agent","community-news-agent","finance-agent","policy-agent"],"consumer_support":["weekly-packager","normalization-agent"]}, + {"schema_id":"field-ownership-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"fact-resolution-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"freshness-decay-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"agent-relevance-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"SourceAuthorityContextProfile","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"tool-selection-scorecard.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"task-timeout-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"tool-call-timeout-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"axis-subscore-rubric.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"axis-runtime-budget-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"axis-activation-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"claim-archetype-axis-applicability.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"axis-status-threshold-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"claim-archetype-decision-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"independence-credit-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"canonical-fetch-stop-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"same-run-eligible-micro-task-matrix.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"micro-task-runtime-budget-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"micro-task-cost-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"rotation-budget-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"claim-admission-budget-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"claim-runtime-budget-profile.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"run-critical-path-budget.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"shared-capacity-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"run-total-budget-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"same-run-review-availability-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"runtime-sizing-assumptions.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"gap-scope-contract.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"message-key-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"runtime-concurrency-control-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"backlog-compaction-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"reopen-impact-matrix.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"headline-capacity-policy.v1","current_version":"1.0.0","must_read_fields":["profile_id","effective_from","rules_ref"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["profile_ext"],"producer_support":["industry-design-review"],"consumer_support":["all-actual-agents","queue-dispatcher","governance-console"]}, + {"schema_id":"normalization-feedback.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","fact_resolution_audit_ref","producer_agent_id","feedback_status"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["notice_ext","feedback_ext"],"producer_support":["normalization-agent","schema-validator","industry-design-review"],"consumer_support":["finance-agent","policy-agent","academic-agent","product-oss-agent","community-news-agent"]}, + {"schema_id":"schema-governance-notice.v1","current_version":"1.0.0","must_read_fields":["payload_id","schema_id","compatibility_note_ref","reason_state_registry_ref","notice_status"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["notice_ext","feedback_ext"],"producer_support":["normalization-agent","schema-validator","industry-design-review"],"consumer_support":["finance-agent","policy-agent","academic-agent","product-oss-agent","community-news-agent"]}, + {"schema_id":"schema-change-note.v1","current_version":"1.0.0","must_read_fields":["note_id","change_background","affected_schema_ids","layer","producer_roles","consumer_roles","breaking_change","compatibility_impact","required_tests"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["notice_ext","feedback_ext"],"producer_support":["normalization-agent","schema-validator","industry-design-review"],"consumer_support":["finance-agent","policy-agent","academic-agent","product-oss-agent","community-news-agent"]}, + {"schema_id":"override-audit.v1","current_version":"1.0.0","must_read_fields":["override_id","run_id","source_artifact_ref","decision","reason_codes"],"conditionally_required_fields":[],"ignorable_forward_compatible_fields":["override_ext"],"producer_support":["governance-console","industry-design-review"],"consumer_support":["weekly-packager","replay-runner","governance-console"]}, + {"schema_id":"tool-status-report.v1","current_version":"1.0.0","must_read_fields":["payload_id","run_id","source_message_id","axis_tool_coverage_report_refs","tool_registry_snapshot_ref","active_route_level","active_source_class","budget_status_summary"],"conditionally_required_fields":["veto_reason_codes","degradation_reason_codes"],"ignorable_forward_compatible_fields":["tool_status_ext"],"producer_support":["registry-agent","search-agents"],"consumer_support":["normalization-agent","trend-agent","weekly-packager"]} ] } diff --git a/src/__tests__/industry/platform/contract.test.ts b/src/__tests__/industry/platform/contract.test.ts index 3766497..d70ae3a 100644 --- a/src/__tests__/industry/platform/contract.test.ts +++ b/src/__tests__/industry/platform/contract.test.ts @@ -35,6 +35,7 @@ import { validateSameRunConsumerRefs, } from "../../../industry/platform/contracts/consumerFixtures.ts"; import { buildProductEcosystemHandoff } from "../../../industry/agents/community-news-agent/handoff.ts"; +import { getPlatformRegistrySnapshotGroup } from "../../../industry/platform/registry/runtimeSnapshot.ts"; describe("industry platform contracts", () => { function buildAcademicPrepReplayBundle() { @@ -99,6 +100,38 @@ describe("industry platform contracts", () => { ).toBe(true); }); + it("keeps platform completion status and governance files within frozen acceptance constraints", () => { + const root = process.cwd(); + const execPlan = fs.readFileSync( + path.join( + root, + "docs/specs/exec-plans/周趋势判断执行计划/行业级Agent趋势判断-中台裁决组-v0.1.exec-plan.md", + ), + "utf-8", + ); + const constrainedRoots = [ + "schemas/industry", + "src/industry/platform", + "src/__tests__/industry/platform", + "fixtures/industry/platform", + ]; + const oversizedFiles: Array<{ relativePath: string; lineCount: number }> = []; + + expect(execPlan).toContain("当前状态:`Completed`"); + expect(execPlan).not.toContain("当前状态:`In Progress`"); + + for (const constrainedRoot of constrainedRoots) { + collectFiles(path.join(root, constrainedRoot)).forEach((filePath) => { + const lineCount = fs.readFileSync(filePath, "utf-8").split(/\r?\n/).length; + if (lineCount >= 2000) { + oversizedFiles.push({ relativePath: path.relative(root, filePath), lineCount }); + } + }); + } + + expect(oversizedFiles).toEqual([]); + }); + it("rejects informal payload names before other groups build producer payloads", () => { const registry = loadIndustrySchemaRegistry(); const payloadSchemaIds = getPayloadSchemaIds(registry); @@ -651,6 +684,24 @@ describe("industry platform contracts", () => { reasonCode: "lineage_failed", }); }); + + it("uses the shared Phase 2 registry snapshot refs in academic coverage reports", () => { + const bundle = buildAcademicPrepReplayBundle(); + const academicSnapshot = getPlatformRegistrySnapshotGroup("academic"); + + expect(bundle.coverage_reports.map((report) => report.payload.registry_snapshot_ref)).toEqual([ + academicSnapshot.registry_snapshot_ref, + academicSnapshot.registry_snapshot_ref, + ]); + expect(bundle.coverage_reports.map((report) => report.payload.tool_registry_snapshot_ref)).toEqual([ + academicSnapshot.tool_registry_snapshot_ref, + academicSnapshot.tool_registry_snapshot_ref, + ]); + for (const report of bundle.coverage_reports) { + expect(report.payload.registry_snapshot_ref).not.toContain("stub://"); + expect(report.payload.tool_registry_snapshot_ref).not.toContain("stub://"); + } + }); }); describe("academic formal handoff gate", () => { @@ -900,3 +951,11 @@ function buildProductEcosystemContractInput() { }, }; } + +function collectFiles(root: string): string[] { + const entries = fs.readdirSync(root, { withFileTypes: true }); + return entries.flatMap((entry) => { + const fullPath = path.join(root, entry.name); + return entry.isDirectory() ? collectFiles(fullPath) : [fullPath]; + }); +} diff --git a/src/__tests__/industry/platform/normalization.test.ts b/src/__tests__/industry/platform/normalization.test.ts index a0737c4..f16fc0f 100644 --- a/src/__tests__/industry/platform/normalization.test.ts +++ b/src/__tests__/industry/platform/normalization.test.ts @@ -21,6 +21,7 @@ import { } from "../../../industry/platform/normalization/academicDryRun.ts"; import type { AcademicFormalHandoffBundle } from "../../../industry/platform/contracts/academicHandoff.ts"; import type { FinancePolicyHandoffBundle } from "../../../industry/platform/contracts/financePolicyHandoff.ts"; +import { getPlatformRegistrySnapshotGroup } from "../../../industry/platform/registry/runtimeSnapshot.ts"; const currentBundle = currentBundleFixture as FinancePolicyHandoffBundle; const negativeBundle = negativeBundleFixture as FinancePolicyHandoffBundle; @@ -80,13 +81,13 @@ describe("industry platform normalization dry-run", () => { it("materializes the product ecosystem formal bundle for dry-run feedback", () => { const { bundle } = buildProductEcosystemFormalHandoff(buildProductEcosystemInput()); + const productSnapshot = getPlatformRegistrySnapshotGroup("product_ecosystem"); const result = consumeProductEcosystemHandoffForDryRun({ bundle, - registrySnapshotRef: "industry://internal/2026-06-26/registry-snapshot.v1/product-ecosystem", - toolRegistrySnapshotRef: "industry://internal/2026-06-26/tool-registry-snapshot.v1/product-ecosystem", - authorityRefs: ["industry://internal/2026-06-26/source-authority-context.v1/product-ecosystem"], - manualReviewPoolSlots: 2, - reviewAvailability: { same_run_review_mode: "async_only", reviewer_on_duty_count: 0 }, + registrySnapshotRef: productSnapshot.registry_snapshot_ref, + toolRegistrySnapshotRef: productSnapshot.tool_registry_snapshot_ref, + seedRefs: productSnapshot.seed_refs, + authorityRefs: productSnapshot.authority_refs, }); expect(result).toMatchObject({ @@ -107,9 +108,10 @@ describe("industry platform normalization dry-run", () => { runtimeSnapshot: { ok: true, status: "runtime_snapshot_published", - registrySnapshotRef: "industry://internal/2026-06-26/registry-snapshot.v1/product-ecosystem", - toolRegistrySnapshotRef: "industry://internal/2026-06-26/tool-registry-snapshot.v1/product-ecosystem", + registrySnapshotRef: productSnapshot.registry_snapshot_ref, + toolRegistrySnapshotRef: productSnapshot.tool_registry_snapshot_ref, sameRunReviewAvailable: false, + reviewGateAction: "conservative_consumption", }, }); if (result.ok) { @@ -120,6 +122,14 @@ describe("industry platform normalization dry-run", () => { expect(result.governanceProfileIds).toEqual(["axis-runtime-budget-profile.v1/product_ecosystem"]); expect(result.feedbackPayload.payload_id).toMatch(/^feedback-/); expect(result.feedbackPayload.fact_resolution_audit_ref).toMatch(/^industry:\/\/internal\/2026-06-26\/fact-resolution-audit.v1\//); + expect(result.runtimeSnapshot?.ok).toBe(true); + if (result.runtimeSnapshot?.ok) { + expect(result.runtimeSnapshot.runtimeInputRefs).toEqual([ + ...result.coverageRefs, + ...productSnapshot.seed_refs, + ...productSnapshot.authority_refs, + ]); + } } }); @@ -146,6 +156,7 @@ describe("industry platform normalization dry-run", () => { }); it("promotes policy-finance handoff through the runtime path after governance profiles resolve", () => { + const policyFinanceSnapshot = getPlatformRegistrySnapshotGroup("policy_finance"); const result = consumeFinancePolicyHandoffForRuntime({ bundle: currentBundle, dispatchContext: sameRunCurrentFixture.dispatch_context, @@ -181,9 +192,11 @@ describe("industry platform normalization dry-run", () => { toolRegistrySnapshotRef: "registry://industry/tool-catalog/finance/v1", runtimeInputRefs: [ currentCoverageRefs[0], - "registry://industry/source-authority/finance/v1", + ...policyFinanceSnapshot.seed_refs, + ...policyFinanceSnapshot.authority_refs, ], sameRunReviewAvailable: false, + reviewGateAction: "conservative_consumption", }, { ok: true, @@ -192,9 +205,11 @@ describe("industry platform normalization dry-run", () => { toolRegistrySnapshotRef: "registry://industry/tool-catalog/policy/v1", runtimeInputRefs: [ currentCoverageRefs[1], - "registry://industry/source-authority/policy/v1", + ...policyFinanceSnapshot.seed_refs, + ...policyFinanceSnapshot.authority_refs, ], sameRunReviewAvailable: false, + reviewGateAction: "conservative_consumption", }, { ok: true, @@ -203,9 +218,11 @@ describe("industry platform normalization dry-run", () => { toolRegistrySnapshotRef: "registry://industry/tool-catalog/thinktank/v1", runtimeInputRefs: [ currentCoverageRefs[2], - "registry://industry/source-authority/thinktank/v1", + ...policyFinanceSnapshot.seed_refs, + ...policyFinanceSnapshot.authority_refs, ], sameRunReviewAvailable: false, + reviewGateAction: "conservative_consumption", }, ], }); @@ -314,6 +331,7 @@ describe("industry platform normalization dry-run", () => { }); it("materializes academic formal handoff for normalization dry-run once academic artifacts arrive", () => { + const academicSnapshot = getPlatformRegistrySnapshotGroup("academic"); const result = consumeAcademicHandoffForDryRun({ bundle: buildAcademicFormalBundle() }); expect(result).toMatchObject({ @@ -334,6 +352,21 @@ describe("industry platform normalization dry-run", () => { expect(result.normalizedEventBatchRefs).toHaveLength(2); expect(result.coverageRefs).toHaveLength(2); expect(result.contributionRefs).toHaveLength(2); + expect(result.runtimeSnapshot).toMatchObject({ + ok: true, + status: "runtime_snapshot_published", + registrySnapshotRef: academicSnapshot.registry_snapshot_ref, + toolRegistrySnapshotRef: academicSnapshot.tool_registry_snapshot_ref, + sameRunReviewAvailable: false, + reviewGateAction: "conservative_consumption", + }); + if (result.runtimeSnapshot.ok) { + expect(result.runtimeSnapshot.runtimeInputRefs).toEqual([ + ...result.coverageRefs, + ...academicSnapshot.seed_refs, + ...academicSnapshot.authority_refs, + ]); + } } }); @@ -349,6 +382,7 @@ describe("industry platform normalization dry-run", () => { overall_status: "industry_runtime_contracts_ready", platform_contract: { fixture_id: "platform-phase1-current-consumer.v1", + registry_snapshot_fixture_id: "platform-phase2-registry-snapshot-current.v1", shared_governance_published: true, shared_governance_profile_count: 33, handoff_payload_schema_count: 4, diff --git a/src/__tests__/industry/platform/registry.test.ts b/src/__tests__/industry/platform/registry.test.ts index 0470c26..9fed681 100644 --- a/src/__tests__/industry/platform/registry.test.ts +++ b/src/__tests__/industry/platform/registry.test.ts @@ -1,6 +1,9 @@ import { describe, expect, it } from "vitest"; import { + buildRuntimeRegistrySnapshotFromFixture, classifyGovernanceReview, + getPlatformRegistrySnapshotGroup, + loadPlatformRegistrySnapshotFixture, publishRuntimeRegistrySnapshot, } from "../../../industry/platform/registry/runtimeSnapshot.ts"; @@ -25,6 +28,7 @@ describe("industry platform registry snapshot", () => { "industry://internal/2026-06-26/source-authority-context.v1/source-001", ], sameRunReviewAvailable: false, + reviewGateAction: "conservative_consumption", }); expect( @@ -43,6 +47,43 @@ describe("industry platform registry snapshot", () => { }); }); + it("publishes a shared Phase 2 registry snapshot fixture with seed, tool, and authority refs", () => { + const fixture = loadPlatformRegistrySnapshotFixture(); + const academic = getPlatformRegistrySnapshotGroup("academic"); + + expect(fixture.fixture_id).toBe("platform-phase2-registry-snapshot-current.v1"); + expect(fixture.published_for).toEqual(["policy_finance", "academic", "product_ecosystem"]); + expect(academic.registry_snapshot_ref).toBe("industry://internal/2026-06-26/registry-snapshot.v1/academic"); + expect(academic.tool_registry_snapshot_ref).toBe("industry://internal/2026-06-26/tool-registry-snapshot.v1/academic"); + expect(academic.seed_refs).toEqual([ + "data/industry-seeds/agents/academic-agent/paper.seeds.json", + "data/industry-seeds/agents/academic-agent/conference.seeds.json", + ]); + expect(academic.authority_refs).toEqual([ + "industry://internal/2026-06-26/source-authority-context.v1/academic", + ]); + + const snapshot = buildRuntimeRegistrySnapshotFromFixture({ + groupId: "academic", + toolCoverageRefs: ["industry://internal/2026-06-26/axis-tool-coverage-report.v1/academic-coverage"], + }); + + expect(snapshot).toMatchObject({ + ok: true, + status: "runtime_snapshot_published", + registrySnapshotRef: academic.registry_snapshot_ref, + toolRegistrySnapshotRef: academic.tool_registry_snapshot_ref, + reviewGateAction: "conservative_consumption", + }); + if (snapshot.ok) { + expect(snapshot.runtimeInputRefs).toEqual([ + "industry://internal/2026-06-26/axis-tool-coverage-report.v1/academic-coverage", + ...academic.seed_refs, + ...academic.authority_refs, + ]); + } + }); + it("keeps long-tail governance review out of same-run blocking", () => { expect( classifyGovernanceReview({ diff --git a/src/__tests__/industry/platform/replay.test.ts b/src/__tests__/industry/platform/replay.test.ts index 723a9b2..22156a2 100644 --- a/src/__tests__/industry/platform/replay.test.ts +++ b/src/__tests__/industry/platform/replay.test.ts @@ -126,6 +126,13 @@ describe("industry platform Phase 6 replay assembly", () => { blocked_until: "public_projection_after_evidence_window_recovery", daily_pack_v2_ready: true, rolling_snapshot_ready: true, + daily_pack_v2: { + registry_snapshot_ref: "platform-phase2-registry-snapshot-current.v1", + tool_registry_snapshot_ref: "industry://internal/2026-06-26/tool-registry-snapshot.v1/cross-group", + }, + rolling_snapshot: { + registry_snapshot_ref: "platform-phase2-registry-snapshot-current.v1", + }, policy_finance: { status: "policy_finance_runtime_ready", candidate_pool_ready: true, @@ -507,6 +514,8 @@ describe("industry platform Phase 6 replay assembly", () => { ).toMatchObject({ schema_version: "daily-industry-evidence-pack.v2", date: "2026-06-26", + registry_snapshot_ref: "platform-phase2-registry-snapshot-current.v1", + tool_registry_snapshot_ref: "industry://internal/2026-06-26/tool-registry-snapshot.v1/cross-group", }); expect( JSON.parse( diff --git a/src/industry/agents/academic-agent/coverageReport.ts b/src/industry/agents/academic-agent/coverageReport.ts index 0c7c973..e07c9fc 100644 --- a/src/industry/agents/academic-agent/coverageReport.ts +++ b/src/industry/agents/academic-agent/coverageReport.ts @@ -1,6 +1,7 @@ import { conferenceSourceCatalog } from "./conferenceSourceCatalog.ts"; import { paperSourceCatalog } from "./paperSourceCatalog.ts"; import type { AxisToolCoverageReport, IndustryEvidenceAxisKey, IndustrySignalEvent } from "./types.ts"; +import { getPlatformRegistrySnapshotGroup } from "../../platform/registry/runtimeSnapshot.ts"; function toolIdsForAxis(axis: IndustryEvidenceAxisKey): string[] { const catalog = axis === "research_paper" ? Object.values(paperSourceCatalog) : Object.values(conferenceSourceCatalog); @@ -11,6 +12,7 @@ export function buildCoverageReport( axis: IndustryEvidenceAxisKey, events: IndustrySignalEvent[], ): AxisToolCoverageReport { + const phase2Snapshot = getPlatformRegistrySnapshotGroup("academic"); const axisEvents = events.filter((event) => event.axis === axis); const accepted = axisEvents.filter((event) => event.audit.bucket === "accepted"); const rejected = axisEvents.filter((event) => event.audit.bucket === "rejected"); @@ -43,8 +45,8 @@ export function buildCoverageReport( citation_trace_rate: Number(citationTraceRate.toFixed(2)), evidence_event_ids: accepted.map((event) => event.event_id), rejected_event_ids: rejected.map((event) => event.event_id), - registry_snapshot_ref: "stub://industry/registry-snapshot/current", - tool_registry_snapshot_ref: "stub://industry/tool-registry/current", + registry_snapshot_ref: phase2Snapshot.registry_snapshot_ref, + tool_registry_snapshot_ref: phase2Snapshot.tool_registry_snapshot_ref, summary_cn: axis === "research_paper" ? "论文轴已绑定一手学术源。" : "会议轴已绑定官方 accepted/proceedings/challenge 源。", }; } diff --git a/src/industry/platform/audit/crossGroupIntegrationReadiness.ts b/src/industry/platform/audit/crossGroupIntegrationReadiness.ts index 971551a..380bcc6 100644 --- a/src/industry/platform/audit/crossGroupIntegrationReadiness.ts +++ b/src/industry/platform/audit/crossGroupIntegrationReadiness.ts @@ -6,6 +6,7 @@ import type { FinancePolicyHandoffBundle } from "../contracts/financePolicyHando import { buildProductEcosystemFormalHandoff } from "../../agents/community-news-agent/formalHandoff.ts"; import { consumeAcademicHandoffForDryRun } from "../normalization/academicDryRun.ts"; import { buildIndustryRuntimeSummaryArtifact, buildProductEcosystemInput } from "../normalization/industryRuntimeSummary.ts"; +import { loadPlatformRegistrySnapshotFixture } from "../registry/runtimeSnapshot.ts"; import { assembleProductEcosystemPhase6Inputs, type ProductEcosystemPhase6AssemblyResult, @@ -638,6 +639,7 @@ function buildDailyPackV2( runtimeSummary: ReturnType, academic: ReturnType, ): CrossGroupIntegrationReadiness["daily_pack_v2"] { + const phase2RegistrySnapshot = loadPlatformRegistrySnapshotFixture(); const academicRefs = academic.ok ? [ ...academic.normalizedEventBatchRefs, @@ -664,8 +666,8 @@ function buildDailyPackV2( agent_contributions: academic.ok ? academic.contributionRefs : [], accepted_event_count: runtimeSummary.policy_finance.runtime_consumed_same_run_messages + (academic.ok ? academic.normalizedEventBatchRefs.length : 0), rejected_event_count: academic.ok ? academic.rejectedEventBatchRefs.length : 0, - registry_snapshot_ref: runtimeSummary.platform_contract.fixture_id, - tool_registry_snapshot_ref: "industry://internal/tool-registry/cross-group-ready", + registry_snapshot_ref: phase2RegistrySnapshot.fixture_id, + tool_registry_snapshot_ref: `industry://internal/${date}/tool-registry-snapshot.v1/cross-group`, public_projection: "blocked_until_audit", cost_and_degradation_summary: "ref-only aggregation; no final weekly output", coverage_summary: "policy-finance runtime ready; academic formal dry-run ready; product ecosystem phase6 backlog ready", diff --git a/src/industry/platform/normalization/academicDryRun.ts b/src/industry/platform/normalization/academicDryRun.ts index e75d1cc..404c249 100644 --- a/src/industry/platform/normalization/academicDryRun.ts +++ b/src/industry/platform/normalization/academicDryRun.ts @@ -5,6 +5,7 @@ import { type AcademicFormalHandoffBundle, } from "../contracts/academicHandoff.ts"; import { loadIndustrySchemaRegistry, type IndustrySchemaRegistry } from "../contracts/schemaRegistry.ts"; +import { buildRuntimeRegistrySnapshotFromFixture } from "../registry/runtimeSnapshot.ts"; type RecordLike = Record; type ReadyFeedbackPayload = { @@ -65,6 +66,7 @@ export type AcademicDryRunResult = rejectedEventBatchRefs: string[]; coverageRefs: string[]; contributionRefs: string[]; + runtimeSnapshot: ReturnType; feedbackPayloadSchema: "normalization-feedback.v1"; feedbackPayload: ReadyFeedbackPayload; } @@ -149,13 +151,27 @@ export function consumeAcademicHandoffForDryRun(input: AcademicDryRunInput): Aca } const daily = dailyInputPayload(input.bundle); + const coverageRefs = stringArray(daily.coverage_refs); + const runtimeSnapshot = buildRuntimeRegistrySnapshotFromFixture({ + groupId: "academic", + toolCoverageRefs: coverageRefs, + }); + if (!runtimeSnapshot.ok) { + return { + ...runtimeSnapshot, + feedbackPayloadSchema: "normalization-feedback.v1", + feedbackPayload: feedbackPayload(input.bundle, runtimeSnapshot) as RejectedFeedbackPayload, + }; + } + return { ok: true, status: "normalization_dry_run_ready", normalizedEventBatchRefs: stringArray(daily.normalized_event_batch_refs), rejectedEventBatchRefs: stringArray(daily.rejected_event_batch_refs), - coverageRefs: stringArray(daily.coverage_refs), + coverageRefs, contributionRefs: stringArray(daily.contribution_refs), + runtimeSnapshot, feedbackPayloadSchema: "normalization-feedback.v1", feedbackPayload: feedbackPayload(input.bundle) as ReadyFeedbackPayload, }; diff --git a/src/industry/platform/normalization/financePolicyDryRun.ts b/src/industry/platform/normalization/financePolicyDryRun.ts index b712b37..f6e242d 100644 --- a/src/industry/platform/normalization/financePolicyDryRun.ts +++ b/src/industry/platform/normalization/financePolicyDryRun.ts @@ -6,7 +6,7 @@ import { } from "../contracts/financePolicyHandoff.ts"; import { loadIndustrySchemaRegistry, type IndustrySchemaRegistry } from "../contracts/schemaRegistry.ts"; import { resolveSharedGovernanceProfile } from "../contracts/sharedGovernance.ts"; -import { publishRuntimeRegistrySnapshot } from "../registry/runtimeSnapshot.ts"; +import { getPlatformRegistrySnapshotGroup, publishRuntimeRegistrySnapshot } from "../registry/runtimeSnapshot.ts"; type RecordLike = Record; type RuntimeProfiles = { @@ -106,6 +106,7 @@ function policyFinanceRuntimeProfileIds(bundle: FinancePolicyHandoffBundle): Run } function policyFinanceRuntimeSnapshots(bundle: FinancePolicyHandoffBundle, coverageRefs: string[]): RuntimeSnapshotResult[] { + const phase2Snapshot = getPlatformRegistrySnapshotGroup("policy_finance"); return coverageRefs.map((coverageRef) => { const message = bundle.messages.find((item) => (item as RecordLike).payload_ref === coverageRef) as RecordLike | undefined; const coverage = message @@ -117,7 +118,8 @@ function policyFinanceRuntimeSnapshots(bundle: FinancePolicyHandoffBundle, cover registrySnapshotRef: String(coverage.registry_snapshot_ref ?? ""), toolRegistrySnapshotRef: String(coverage.tool_registry_snapshot_ref ?? ""), toolCoverageRefs: [coverageRef], - authorityRefs: String(coverage.registry_snapshot_ref ?? "") ? [String(coverage.registry_snapshot_ref)] : [], + seedRefs: phase2Snapshot.seed_refs, + authorityRefs: phase2Snapshot.authority_refs, manualReviewPoolSlots: 0, reviewAvailability: { same_run_review_mode: "async_only", reviewer_on_duty_count: 0 }, }); diff --git a/src/industry/platform/normalization/industryRuntimeSummary.ts b/src/industry/platform/normalization/industryRuntimeSummary.ts index 84dd353..74c36cb 100644 --- a/src/industry/platform/normalization/industryRuntimeSummary.ts +++ b/src/industry/platform/normalization/industryRuntimeSummary.ts @@ -9,6 +9,10 @@ import { loadIndustrySchemaRegistry } from "../contracts/schemaRegistry.ts"; import { consumeAcademicPreparatoryHandoffForDryRun } from "./academicDryRun.ts"; import { replayPolicyFinanceRuntimeReadyFixture } from "./policyFinanceRuntimeReplay.ts"; import { consumeProductEcosystemHandoffForDryRun } from "./productEcosystemDryRun.ts"; +import { + getPlatformRegistrySnapshotGroup, + loadPlatformRegistrySnapshotFixture, +} from "../registry/runtimeSnapshot.ts"; export function buildIndustryRuntimeSummaryArtifact(input: { date: string; @@ -36,6 +40,7 @@ export function buildIndustryRuntimeSummaryArtifact(input: { }; }>(rootDir, "fixtures/industry/platform/current-consumer/phase1-runtime.json"); const sharedGovernance = validateSharedGovernanceBaseline(loadIndustrySchemaRegistry()); + const phase2RegistrySnapshot = loadPlatformRegistrySnapshotFixture(); const policyFinance = replayPolicyFinanceRuntimeReadyFixture({ rootDir }); if (!policyFinance.current.ok || policyFinance.current.status !== policyFinance.fixture.current.expected_status) { @@ -63,13 +68,18 @@ export function buildIndustryRuntimeSummaryArtifact(input: { } const { bundle } = buildProductEcosystemFormalHandoff(buildProductEcosystemInput()); + const productSnapshot = getPlatformRegistrySnapshotGroup("product_ecosystem", phase2RegistrySnapshot); const product = consumeProductEcosystemHandoffForDryRun({ bundle, - registrySnapshotRef: "industry://internal/2026-06-26/registry-snapshot.v1/product-ecosystem", - toolRegistrySnapshotRef: "industry://internal/2026-06-26/tool-registry-snapshot.v1/product-ecosystem", - authorityRefs: ["industry://internal/2026-06-26/source-authority-context.v1/product-ecosystem"], - manualReviewPoolSlots: 2, - reviewAvailability: { same_run_review_mode: "async_only", reviewer_on_duty_count: 0 }, + registrySnapshotRef: productSnapshot.registry_snapshot_ref, + toolRegistrySnapshotRef: productSnapshot.tool_registry_snapshot_ref, + seedRefs: productSnapshot.seed_refs, + authorityRefs: productSnapshot.authority_refs, + manualReviewPoolSlots: phase2RegistrySnapshot.review_availability.manual_review_pool_slots, + reviewAvailability: { + same_run_review_mode: phase2RegistrySnapshot.review_availability.same_run_review_mode, + reviewer_on_duty_count: phase2RegistrySnapshot.review_availability.reviewer_on_duty_count, + }, }); if (!product.ok) { throw new Error(`product ecosystem summary mismatch: ${product.reasonCode}`); @@ -82,6 +92,7 @@ export function buildIndustryRuntimeSummaryArtifact(input: { overall_status: "industry_runtime_contracts_ready", platform_contract: { fixture_id: platformContract.fixture_id, + registry_snapshot_fixture_id: phase2RegistrySnapshot.fixture_id, published_for: platformContract.published_for, handoff_payload_schema_count: platformContract.handoff_payload_schemas.length, feedback_payload_schema_count: platformContract.feedback_payload_schemas.length, diff --git a/src/industry/platform/normalization/productEcosystemDryRun.ts b/src/industry/platform/normalization/productEcosystemDryRun.ts index fe83b8a..500d22c 100644 --- a/src/industry/platform/normalization/productEcosystemDryRun.ts +++ b/src/industry/platform/normalization/productEcosystemDryRun.ts @@ -32,6 +32,7 @@ export type ProductEcosystemDryRunInput = Omit registry?: IndustrySchemaRegistry; registrySnapshotRef?: string; toolRegistrySnapshotRef?: string; + seedRefs?: string[]; authorityRefs?: string[]; manualReviewPoolSlots?: number; reviewAvailability?: { @@ -179,6 +180,7 @@ export function consumeProductEcosystemHandoffForDryRun(input: ProductEcosystemD registrySnapshotRef: input.registrySnapshotRef, toolRegistrySnapshotRef: input.toolRegistrySnapshotRef, toolCoverageRefs: stringArray(dailyInput.coverage_refs), + seedRefs: input.seedRefs ?? [], authorityRefs: input.authorityRefs ?? [], manualReviewPoolSlots: input.manualReviewPoolSlots ?? 0, reviewAvailability: input.reviewAvailability ?? { same_run_review_mode: "async_only", reviewer_on_duty_count: 0 }, diff --git a/src/industry/platform/registry/runtimeSnapshot.ts b/src/industry/platform/registry/runtimeSnapshot.ts index cdf5bc9..eb9d729 100644 --- a/src/industry/platform/registry/runtimeSnapshot.ts +++ b/src/industry/platform/registry/runtimeSnapshot.ts @@ -1,14 +1,21 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + type ReviewAvailability = { same_run_review_mode: "staffed_human" | "service_account_only" | "async_only"; reviewer_on_duty_count: number; }; +type ReviewGateAction = "same_run_review" | "conservative_consumption"; +export type PlatformRegistrySnapshotGroupId = "policy_finance" | "academic" | "product_ecosystem"; type GovernanceImpactScope = "headline_core" | "tier_blocking" | "public_output_only" | "owner_primary" | "long_tail"; type RuntimeSnapshotInput = { registrySnapshotRef: string; toolRegistrySnapshotRef: string; toolCoverageRefs: string[]; + seedRefs?: string[]; authorityRefs: string[]; governanceReviewRefs?: string[]; manualReviewPoolSlots: number; @@ -23,6 +30,7 @@ type RuntimeSnapshotResult = toolRegistrySnapshotRef: string; runtimeInputRefs: string[]; sameRunReviewAvailable: boolean; + reviewGateAction: ReviewGateAction; } | { ok: false; @@ -46,10 +54,81 @@ type GovernanceReviewResult = } | { ok: false; reasonCode: "lineage_failed"; message: string }; +export type PlatformRegistrySnapshotGroup = { + group_id: PlatformRegistrySnapshotGroupId; + registry_snapshot_ref: string; + tool_registry_snapshot_ref: string; + seed_refs: string[]; + authority_refs: string[]; +}; + +export type PlatformRegistrySnapshotFixture = { + fixture_id: string; + schema_version: "platform-registry-snapshot-fixture.v1"; + published_for: PlatformRegistrySnapshotGroupId[]; + review_availability: { + manual_review_pool_slots: number; + same_run_review_mode: ReviewAvailability["same_run_review_mode"]; + reviewer_on_duty_count: number; + default_gate_action: ReviewGateAction; + }; + groups: PlatformRegistrySnapshotGroup[]; +}; + +const projectRoot = path.resolve(fileURLToPath(new URL("../../../../", import.meta.url))); +const defaultFixturePath = path.join( + projectRoot, + "fixtures", + "industry", + "platform", + "current-consumer", + "phase2-registry-snapshot.json", +); + function hasText(value: unknown): value is string { return typeof value === "string" && value.length > 0; } +function assertTextArray(values: string[], label: string): void { + if (!values.length || !values.every(hasText)) { + throw new Error(`Invalid Phase 2 registry snapshot fixture ${label}.`); + } +} + +function sameRunReviewAvailable(input: { + manualReviewPoolSlots: number; + reviewAvailability: ReviewAvailability; +}): boolean { + return ( + input.manualReviewPoolSlots > 0 && + input.reviewAvailability.reviewer_on_duty_count > 0 && + input.reviewAvailability.same_run_review_mode !== "async_only" + ); +} + +export function loadPlatformRegistrySnapshotFixture(fixturePath = defaultFixturePath): PlatformRegistrySnapshotFixture { + const fixture = JSON.parse(fs.readFileSync(fixturePath, "utf8")) as PlatformRegistrySnapshotFixture; + for (const group of fixture.groups) { + if (!hasText(group.registry_snapshot_ref) || !hasText(group.tool_registry_snapshot_ref)) { + throw new Error(`Invalid Phase 2 registry snapshot fixture group: ${group.group_id}.`); + } + assertTextArray(group.seed_refs, `${group.group_id}.seed_refs`); + assertTextArray(group.authority_refs, `${group.group_id}.authority_refs`); + } + return fixture; +} + +export function getPlatformRegistrySnapshotGroup( + groupId: PlatformRegistrySnapshotGroupId, + fixture = loadPlatformRegistrySnapshotFixture(), +): PlatformRegistrySnapshotGroup { + const group = fixture.groups.find((item) => item.group_id === groupId); + if (!group) { + throw new Error(`Missing Phase 2 registry snapshot group: ${groupId}.`); + } + return group; +} + export function publishRuntimeRegistrySnapshot(input: RuntimeSnapshotInput): RuntimeSnapshotResult { if (!hasText(input.registrySnapshotRef) || !hasText(input.toolRegistrySnapshotRef)) { return { ok: false, reasonCode: "lineage_failed", message: "Runtime snapshot requires registry and tool registry refs." }; @@ -59,24 +138,45 @@ export function publishRuntimeRegistrySnapshot(input: RuntimeSnapshotInput): Run return { ok: false, reasonCode: "schema_mismatch", message: "Governance review refs must not enter runtime snapshot." }; } - const runtimeInputRefs = [...input.toolCoverageRefs, ...input.authorityRefs]; + const runtimeInputRefs = [...input.toolCoverageRefs, ...(input.seedRefs ?? []), ...input.authorityRefs]; if (!runtimeInputRefs.length || !runtimeInputRefs.every(hasText)) { return { ok: false, reasonCode: "lineage_failed", message: "Runtime snapshot requires resolvable runtime input refs." }; } + const reviewAvailable = sameRunReviewAvailable(input); + return { ok: true, status: "runtime_snapshot_published", registrySnapshotRef: input.registrySnapshotRef, toolRegistrySnapshotRef: input.toolRegistrySnapshotRef, runtimeInputRefs, - sameRunReviewAvailable: - input.manualReviewPoolSlots > 0 && - input.reviewAvailability.reviewer_on_duty_count > 0 && - input.reviewAvailability.same_run_review_mode !== "async_only", + sameRunReviewAvailable: reviewAvailable, + reviewGateAction: reviewAvailable ? "same_run_review" : "conservative_consumption", }; } +export function buildRuntimeRegistrySnapshotFromFixture(input: { + groupId: PlatformRegistrySnapshotGroupId; + toolCoverageRefs: string[]; + fixture?: PlatformRegistrySnapshotFixture; +}): RuntimeSnapshotResult { + const fixture = input.fixture ?? loadPlatformRegistrySnapshotFixture(); + const group = getPlatformRegistrySnapshotGroup(input.groupId, fixture); + return publishRuntimeRegistrySnapshot({ + registrySnapshotRef: group.registry_snapshot_ref, + toolRegistrySnapshotRef: group.tool_registry_snapshot_ref, + toolCoverageRefs: input.toolCoverageRefs, + seedRefs: group.seed_refs, + authorityRefs: group.authority_refs, + manualReviewPoolSlots: fixture.review_availability.manual_review_pool_slots, + reviewAvailability: { + same_run_review_mode: fixture.review_availability.same_run_review_mode, + reviewer_on_duty_count: fixture.review_availability.reviewer_on_duty_count, + }, + }); +} + export function classifyGovernanceReview(input: GovernanceReviewInput): GovernanceReviewResult { if (!hasText(input.registryReviewRef)) { return { ok: false, reasonCode: "lineage_failed", message: "Governance review requires registry_review_ref." }; diff --git a/src/types.ts b/src/types.ts index c9a14d6..7a87a39 100644 --- a/src/types.ts +++ b/src/types.ts @@ -804,6 +804,7 @@ export interface IndustryRuntimeSummaryArtifact { overall_status: "industry_runtime_contracts_ready"; platform_contract: { fixture_id: string; + registry_snapshot_fixture_id?: string; published_for: string[]; handoff_payload_schema_count: number; feedback_payload_schema_count: number;