From 57036d93f13de1113549d9d16352124062b42fa9 Mon Sep 17 00:00:00 2001 From: "shipmill-romamo[bot]" <338557544+shipmill-romamo[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 20:34:13 +0300 Subject: [PATCH] Record D-8 from the answer on #63 Co-Authored-By: Claude Opus 5.5 --- docs/decisions.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/decisions.md b/docs/decisions.md index 9448046..03553f6 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -59,3 +59,11 @@ entry that supersedes it, never by editing an old one. - Why: A replayed record can't be approved (D-2), so letting it supersede a live proposal leaves the operator with nothing to approve - Applies to: sdk/src/cloudfall/decision.py, sdk/src/cloudfall/app.py, agent investigate --replay, cloudfall why - Enforced by: review + +## D-8: The finding and recorded step arguments are bounded + +- Decided: 2026-10-09, in cloudfall-dev/cloudfall#63 +- Rule: The investigation record keeps at most 8000 characters of finding.rootCause and of finding.why, keeping the start and marking the cut as D-6 does, and the schema bounds both; a tool call whose parsed arguments serialize to more than 8000 characters is refused before it runs, recorded as an invalid step with empty arguments, so spec.steps[].arguments only ever holds arguments that ran whole +- Why: All three come from the model's output, which can quote host output; structured arguments can't be cut and stay meaningful, so refusing keeps steps[] a true account of what ran +- Applies to: sdk/src/cloudfall/investigation.py, config/schemas/v1/agent-investigation.schema.json +- Enforced by: review