[Impl] Make text overview truncation Unicode-safe#217
Conversation
Quality Gatekeeper Review\nVerdict: NEEDS_CHANGES\nRisk: Low\nLane: product\n\nChecks:\n- [x] Linked issue present: #215\n- [x] Scope is clear\n- [x] Protected files unchanged in changed-file list\n- [x] No secret/session/prompt leakage visible from PR metadata\n- [ ] GitHub mergeStateStatus is clean\n- [ ] GitHub checks reported\n- [ ] Full local review completed\n\nNotes:\nThis PR appears to target the remaining #215 acceptance gap, but GitHub currently reports and there are no checks reported on the branch. Per Quality rules, a dirty PR cannot PASS even if the intended patch is low risk.\n\nDecision:\nPlease sync this branch with current , resolve conflicts, and rerun the listed validation. After GitHub reports a clean merge state and checks are available, relabel as for full Quality review.\n\nHandoff to: Product implementation. |
|
Quality correction for the previous comment: the shell stripped two literal fields from the text. Current decision remains NEEDS_CHANGES. Concrete blocker:
Required before Quality can run full review:
Handoff to: Product implementation. |
|
Event: Quality checkpoint Evidence:
Decision: do not treat this as ready-for-review while mergeStateStatus is DIRTY. Requested adjustment:
|
…xt-truncation # Conflicts: # internal/engine/engine_test.go # internal/engine/report.go
|
Synced branch with current origin/master and resolved conflicts in the original PR branch. Re-run validation after sync:
|
|
Event: Validation Evidence:
Manual acceptance check:
Decision: Product validation passes. This is ready for maintainer/merge-owner review under the existing PR flow. |
Quality Gatekeeper ReviewVerdict: PASS Checks:
Notes:
Decision: PASS and eligible for squash merge. |
|
Event: Post-merge validation Evidence: merged as User value confirmed: text overview truncation now preserves valid UTF-8 for non-English session/tool names across incident evidence and recent-anomaly rows. |
Closes #215
Summary
User value
Terminal-first users with non-English project, path, session, or tool names get readable overview output without broken UTF-8 replacement characters.
Scope
Changed files
internal/engine/report.gointernal/engine/incident_timeline.gointernal/engine/engine_test.goTest plan
go test ./internal/engine -run 'TestReportOverviewText(ShowsIncidentAndAuthorityCues|TruncatesUnicodeSafely)'go test ./internal/enginego test ./...go build -o /tmp/agenttrace-parser-check ./cmd/agenttrace/tmp/agenttrace-parser-check --doctor || true/tmp/agenttrace-parser-check --demo --overview -f text >/tmp/agenttrace-parser-overview-215.txt/tmp/agenttrace-parser-check --demo --overview -f json >/tmp/agenttrace-parser-overview-215.json/tmp/agenttrace-parser-check --demo --overview -f markdown -o /tmp/agenttrace-parser-overview-215.md >/tmp/agenttrace-parser-overview-215.md.stdout/tmp/agenttrace-parser-check --demo --overview -f html -o /tmp/agenttrace-parser-overview-215.html >/tmp/agenttrace-parser-overview-215.html.stdoutrg -n "Incident timeline|Tool authority|test_or_build|Last milestone|Touched surface|Recent Anomalies" /tmp/agenttrace-parser-overview-215.txt /tmp/agenttrace-parser-overview-215.md /tmp/agenttrace-parser-overview-215.htmlnode -e "const fs=require('fs'); const txt=fs.readFileSync('/tmp/agenttrace-parser-overview-215.txt','utf8'); if(txt.includes('\\uFFFD')) throw new Error('replacement character in text overview'); const json=JSON.parse(fs.readFileSync('/tmp/agenttrace-parser-overview-215.json','utf8')); if(!json.summary || !json.summary.tool_authority) throw new Error('missing authority summary'); if(!Array.isArray(json.incident_timelines)) throw new Error('missing incident timelines'); console.log('overview artifacts ok');"AGENTTRACE_BIN=/tmp/agenttrace-parser-check AGENTTRACE_CI_OUT=/tmp/agenttrace-parser-ci-output-215 scripts/ci/check-output-contract.shAGENTTRACE_BIN=/tmp/agenttrace-parser-check AGENTTRACE_CI_OUT=/tmp/agenttrace-parser-ci-deterministic-215 scripts/ci/check-deterministic-output.shAGENTTRACE_BIN=/tmp/agenttrace-parser-check AGENTTRACE_CI_OUT=/tmp/agenttrace-parser-ci-semantics-215 scripts/ci/check-report-semantics.shAGENTTRACE_BIN=/tmp/agenttrace-parser-check AGENTTRACE_CI_OUT=/tmp/agenttrace-parser-ci-docs-215 scripts/ci/check-docs-commands.shscripts/ci/check-release-surfaces.shscripts/ci/check-pages-artifact.sh sitegit diff --checkFixture/privacy note
Uses synthetic unit-test strings and demo output only. No real user prompts, logs, tokens, paths, or secrets were added.
Risk
Low. The change is limited to display truncation in terminal text formatting and preserves compact output limits.
Non-goals
Blackboard events
impl/215-unicode-text-truncationfromorigin/masterafter confirming stale branchimpl/213-text-overview-evidencewas merged in PR [Impl] Surface incident and tool authority cues in text overview #214.Release impact
patch: text overview visible output truncation becomes Unicode-safe. No parser/source compatibility change, no CLI behavior change, no JSON/Markdown/HTML contract change, no install/package docs change.
Handoff suggestion
Handoff to: Growth after merge if release notes are being collected.
Suggested release note: text overview truncation now preserves valid UTF-8 for non-English session and tool names.