Skip to content

Commit fc81eca

Browse files
authored
fix(reports): distinguish period outcomes from current source state (#7708)
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
1 parent 358bc25 commit fc81eca

2 files changed

Lines changed: 19 additions & 5 deletions

File tree

‎docs/product/periodic-reports.md‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ reader. The six source links retain the recorded Task address in both formats.
3939
The fixed synthetic prose qualifies transport and reading mechanics, not live
4040
editorial quality or the address's availability. No layout or editor changed.
4141

42+
New portfolio and local-Session editorial requests share the same time and
43+
content requirements. A Task completed after the period end remains a later
44+
state observation; only timestamped evidence inside `[start, end)` supports
45+
period progress. Older history, later changes, unknown times and unavailable
46+
views remain distinct. The author is asked to retain concrete outcomes,
47+
quantified comparisons, counterevidence and the responsible owner's next
48+
action, while stating shared limitations once. These are authoring requirements,
49+
not a semantic validator or proof of model compliance. Existing frozen requests
50+
and reports retain their original requirements and bytes.
51+
4252
The public browser fixture also keeps the original private outbound owner
4353
running through its periodic source-history check. Its shared synthetic
4454
provider returns the stored messages with source-bound pagination and time

‎loopx/capabilities/periodic_report/private_generation.py‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@
2020
)
2121

2222

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+
2330
def attempt_directory(root: Path, window: dict[str, Any]) -> Path:
2431
return _attempt_dir(root, window["goal_id"], cadence_intent(window))
2532

@@ -132,9 +139,8 @@ def prepare_private_report(*, root: Path, window: dict[str, Any], read,
132139
"Read full frozen source records for substantive claims; excerpts and Agent claims are not independent verification.",
133140
"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.",
134141
"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.",
136142
"A due unchanged window still needs a substantive report; observations or CI counts are not business progress.",
137-
]
143+
] + list(_SOURCE_NARRATIVE_REQUIREMENTS)
138144
request["request_digest"] = _canonical_digest(request)
139145
atomic_write_json(path, request)
140146
return request
@@ -207,11 +213,9 @@ def prepare_session_report(*, root: Path, window: dict[str, Any], actor: dict[st
207213
source_fact_binding="frozen_source_v2")
208214
request["narrative_contract"]["requirements"] += [
209215
"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.",
212216
"Separate native Task completion, independent outcome evidence and actual message delivery. Preserve failed, blocked and unreadable evidence.",
213217
"A due unchanged period still needs a report; exclude report generation itself from business progress.",
214-
]
218+
] + list(_SOURCE_NARRATIVE_REQUIREMENTS)
215219
request["request_digest"] = _canonical_digest(request)
216220
folder.mkdir(parents=True, exist_ok=True)
217221
atomic_write_json(folder / "source.json", source)

0 commit comments

Comments
 (0)