Skip to content

feat: let bounded work prose carry paragraphs - #2

Merged
nothingnesses merged 1 commit into
mainfrom
impl/support-safe-work-paragraphs
Sep 1, 2026
Merged

feat: let bounded work prose carry paragraphs#2
nothingnesses merged 1 commit into
mainfrom
impl/support-safe-work-paragraphs

Conversation

@nothingnesses

Copy link
Copy Markdown
Owner

Summary

  • Allow paragraph breaks in bounded work prose fields.
  • Keep identifiers and structural values single-line.
  • Indent every human-output continuation and preserve exact JSON strings.
  • Reject other controls and Unicode line separators.

Verification

  • just ci passed with 429 unit tests and all integration tests.
  • Independent product review completed.
  • Separate triage reproduced both findings.
  • The human accepted bare-label output for empty prose.

This pull request does not include the later review-surface or failure-cause investigations.

A step could not explain its problem without cramming it onto one line:
one predicate rejected every control character in every field, prose and
structure alike.

Split the boundary per field instead of weakening the predicate.
`reject_structural_text` still rejects everything for `selected_action`,
step `id` and each `blocked_by` id, which are printed inline inside
composed lines. `reject_prose_text` exempts exactly one character, the
line feed, for `user_problem`, `change`, each `acceptance` item and
`why_next`. Both now also reject U+2028 and U+2029, which are not control
characters and so passed before, and diagnostics name them as line and
paragraph separators rather than as controls.

The human `next` brief keeps a single-line value on its existing line and
puts every continuation line behind a `  |` gutter, blank paragraph lines
included. No top-level line of that output begins with a space, so prose
reading `SELECTED ACTION`, `acceptance:`, `- forged` or `why next:`
renders as the indented continuation it is. `--json` preserves the
accepted strings exactly. Limits, determinism and status semantics are
unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@nothingnesses
nothingnesses merged commit 77e1e7a into main Sep 1, 2026
1 check passed
@nothingnesses
nothingnesses deleted the impl/support-safe-work-paragraphs branch September 1, 2026 15:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant