|
20 | 20 | ) |
21 | 21 |
|
22 | 22 |
|
| 23 | +_SOURCE_NARRATIVE_REQUIREMENTS = ( |
| 24 | + "Current source state is observed at collection time, not reconstructed as of the period end. Disclose the collection time when available and retain unreadable views as gaps.", |
| 25 | + "Use recorded completion/evidence times for the exact half-open window [window.start_at, window.due_at). Separate its outcomes, older history and changes at or after its end; a later completed Task is not proof of an in-window outcome. Unknown times stay unknown.", |
| 26 | + "Describe current work and relevant completed Tasks. Preserve concrete outcomes, quantified before/after comparisons, relevant counterevidence and the responsible owner's next action in the body. State shared limitations once; supporting evidence must not crowd out the substantive findings.", |
| 27 | +) |
| 28 | + |
| 29 | + |
23 | 30 | def attempt_directory(root: Path, window: dict[str, Any]) -> Path: |
24 | 31 | return _attempt_dir(root, window["goal_id"], cadence_intent(window)) |
25 | 32 |
|
@@ -132,9 +139,8 @@ def prepare_private_report(*, root: Path, window: dict[str, Any], read, |
132 | 139 | "Read full frozen source records for substantive claims; excerpts and Agent claims are not independent verification.", |
133 | 140 | "Recorded source references are scoped provenance, not proof of access, public status or publication permission. Keep unverified references explicit; never infer a URL from a digest or reuse private sources for another audience.", |
134 | 141 | "Distinguish implementation, merged source, installed adoption and actual original-message delivery.", |
135 | | - "Describe current and relevant completed tasks, counterevidence, source gaps and concrete next steps.", |
136 | 142 | "A due unchanged window still needs a substantive report; observations or CI counts are not business progress.", |
137 | | - ] |
| 143 | + ] + list(_SOURCE_NARRATIVE_REQUIREMENTS) |
138 | 144 | request["request_digest"] = _canonical_digest(request) |
139 | 145 | atomic_write_json(path, request) |
140 | 146 | return request |
@@ -207,11 +213,9 @@ def prepare_session_report(*, root: Path, window: dict[str, Any], actor: dict[st |
207 | 213 | source_fact_binding="frozen_source_v2") |
208 | 214 | request["narrative_contract"]["requirements"] += [ |
209 | 215 | "Use only this original Goal's frozen evidence and permitted artifacts; no portfolio or other Goal access is granted.", |
210 | | - "Current Task status is observed at collection time, not reconstructed as of the period end.", |
211 | | - "Use recorded completion/evidence times to distinguish this fixed window's outcomes, older history and current open work; unknown times stay unknown.", |
212 | 216 | "Separate native Task completion, independent outcome evidence and actual message delivery. Preserve failed, blocked and unreadable evidence.", |
213 | 217 | "A due unchanged period still needs a report; exclude report generation itself from business progress.", |
214 | | - ] |
| 218 | + ] + list(_SOURCE_NARRATIVE_REQUIREMENTS) |
215 | 219 | request["request_digest"] = _canonical_digest(request) |
216 | 220 | folder.mkdir(parents=True, exist_ok=True) |
217 | 221 | atomic_write_json(folder / "source.json", source) |
|
0 commit comments