{ "$comment": "ACTIVITY-WP-0016-T02. Strict, bounded contract for the daily WSJF triage report. The per-item 'recommendations' schema is intentionally strict on STRUCTURE (types + required keys) so the T03 boundary parser can validate each recommendation independently and quarantine only the malformed ones. 'maxItems' is a producer hint (honoured by llm-connect constrained decoding and by the prompt); it is deliberately NOT hard-enforced by the in-repo validator, because rejecting a whole report for having too many items would reproduce the monolithic-failure bug WP-0016 exists to remove. Over-count is mitigated in T03 (keep top-N by rank, quarantine the rest). Value-domain vocabularies (action/confidence) are documented in the prompt and enforced by T04 guardrails with mitigation, not as brittle hard-fail enums here.", "type": "object", "required": ["summary", "recommendations"], "properties": { "summary": { "type": "string" }, "recommendations": { "type": "array", "maxItems": 7, "items": { "type": "object", "required": ["rank", "candidate", "action", "why"], "properties": { "rank": { "type": "integer" }, "candidate": { "type": "string" }, "action": { "type": "string" }, "why": { "type": "string" }, "confidence": { "type": "string" }, "wsjf": { "type": "object", "properties": { "score": { "type": "number" }, "strategic_value": { "type": "number" }, "time_criticality": { "type": "number" }, "risk_reduction": { "type": "number" }, "opportunity_enablement": { "type": "number" }, "job_size": { "type": "number" } } } } } } } }