# Episode 6 — Local Test Results
_Generated: 2026-05-10 23:42:33_

**Environment:** `https://org0cdef8cc.crm.dynamics.com`

## Summary: ✅ 9/9 passing

| Test | Result | Time | Detail |
|------|--------|------|--------|
| P1: lc_knowledgearticle in LaunchControl solution | ✅ | 4093ms | componenttype=1 (Entity), solution=c8801cd9-8842-f111-bec6-70a8a59d15f0 |
| P2: >=4 lc_knowledgearticle records | ✅ | 442ms | found 4: Launch Readiness Playbook, Escalation Policy, Q3 Widget Pro - Product Launch Brief, Postmortem - Q1 Widget Mini Launch |
| P3: All records have summary + document populated | ✅ | 1633ms | all 4 records complete |
| P4: All 4 KB categories represented | ✅ | 0ms | Policy, Playbook, Spec, Postmortem all present |
| P5: CustomAPI lc_CalculateLaunchReadiness exists | ✅ | 301ms | id=ec5ae21a-d742-f111-bec6-000d3a336093 |
| P6: system-prompt is in sync across files | ✅ | 7ms | 6403 chars in sync |
| T1: Knowledge OData query returned text | ✅ | 0ms | all 4 summaries >=5 words; min=18, max=29 |
| T2: Smoke test — invoke lc_CalculateLaunchReadiness | ✅ | 608ms | Score=38.8, Verdict=NO-GO |
| T3: lc_githubissue virtual entity returns rows | ✅ | 1206ms | 6 issue(s) returned |

## Details

### P1: lc_knowledgearticle in LaunchControl solution
- Result: PASS
- Time: 4093ms
- Notes: componenttype=1 (Entity), solution=c8801cd9-8842-f111-bec6-70a8a59d15f0

```json
{
  "metaid": "bc8a17fc-eb47-f111-bec6-00224805fc91"
}
```

### P2: >=4 lc_knowledgearticle records
- Result: PASS
- Time: 442ms
- Notes: found 4: Launch Readiness Playbook, Escalation Policy, Q3 Widget Pro - Product Launch Brief, Postmortem - Q1 Widget Mini Launch

```json
[
  {
    "@odata.etag": "W/\"7198513\"",
    "lc_category": 10600101,
    "lc_title": "Launch Readiness Playbook",
    "lc_summary": "Standard procedure for product launches: phases, readiness gates, slip rules, roles, rituals, and escalation hand-off. Source of truth used by the Launch Coordinator agent for go/no-go and process questions.",
    "lc_knowledgearticleid": "44f07353-ef47-f111-bec6-00224805fe7a"
  },
  {
    "@odata.etag": "W/\"7198522\"",
    "lc_category": 10600100,
    "lc_title": "Escalation Policy",
    "lc_summary": "How blockers are escalated. Defines severities, time-based triggers, channels, quiet hours, acknowledgement, and override rules. Used at runtime by the lc_EscalateBlocker skill.",
    "lc_knowledgearticleid": "0a95c65f-ef47-f111-bec6-00224805fe7a"
  },
  {
    "@odata.etag": "W/\"7198529\"",
    "lc_category": 10600102,
    "lc_title": "Q3 Widget Pro - Product Launch Brief",
    "lc_summary": "Fictional product brief covering personas, scope, readiness gates, risks, mitigations, and communications for the Q3 Widget Pro launch.",
    "lc_knowledgearticleid": "1f3bb5c4-ef47-f111-bec6-00224805fe7a"
  },
  {
    "@odata.etag": "W/\"7198536\"",
    "lc_category": 10600103,
    "lc_title": "Postmortem - Q1 Widget Mini Launch",
    "lc_summary": "Postmortem for the Q1 Widget Mini launch. Documents what went well, what went wrong, action items, and lessons learned that feed into future launches.",
    "lc_knowledgearticleid": "31a4b2ca-ef47-f111-bec6-00224805fe7a"
  }
]
```

### P3: All records have summary + document populated
- Result: PASS
- Time: 1633ms
- Notes: all 4 records complete

### P4: All 4 KB categories represented
- Result: PASS
- Time: 0ms
- Notes: Policy, Playbook, Spec, Postmortem all present

