Inspiration
AI-assisted professional reports can quote their sources accurately and still reach a professionally invalid conclusion. A report may turn engagement into influence, activity into impact, or another person's decision into the subject's achievement—even when every cited passage is real.
I built Evidence Chain to address that gap. It tests whether each consequential claim satisfies a human-approved professional methodology and the complete evidence record, not merely whether related text can be retrieved.
What it does
Evidence Chain is a methodology-aware assurance workflow for professional reports. It:
- turns a framework PDF into a structured evidence contract;
- requires a professional to review and lock that contract before it governs an audit;
- examines registered PDFs, a material image, and a timestamped transcript;
- retrieves supporting, contradictory, attribution, and coverage evidence;
- runs five explicit tests covering provenance, construct validity, attribution, contradiction, and coverage;
- validates every model-supplied source and requirement reference;
- applies deterministic application rules to assign Supported, Contested, Unsupported, or Insufficient evidence; and
- proposes narrower, evidence-bounded wording for human approval, then retests it against the unchanged rules and sources.
The public application contains five complete synthetic cases across organisational assessment, operational review, project benefits, leadership development, and compliance assurance. Each demonstrates a different assurance problem: contradiction, valid support, incorrect attribution, construct confusion, or missing evidence.
In the flagship case, the plausible claim “The candidate demonstrates strong stakeholder influence” becomes Contested. Relevant evidence shows consultation and clear communication, but the complete record shows that stakeholder support did not change and a director produced the final outcome. Evidence Chain makes that decisive relationship visible, then allows the professional to approve or edit a narrower conclusion and retest it.
How I built it
The product is a runnable single-page application built with JavaScript, Vite, and Firebase Hosting. Server-side model operations run in a second-generation Firebase Cloud Function, so the OpenAI API key never enters browser code.
GPT-5.6 Luna is used through the OpenAI Responses API to interpret raw professional source materials, compile methodology requirements, classify source-anchored evidence, adjudicate the five tests, and propose conservative wording. Responses use strict structured outputs and provider-side storage is disabled. The application validates the returned structure and references before deterministic code assigns a status. If the primary model cannot produce a valid result after bounded retries, the interface discloses any configured fallback rather than presenting it as a GPT-5.6 result.
Codex was my development collaborator throughout the build. It helped translate the assurance concept into a guarded state-machine workflow, implement strict server and schema boundaries, build the evidence graph and source-linked repair interaction, create five distinct synthetic cases, diagnose integration failures, and expand regression coverage. I retained the decisions about professional methodology, material contradictions, approval boundaries, final wording, and which recommendations to accept.
Challenges
The hardest problem was preventing relevance-based retrieval from reinforcing an already plausible claim. The central regression case includes exact passages that sound supportive until the system recovers later evidence showing that the candidate did not change stakeholder support and did not own the final outcome.
I addressed this with separate retrieval lanes for support, counter-indicators, attribution, and coverage. Every material finding must resolve to known source and requirement IDs. Unknown references, incomplete test coverage, stale contract hashes, malformed output, and failed live requests stop the workflow instead of becoming fabricated results.
A second challenge was making this assurance logic understandable without turning the interface into a wall of tables. The final experience uses three visible chapters—Understand, Test, and Resolve—with seven guarded internal phases. The Evidence Graph shows how raw sources become validated evidence, tests, and a decision, while detail remains available on demand.
Accomplishments
- Five complete synthetic professional cases with distinct assurance outcomes.
- Human approval boundaries for both methodology and final wording.
- Direct, hash-verified PDF, image, and transcript model inputs.
- An inspectable Evidence Graph instead of an opaque confidence score.
- Deterministic status assignment outside the model.
- Evidence-bounded repair followed by same-rules retesting.
- A separate 14-claim synthetic benchmark with honest live/offline boundaries.
- 248 passing automated tests, a passing production build, and a passing Cloud Functions syntax check.
- A deployed, no-login walkthrough that judges can complete in about one minute.
What I learned
Semantic relevance is not professional sufficiency. Evidence for a neighbouring behaviour can look convincing while failing the actual requirements for the claimed construct. Turning methodology into an executable, human-approved contract makes that boundary visible and testable.
I also learned that useful human oversight must change what the system is allowed to do. In Evidence Chain, professional approval is not decorative: changing the contract invalidates downstream results, and revised wording must survive the same evidence and tests.
What's next
Next steps are broader synthetic benchmarks, measured reviewer-time and false-block studies, additional professional domains, and carefully governed trials with domain experts. Evidence Chain will remain conservative: it audits the relationship between a claim, an approved methodology, and supplied evidence. A qualified professional remains accountable for the final report.
Built With
- codex
- firebase
- gpt-5.6
- javascript
- openai-responses-api
- vite
Log in or sign up for Devpost to join the conversation.