Audit Trail — Grant Requirement → Build Artifact
Source: grant/audit-trail.md · synced 2026-06-12
Living ledger. Every grant clause and every Annex 3 deliverable maps to a specific artifact in the codebase or workspace. Update as artifacts are produced. Canonical reference: SOURCE-OF-TRUTH.md §1 for the grant rules and the 12-step → Annex 3 mapping.
Annex 3 Deliverables → Artifacts
1. AI-Powered Resourcing
| Required outcome | Artifact (path / location) | Status |
|---|---|---|
| Candidate scraping system | app/resourcing/candidates/ + Apify integration | ⏳ |
| Employer / job listing scraping (BD) | app/resourcing/employers/ | ⏳ |
| AI deep research | app/resourcing/research/ (Inngest worker) | ⏳ |
| Auto-tagging engine | app/resourcing/tagging/ | ⏳ |
| Per-tenant configurability | Tenant settings UI + DB schema | ⏳ |
| Demo at audit | Live demo: scrape → enrich → tag → store | ⏳ |
2. AI Candidate Filtering & Matching
| Required outcome | Artifact (path / location) | Status |
|---|---|---|
| JD parser | app/matching/jd-parser/ | ⏳ |
| Conditional mapping rubrics engine | app/matching/rubrics/ | ⏳ |
| AI scoring engine | app/matching/scoring/ | ⏳ |
| 4× grant-level vertical encyclopedias (per proposal) | reference/verticals/ — commodities-and-renewables.md, shipping-and-maritime.md, offshore-services.md, tech-and-gaming.md | 🟡 stubs in place |
| 4× grant-level vertical rubric configs (proprietary domain layer) | reference/rubric-configs/ — commodities.json, maritime.json, offshore.json, tech-gaming.json | 🟡 stubs in place |
| 5× operational sub-function tag vocabularies (real data layer — see SOURCE-OF-TRUTH.md §3) | cargo-ops, ship-ops, risk-analytics in title-normaliser plan; finance-fo, ops-back-office TBD | 🟡 3 of 5 drafted |
| CV parser (incl. grounding + staleness hardening) | calibre-app/src/lib/cv-parser/ | ✅ shipped on feat/parser-hardening |
| CV normaliser | calibre-app/src/lib/cv-normaliser/ | ⏳ designed not built |
| JD parser | calibre-app/src/lib/jd-parser/ | ⏳ designed not built |
| JD normaliser | calibre-app/src/lib/jd-normaliser/ | ⏳ designed not built |
| Layer 1 hard fit | calibre-app/src/lib/matching/layer1-hard-fit.ts | ⏳ designed not built |
| Adjacency resolver (ratified config + live inference) | calibre-app/src/lib/matching/adjacency/* + config/adjacency-ratified.json | ⏳ designed not built |
| Layer 2 deep assessment | calibre-app/src/lib/matching/layer2-deep-assessment.ts | ⏳ designed not built |
| Layer 3 verdict synthesis | calibre-app/src/lib/matching/layer3-verdict.ts | ⏳ designed not built |
| Per-vertical demo content (Calibre JDs across all 4 verticals) | Live system + screenshots in project report | ⏳ |
| Shortlist UI | app/matching/shortlist/ | ⏳ |
| Demo at audit | Live demo: upload JD → see ranked shortlist with score rationale, show 4 vertical configs in admin | ⏳ |
3. AI-Driven Candidate Outreach
| Required outcome | Artifact (path / location) | Status |
|---|---|---|
| Personalisation engine | app/outreach/personalisation/ | ⏳ |
| Per-vertical tone guides | reference/tone-guides/ | ⏳ |
| Email send pipeline | app/outreach/send/ (Instantly/Smartlead webhook) | ⏳ |
| LinkedIn touchpoint sequencing | app/outreach/sequences/ | ⏳ |
| Response → DB enrichment | app/outreach/responses/ | ⏳ |
| BD outreach (thin) | app/outreach/bd/ | ⏳ |
| Demo at audit | Live demo: shortlist → generate emails → send → response logged | ⏳ |
Other Annex 3 deliverables
| Required outcome | Artifact (path / location) | Status |
|---|---|---|
| Project report on Calibre letterhead | outputs/project-report-final.docx | ⏳ |
| Training materials — module decks (3) | outputs/training/module-decks/ | ⏳ |
| Training materials — vertical decks (4) | outputs/training/vertical-decks/ | ⏳ |
| Training materials — SOPs (per module + per vertical) | outputs/training/sops/ | ⏳ |
| Training materials — recorded sessions | outputs/training/recordings/ | ⏳ |
| Training attendance record | outputs/training/attendance-log.xlsx | ⏳ |
| Productivity before/after data (per vertical breakdown) | outputs/productivity-measurements.md | ⏳ |
Compliance / PDPA artifacts
| Required outcome | Artifact (path / location) | Status |
|---|---|---|
| Data Processing Agreement between Calibre + 3NMP (per Annex 1.34 PDPA compliance) | _archive/2026-05-24-DPA-Calibre-3NMP.md (gitignored — Tier C internal, archived 2026-06-03) | ✅ drafted 2026-05-24 |
| Privacy policy on productisation surface | <productisation-domain>/privacy (Step 10; domain TBD, previously planned getcalibre.ai abandoned 2026-06-04) | ⏳ |
| Cookie / consent banner on productisation surface | <productisation-domain> (Step 10) | ⏳ |
Approval Letter Framing → Artifacts
The approval letter (Annex 4) approves the spend on the basis that this is “a product that we will be marketing to other Headhunting Agencies.” That framing must be defensible at audit.
| Claim in approval | Defending artifact | Status |
|---|---|---|
| ”AI Platform” | Multi-tenant Next.js + Supabase architecture with public domain | ⏳ |
| “Marketing to other Headhunting Agencies” | Public marketing landing page, pricing tiers, signup flow | ⏳ |
| “Proprietary” | Custom rubric engine, scoring algo, vertical encyclopedias (in-repo, not 3rd-party) | ⏳ |
| “Software” line item ($28K) | Codebase, schema, deployments — all attributable to 3NMP development time | ⏳ |
| “Audit Fee” line item ($1,800) | Invoice from EnterpriseSG-panel auditor | ⏳ |
Annex 1 Standard T&Cs → Compliance Posture
| Clause | Requirement | How we comply |
|---|---|---|
| 1.1 | Independent auditor verifies claim | Calibre to engage from EnterpriseSG panel before claim |
| 1.2 | Complete project + achieve Annex 3 by qualifying period end | Internal target: Sep 2026 functional, Dec 2026 polish |
| 1.3 | Inform EnterpriseSG of any project variation in writing | Material scope changes flagged in this workspace and escalated to Calibre |
| 1.4 | Maintain ≥30% local equity | Calibre’s responsibility — confirm ongoing |
| 1.5 | Fair value, not inflated pricing | $28K maps to ~10–11 weeks of Next.js + Supabase + integration work — defensible |
| 1.6 | EnterpriseSG logo/name use requires consent | Avoid using their logo in Calibre’s marketing of this product |
| 1.7 | Reimbursement only on bank transfer or cheque | Calibre to pay 3NMP via bank transfer; no cash |
| 1.12 | No rebate/cashback/credit between Calibre and 3NMP from grant | No side arrangement involving the grant portion. Period. |
| 1.13 | Declare relationships between parties | 3NMP (Ben) and Calibre (Calibre) have no equity / family / director ties — clean |
| 1.30 | No double-funding | This project is funded only by EDG 26032AYH |
| 1.34 | Comply with all applicable laws | PDPA compliance for scraping (smart scraping + consent on response) |
| 4.2 / 4.3 | Equipment/IP cannot be sold/disposed/moved out of SG for 1 year post-completion | Codebase + IP stays with Calibre (or licensed structure with 3NMP) — confirm legal structure before claim |
Risks & Open Items
| Risk | Severity | Mitigation |
|---|---|---|
| Calibre cannot demonstrate productisation intent at audit | High | Real Stripe (test mode), real signup, 1-2 demo tenants live |
| Auditor questions Apify/Apollo as “third-party” not “proprietary” | Med | Frame as data ingestion infrastructure (Calibre opex). Proprietary = our orchestration + rubrics + scoring + UI |
| Productivity claims (3-5x, 20-40%) unsubstantiated | High | Capture baseline BEFORE go-live. Track real numbers Sep–Dec. |
| Training records insufficient | Med | Record every session from day 1. Maintain attendance log. |
| Productisation domain not registered in time | Low | Pick + register new productisation domain (previously planned getcalibre.ai abandoned 2026-06-04) before Step 10 starts. Current docs surface already live at calibredocs.3nm.io. |
| Annex 4.3 “equipment” interpretation includes the codebase | Med | Confirm IP ownership clause with Calibre — Calibre owns the deployed instance, 3NMP owns the underlying IP via license? |
How To Use This Doc
- Before any build session: open this +
scope.md. Confirm the work maps to a row. - After any build session: update Status column. Link to the actual file/PR if helpful.
- Before audit: every row should be ✅. Anything ⏳ becomes the punchlist.
Last updated on