### P5: CustomAPI lc_CalculateLaunchReadiness exists
- Result: PASS
- Time: 301ms
- Notes: id=ec5ae21a-d742-f111-bec6-000d3a336093

```json
{
  "@odata.etag": "W/\"7998410\"",
  "displayname": "Calculate Launch Readiness",
  "uniquename": "lc_CalculateLaunchReadiness",
  "customapiid": "ec5ae21a-d742-f111-bec6-000d3a336093"
}
```

### P6: system-prompt is in sync across files
- Result: PASS
- Time: 7ms
- Notes: 6403 chars in sync

### T1: Knowledge OData query returned text
- Result: PASS
- Time: 0ms
- Notes: all 4 summaries >=5 words; min=18, max=29

### T2: Smoke test — invoke lc_CalculateLaunchReadiness
- Result: PASS
- Time: 608ms
- Notes: Score=38.8, Verdict=NO-GO

```json
{
  "request": {
    "lc_LaunchName": "Q3 Widget Launch"
  },
  "response": {
    "@odata.context": "https://org0cdef8cc.crm.dynamics.com/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.lc_CalculateLaunchReadinessResponse",
    "lc_ReadinessScore": 38.8,
    "lc_ReadinessSummary": "Launch: Q3 Widget Launch\nMilestones evaluated: 16\n\n- [IN PROGRESS ] Smart Widget Pro GA (60/100)\n- [IN PROGRESS ] Smart Widget Pro v1.0 release (2026Q3) (60/100)\n- [AT RISK     ] Achieve 99.9% widget API SLA (50/100)\n- [AT RISK     ] Widget mobile SDK alpha (2026Q3) (50/100)\n- [IN PROGRESS ] Onboard 50 paying customers in beta (60/100)\n- [IN PROGRESS ] Widget admin portal v2 (2026Q3) (60/100)\n- [BLOCKED     ] Customer telemetry pipeline (2026Q3) (0/100)\n- [NOT STARTED ] Reduce widget P95 latency below 200ms (20/100)\n- [NOT STARTED ] Complete SOC2 Type II for widgets (20/100)\n- [IN PROGRESS ] Multi-region failover rollout (2026Q4) (60/100)\n- [NOT STARTED ] Establish widget partner program (20/100)\n- [IN PROGRESS ] Widget v1 API deprecation (2027Q1) (60/100)\n- [BLOCKED     ] EMEA datacenter rollout (2026Q4) (0/100)\n- [NOT STARTED ] Localize widgets for EMEA (20/100)\n- [IN PROGRESS ] Beta program offboarding (2026Q4) (60/100)\n- [NOT STARTED ] Sunset legacy widget v1 API (20/100)\n\nReadiness Score: 38.8/100\nVerdict: NO-GO",
    "lc_Verdict": "NO-GO"
  }
}
```

### T3: lc_githubissue virtual entity returns rows
- Result: PASS
- Time: 1206ms
- Notes: 6 issue(s) returned

```json
[
  {
    "lc_assignee": "Unassigned",
    "lc_state": "open",
    "lc_issuenumber": 6,
    "lc_name": "Legal: OSS license compliance check",
    "lc_githubissueid": "0000cdab-0000-0000-0000-000006000000",
    "lc_labels": "",
    "lc_description": "Verify all third-party dependencies have compatible licenses.",
    "lc_url": "https://github.com/jamesoleinik/launch-control/issues/6"
  },
  {
    "lc_assignee": "Unassigned",
    "lc_state": "open",
    "lc_issuenumber": 5,
    "lc_name": "Marketing: Landing page copy needs VP approval",
    "lc_githubissueid": "0000cdab-0000-0000-0000-000005000000",
    "lc_labels": "",
    "lc_description": "Blocked until VP returns from vacation Aug 25.",
    "lc_url": "https://github.com/jamesoleinik/launch-control/issues/5"
  },
  {
    "lc_assignee": "Unassigned",
    "lc_state": "open",
    "lc_issuenumber": 4,
    "lc_name": "Security: Rotate pre-launch API keys",
    "lc_githubissueid": "0000cdab-0000-0000-0000-000004000000",
    "lc_labels": "",
    "lc_description": "All pre-launch API keys must be rotated before GA.",
    "lc_url": "https://github.com/jamesoleinik/launch-control/issues/4"
  }
]
```
