build-small-hackathon/hackathon-advisor
16
1from tests.helpers import load_test_index2 3from hackathon_advisor.agent import AdvisorEngine4from hackathon_advisor.prize_ledger import prize_ledger5from hackathon_advisor.submission_packet import build_submission_packet_markdown6from hackathon_advisor.trace_export import trace_metadata7 8 9def test_submission_packet_contains_demo_and_prize_evidence() -> None:10 index = load_test_index()11 engine = AdvisorEngine(index)12 state = {"goals": ["Well-Tuned", "Field Notes"]}13 state = engine.turn("A local-first archive cartographer for family photos", state).state14 state = engine.turn("make a build plan", state).state15 16 markdown = build_submission_packet_markdown(17 state,18 {19 **trace_metadata(index),20 "project_count": len(index.projects),21 },22 prize_ledger(engine.runtime_status()),23 )24 25 assert markdown.startswith("# Hackathon Advisor Submission Packet")26 assert "## Demo Script" in markdown27 assert "## Artifact Checklist" in markdown28 assert "## Prize Evidence" in markdown29 assert "## Model Budget" in markdown30 assert "## Social Post Draft" in markdown31 assert "Hackathon Advisor" in markdown32 assert "Well-Tuned | ready" in markdown33 assert "MiniCPM5 LoRA SFT JSONL | ready | lora_dataset" in markdown34 assert "Fate page PNG | ready | /api/artifact.png" in markdown35 assert "Notes, Chapter, and PNG are available in the app" in markdown36 assert "`/api/prize-ledger` separates ready and planned badge states" in markdown37 assert "A local-first archive cartographer for family photos" in markdown38 39 40def test_empty_submission_packet_is_honest_about_missing_session_artifacts() -> None:41 markdown = build_submission_packet_markdown(42 {},43 {44 "snapshot_generated_at": "2026-06-06T00:00:00+00:00",45 "project_count": 100,46 "index_algorithm": "llama-cpp-embedding-v1",47 "index_generated_at": "2026-06-06T01:00:00+00:00",48 "snapshot_digest": "abc",49 },50 prize_ledger({"backend": "rules", "model_id": "deterministic-tool-router", "adapter_id": ""}),51 )52 53 assert "Title: Unwritten Page" in markdown54 assert "Tool trace JSONL | needs session" in markdown55 assert "Submission packet markdown | ready" in markdown56 assert "No ideas recorded yet." in markdown57 