feat: audit VedAstro raw archive manifest

This commit is contained in:
732642856
2026-07-08 21:33:55 +08:00
parent beaabe4e6a
commit ca4b2b7947
5 changed files with 33 additions and 0 deletions
+1
View File
@@ -52,6 +52,7 @@ For large architecture or release work, also read:
| ERR-019 | WorkBuddy/cloud/local acceptance summaries can invent pass counts, stale asset counts, non-existent error docs, or wrong dasha windows. | mitigated 2026-07-06 | Read `docs/research/user_invocation_acceptance_error_log_2026_07_06.md`; run `scripts/user_invocation_acceptance_check.py` and `tests/test_user_invocation_acceptance_contract.py` before accepting ordinary-user skill invocation validation claims. |
| ERR-020 | VedAstro official raw responses can be archived but hard to audit if no manifest/API listing exposes them. | mitigated 2026-07-08 | Keep `list_official_raw_response_archives()` and `GET /api/vedastro_gateway/archives`; tests must prove archived official raw responses are enumerable. |
| ERR-021 | VedAstro raw archive manifests can exist outside the high-rigor evidence packet, leaving final reports unable to prove whether official raw evidence was archived. | mitigated 2026-07-08 | Keep `vedastro_official_raw_archive_manifest` in `machine_evidence_packet.sections` for API and MCP strict workflows. |
| ERR-022 | Technique Audit Table can show VedAstro cloud state but omit whether archived official raw evidence is actually auditable. | mitigated 2026-07-08 | Keep `VedAstro Raw Archive Manifest` as a first-class Technique Audit Table row immediately after `VedAstro Cloud State`. |
## Fragment Sweep Command Set
@@ -552,10 +552,19 @@ class UnifiedConsultationOrchestrator:
blocked_items.append("external_engine_cross_validation_partial")
packet = machine_evidence_packet if isinstance(machine_evidence_packet, dict) else {}
packet_status = packet.get("status") or "required_not_satisfied"
packet_sections = packet.get("sections") if isinstance(packet.get("sections"), dict) else {}
archive_section = packet_sections.get("vedastro_official_raw_archive_manifest")
archive_status = (
archive_section.get("status")
if isinstance(archive_section, dict)
else "required_not_satisfied"
)
if not packet:
blocked_items.append("machine_evidence_packet_not_yet_materialized")
elif packet_status != "complete":
blocked_items.append("machine_evidence_packet_partial")
if archive_status != "used":
blocked_items.append("vedastro_official_raw_archive_manifest_missing")
case_packet = real_case_calibration if isinstance(real_case_calibration, dict) else {}
case_status = case_packet.get("status") or "required_not_satisfied"
functional_packet = packet.get("functional_benefic_malefic") if isinstance(packet.get("functional_benefic_malefic"), dict) else {}
@@ -577,6 +586,16 @@ class UnifiedConsultationOrchestrator:
else "confidence_capped_without_verified_official_cloud"
),
},
{
"technique": "VedAstro Raw Archive Manifest",
"status": archive_status,
"used": archive_status == "used",
"effect_on_confidence": (
"official_raw_archive_is_auditable"
if archive_status == "used"
else "official_raw_archive_not_auditable_for_this_run"
),
},
{
"technique": "External Engine Cross-Validation",
"status": external_cross_validation["status"],
+2
View File
@@ -2205,6 +2205,8 @@ def test_high_rigor_workflow_reuses_existing_rectification_backtest_and_vedastro
assert result['unified_orchestrator']['surface'] == 'api_web'
assert result['unified_orchestrator']['route']['question_type'] == 'career'
assert result['machine_evidence_packet']['sections']['vedastro_official_raw_archive_manifest']['status'] == 'used'
assert result['runtime_evidence_log']['quality_gate']['technique_audit_table'][1]['technique'] == 'VedAstro Raw Archive Manifest'
assert result['runtime_evidence_log']['quality_gate']['technique_audit_table'][1]['status'] == 'used'
def test_consultation_workflow_uses_unified_orchestrator_contract(monkeypatch) -> None:
+1
View File
@@ -183,6 +183,7 @@ def test_mcp_strict_workflow_returns_runtime_evidence_log(monkeypatch) -> None:
assert result["runtime_evidence_log"]["real_case_calibration"]["status"] == "partial_scored"
assert result["runtime_evidence_log"]["quality_gate"]["technique_audit_table_required"] is True
assert result["runtime_evidence_log"]["quality_gate"]["technique_audit_table"][0]["technique"] == "VedAstro Cloud State"
assert result["runtime_evidence_log"]["quality_gate"]["technique_audit_table"][1]["technique"] == "VedAstro Raw Archive Manifest"
def test_career_blocks_label_when_d10_is_missing_but_preserves_jaimini_context() -> None:
@@ -191,6 +191,7 @@ def test_runtime_evidence_log_exposes_blind_packet_case_and_quality_gate_contrac
assert log["quality_gate"]["technique_audit_table_required"] is True
assert [row["technique"] for row in log["quality_gate"]["technique_audit_table"]] == [
"VedAstro Cloud State",
"VedAstro Raw Archive Manifest",
"External Engine Cross-Validation",
"Evidence Packet",
"Blind Technical Mode",
@@ -216,6 +217,11 @@ def test_runtime_evidence_log_exposes_blind_packet_case_and_quality_gate_contrac
packet = orchestrator.machine_evidence_packet(
chart={"chart": {"planets": {"Sun": {}}, "ascendant": {"sign": "Leo"}}},
route_packet={"question_type": "career", "primary_theme": "career"},
vedastro_archive_manifest={
"scope": "vedastro_official_raw_response_archive_manifest",
"archive_count": 1,
"archives": [{"job_id": "job_1955", "official_raw_response_available": True}],
},
)
log_with_functional = orchestrator.runtime_evidence_log(
surface="api_web",
@@ -229,6 +235,10 @@ def test_runtime_evidence_log_exposes_blind_packet_case_and_quality_gate_contrac
assert functional_row["technique"] == "Functional Benefic/Malefic"
assert functional_row["status"] == "used"
assert "Mars" in functional_row["yogakarakas"]
archive_row = log_with_functional["quality_gate"]["technique_audit_table"][1]
assert archive_row["technique"] == "VedAstro Raw Archive Manifest"
assert archive_row["status"] == "used"
assert archive_row["used"] is True
def test_machine_evidence_packet_materializes_required_section_statuses() -> None: