How the assessment works end-to-end: scanner logic, interview process, scoring model, and report generation.
The PRISM D1 assessment is a three-part system that combines automated repo analysis, a structured SA interview, and organizational readiness signals to produce a maturity score, a readiness verdict, and a personalized onboarding plan.
Customer Repo ──→ Scanner (12 categories) ──→ 0-100 score (40% weight)
SA Interview ──→ 20 questions, 6 sections ──→ 0-100 score (40% weight)
Org Readiness ──→ 5 binary factors ──→ 0-20 score (20% weight)
│
Blended Score (0-100)
│
PRISM Level (L1.0-L5.0)
│
Verdict → Track → Report
Key principle: The scanner looks at real artifacts in code — not self-reported surveys. If a team says “we do spec-driven development” but the scanner finds zero spec files, the score reflects reality.
What it does: Runs prism-scan CLI against the customer’s repository, checking 12 categories of AI-DLC maturity via file glob patterns and content regex.
How to run:
cd assessment/scanner
npm install
npx ts-node src/index.ts --repo /path/to/customer/repo --verbose
| # | Category | Max Pts | What It Detects | How |
|---|---|---|---|---|
| 1 | AI Tool Config | 10 | CLAUDE.md, Kiro config, Bedrock references, IDE config | File existence + content regex (/bedrock/i, /claude-\d/i) |
| 2 | Spec-Driven Dev | 10 | specs/ directory, structured spec format (Requirements, ACs) | Glob for specs/**/*.md, regex for /## requirements/i, /acceptance[_\s-]?criteria/i |
| 3 | Commit Hygiene | 15 | AI-Origin trailers in git history, AI-Model trailers | git log last 200 commits, regex for /AI-Origin:/i, /Co-Authored-By:.*\b(claude\|copilot)\b/i |
| 4 | CI/CD Integration | 15 | Eval gates in workflows, metrics emission, AI test steps | Glob for .github/workflows/*.yml, regex for eval/Bedrock/EventBridge references |
| 5 | Eval & Quality | 10 | Bedrock Evaluation configs, LLM-as-Judge patterns, rubrics | Glob for eval dirs, regex for /bedrock.*eval/i, /llm.*judge/i, /quality[_-]?gate/i |
| 6 | Testing Maturity | 10 | Test-to-source ratio, AI-specific tests (hallucination, groundedness) | Count test vs source files, regex for /hallucination/i, /groundedness/i |
| 7 | AI Observability | 10 | CloudWatch/DORA metrics, dashboard definitions, custom AI namespace | Regex for /cloudwatch/i, /dora/i, /deployment[_-]?frequency/i |
| 8 | Governance | 5 | Bedrock Guardrails, autonomy tiers, AI-specific IAM | Regex for /bedrock.*guardrail/i, /autonomy[_-]?tier/i |
| 9 | Agent Workflows | 8 | Strands/AgentCore/MCP patterns, agent tests, agent metrics | Glob for **/agent/**, regex for /\bstrands\b/i, /agentcore/i, /McpServer/i |
| 10 | Platform & Reuse | 5 | Prompt library, model gateway, RAG/Knowledge Base configs | Glob for prompts/, regex for /prompt[_-]?library/i, /rag/i |
| 11 | Documentation | 3 | AI development guidelines, ADRs mentioning AI, onboarding docs | File name patterns, content regex |
| 12 | Dependencies | 2 | AI SDKs in package.json/requirements.txt (Anthropic, Bedrock, LangChain, etc.) | Parse dependency files for AI package names |
The scanner runs git log --format='%B' -200 and counts AI-Origin trailers:
| AI-Origin % in last 200 commits | Points |
|---|---|
| >50% | 12 |
| >30% | 9 |
| >10% | 6 |
| >0% | 3 |
| 0% | 0 |
Plus 3 points if AI-Model: trailers are also present.
Each category produces evidence:
{
"category": "AI Tool Config",
"maxPoints": 10,
"earnedPoints": 8,
"evidence": [
{ "signal": "CLAUDE.md exists", "found": true, "points": 3, "detail": "Found at /CLAUDE.md" },
{ "signal": "Spec-first enforcement rules", "found": true, "points": 2, "detail": "Contains 'spec' + 'before'" },
{ "signal": "Kiro IDE config", "found": false, "points": 0, "detail": "No .kiro/ directory" },
{ "signal": "Bedrock model references", "found": true, "points": 3, "detail": "Found in 2 config files" }
]
}
| Percentage | Status | Meaning |
|---|---|---|
| ≥70% | GREEN | Strong — maintain and optimize |
| 40-69% | AMBER | Developing — specific actions needed |
| <40% | RED | Gap — priority remediation |
What it does: Structured 60-90 minute conversation using a detailed interview guide. 20 questions across 6 sections, each scored 0-5.
Materials:
interview/interview-guide.md — Full script with questions, probes, and “listen for” cuesinterview/scoring-sheet.md — Printable scoring form| Section | Questions | Max Pts | Focus |
|---|---|---|---|
| 1. AI Tooling Landscape | 3 | 15 | Which tools, adoption process, usage measurement |
| 2. Workflow & Specs | 4 | 20 | Feature flow, spec quality, AI in design, attribution/traceability |
| 3. CI/CD & Quality | 4 | 20 | AI validation in pipeline, bug tracking, quality measurement, DORA |
| 4. Metrics & Visibility | 3 | 15 | Executive dashboards, AI-dimensioned metrics, ROI reporting |
| 5. Governance & Security | 3 | 15 | Guardrails, access control, incident response |
| 6. Org & Culture | 3 | 15 | Ownership/sponsorship, AI onboarding, self-awareness |
Each question has a detailed rubric. Example — “What % of engineers use AI tools weekly?”:
| Score | Evidence |
|---|---|
| 0 | “Don’t know” |
| 1 | Rough guess, no data |
| 2 | License count only |
| 3 | Some usage data, not actively monitored |
| 4 | Active tracking with team breakdowns |
| 5 | Real-time dashboards with adoption trends |
Five binary yes/no questions, 4 points each = 20 points max:
| # | Factor | Points | Why It Matters |
|---|---|---|---|
| 1 | Executive Sponsor — C-level champion identified | 4 | Without exec backing, AI transformation stalls at team level |
| 2 | Budget Allocated — Explicit AI tooling budget approved | 4 | No budget = no sustained tool adoption |
| 3 | Dedicated Owner — Named person/team owns AI transformation | 4 | Nobody’s job = nobody does it |
| 4 | AWS Relationship — Existing AWS commitment or account | 4 | Reduces friction for Bedrock/CDK deployment |
| 5 | Team Size 20-200 — Sweet spot for PRISM D1 | 4 | Too small = no process needed; too large = different engagement |
These are typically collected during the interview (Section 6) or from the SA’s existing account knowledge.
blendedScore = (scannerScore × 0.4) + (interviewScore × 0.4) + ((orgReadiness / 20 × 100) × 0.2)
| Blended Score | Level | Name | What It Looks Like |
|---|---|---|---|
| 0-10 | L1.0 | Experimental | Ad hoc AI use, no metrics, no governance |
| 11-20 | L1.5 | Early Experimentation | Some tools adopted, grassroots, no standardization |
| 21-30 | L2.0 | Emerging Standardization | Company licenses, basic governance |
| 31-40 | L2.5 | Structured Adoption | Broad adoption, standards in place, informal metrics |
| 41-50 | L3.0 | Integrated Workflows | AI across full SDLC, eval gates, attribution, dedicated owner |
| 51-60 | L3.5 | Measured & Optimized | Bedrock evals, defect tracking, ROI reporting |
| 61-70 | L4.0 | AI-Native Practices | Agents handle workflows, autonomy tiers, sophisticated evals |
| 71-80 | L4.5 | Advanced AI-Native | Deep embedding, competitive advantage |
| 81-100 | L5.0 | Industry-Leading | Default mode for all work, >5x ROI |
| Verdict | Conditions | Action |
|---|---|---|
| READY_FOR_PILOT | blendedScore ≥ 21 AND orgReadiness ≥ 12 | Assign track B, C, or D |
| NEEDS_FOUNDATIONS | blendedScore ≥ 11 AND orgReadiness ≥ 8 | Assign track A |
| NOT_QUALIFIED | Below both thresholds | Exit with recommendations |
| Level | Track | Duration | Modules | What They Get |
|---|---|---|---|---|
| L1.0-L1.5 | A: Foundations | 2-week pre-work + 4-hour workshop | 00, 01, 02 | Basic AI toolchain setup, first agent, spec-driven dev |
| L2.0-L2.5 | B: Full Workshop | 1-week pre-work + 4-hour + 8-week pilot | All (00-06) | Complete AI-DLC with metrics, evals, dashboards, agents |
| L3.0-L3.5 | C: Accelerated | 2-hour targeted + 8-week pilot | 04, 05, 06 | Fill specific gaps (metrics, evals, dashboards) |
| L4.0+ | D: Advanced | Custom architecture review + 8-12 weeks | Custom | Multi-agent governance, AI FinOps, platform scaling |
The onboarding-router.ts generates a complete OnboardingPlan:
The reports/report-generator.ts produces the customer-facing assessment report in three formats:
| Format | Use Case | Features |
|---|---|---|
| Markdown | Print-ready customer handout | ASCII radar chart, tables |
| JSON | Programmatic use, re-rendering | Structured data, all scores |
| HTML/PDF | Styled web display, board presentation | SVG radar chart, color coding |
Three realistic examples are included:
| Company | Level | Verdict | Track |
|---|---|---|---|
| NovaPay (Series A, 6 eng) | L1.5 | NEEDS_FOUNDATIONS | A |
| Arcline Health (Series B, 14 eng) | L2.5 | READY_FOR_PILOT | B |
| Vectrix AI (Series C, 28 eng) | L3.5 | READY_FOR_PILOT | C |
Customer: Arcline Health (Series B, 14 engineers, healthcare data platform)
npx ts-node src/index.ts --repo /path/to/arcline-repo --verbose
Results:
SA runs the 60-minute interview:
Blended = (52 × 0.4) + (62 × 0.4) + ((12/20 × 100) × 0.2)
= 20.8 + 24.8 + 12.0
= 57.6
Level: L3.5 (Measured & Optimized) Verdict: READY_FOR_PILOT (57.6 ≥ 21, org 12 ≥ 12)
Level L3.0-L3.5 + READY_FOR_PILOT → Track C: Accelerated
Top 3 gaps:
Generated PDF includes radar chart showing strengths (Commit Hygiene, Tooling) and gaps (Observability, Agents, Governance), plus a 90-day roadmap with Week 1: deploy bootstrapper → Week 4: metrics flowing → Week 8: dashboards live + L3.5 target.
# 1. Scan
cd assessment/scanner && npx ts-node src/index.ts --repo /path/to/repo --output json --output-file ../reports/scan.json
# 2. Interview (manual — use the guide and scoring sheet)
# Fill in assessment/interview/scoring-sheet.md
# 3. Compute + Route
cd assessment && npx ts-node -e "
const { computeAssessment } = require('./scoring/scoring-model');
const { routeOnboarding } = require('./onboarding/onboarding-router');
const result = computeAssessment({ scannerScore: 52, interviewScore: 62, orgReadiness: { executiveSponsor: true, budgetAllocated: true, dedicatedOwner: true, awsRelationship: false, teamSizeAppropriate: true } });
console.log(result);
const plan = routeOnboarding(result, { name: 'Arcline Health', teamSize: 14, fundingStage: 'Series B' });
console.log(plan);
"
# 4. Generate report
cd assessment/reports && npx ts-node -e "
const { generateReport } = require('./report-generator');
// ... pass full assessment data
"
# 5. Generate PDF
python3 generate-pdfs.py