feat(content): the physical world stops being a denied class #767

Merged
coilysiren merged 2 commits from olaf/remove-irl-physical into main 2026-08-14 03:53:37 +00:00
Member

🤖 Filed by Claude Code on Kai's behalf.

Authored by Olaf (OPS). Kai's call, 2026-08-13: delete the rule and restart.

Closes #764

Why

irl-physical fails the criterion in #178 — declining to say what the weather is risks neither a security incident nor a mid-stream shutdown, so it is not a blocker. The class drew its line at capability rather than at harm, which is why it also blocked bounded reference lookups nobody had in mind when it was written (coilyco-bridge/deploy#495).

What moved

File Change
agent/content-classes.yaml class removed
.agents/skills/.../boundaries.md member-facing rule removed
docs/sirens-echo-content-classes.md "Where allow-by-default stops" section removed
agent/phrases.yaml not-real-world phrase removed with the rule it served
agent/rendered/sirens-echo.prompt.txt regenerated via cmd/sirens-echo-prompt
internal/community/boundarydoc_test.go map entry removed
internal/community/contentclass_test.go ordinary-loses-to-sensitive test re-pointed
internal/community/contentgate_test.go deny fixture re-pointed

Gate coverage is unchanged

contentgate_test.go used irl-physical as its generic deny fixture — parse, whitespace, backtick, case-insensitivity, and class-pairing. None of that was semantic. Those move to medical-legal-advice with the same case count, so this is a fixture swap and not a coverage reduction. contentclass_test.go's ordinary-vs-sensitive test moves the same way and still runs against the real taxonomy.

boundarydoc_test.go asserts the taxonomy and the policy prose agree, so it would have failed had the docs not moved in the same commit. Working as designed.

Deliberately not in this PR

Postal addresses. The removed class bundled six things; five were capability limits with no third party involved. Disclosing a member's physical location is third-party harm, which #178 explicitly holds the line on, and it belongs in the member-PII lane beside ForbidPrincipalEcho rather than in a content class. Tracked at #766 rather than folded in here, because it is a policy call and this change should not wait on it.

That does mean merging this leaves member-location disclosure unenforced until #766 is decided. Flagging it plainly rather than burying it — #766 lays out the three options including explicitly accepting the risk, which is defensible under #178.

Verification

  • go build ./... clean
  • go test ./... all green
  • pre-commit run on staged files: all hooks pass
  • go run ./cmd/sirens-echo-promptsirens-echo rewritten (20866 → 20640 prompt bytes), sirens-deep reported current, its bundle never carried the rule
  • grep -ri "irl.physical|physical world" returns nothing outside .git

Not verified: live behaviour. This changes the model's instruction surface, so the real check is a turn that would previously have been refused. Worth one before the 2026-08-19 demo.

> 🤖 Filed by Claude Code on Kai's behalf. **Authored by Olaf (OPS).** Kai's call, 2026-08-13: delete the rule and restart. Closes https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/764 ## Why `irl-physical` fails the criterion in https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/178 — declining to say what the weather is risks neither a security incident nor a mid-stream shutdown, so it is not a blocker. The class drew its line at **capability** rather than at **harm**, which is why it also blocked bounded reference lookups nobody had in mind when it was written (https://forgejo.coilysiren.me/coilyco-bridge/deploy/issues/495). ## What moved | File | Change | | --- | --- | | `agent/content-classes.yaml` | class removed | | `.agents/skills/.../boundaries.md` | member-facing rule removed | | `docs/sirens-echo-content-classes.md` | "Where allow-by-default stops" section removed | | `agent/phrases.yaml` | `not-real-world` phrase removed with the rule it served | | `agent/rendered/sirens-echo.prompt.txt` | regenerated via `cmd/sirens-echo-prompt` | | `internal/community/boundarydoc_test.go` | map entry removed | | `internal/community/contentclass_test.go` | ordinary-loses-to-sensitive test re-pointed | | `internal/community/contentgate_test.go` | deny fixture re-pointed | ## Gate coverage is unchanged `contentgate_test.go` used `irl-physical` as its **generic deny fixture** — parse, whitespace, backtick, case-insensitivity, and class-pairing. None of that was semantic. Those move to `medical-legal-advice` with the same case count, so this is a fixture swap and not a coverage reduction. `contentclass_test.go`'s ordinary-vs-sensitive test moves the same way and still runs against the real taxonomy. `boundarydoc_test.go` asserts the taxonomy and the policy prose agree, so it would have failed had the docs not moved in the same commit. Working as designed. ## Deliberately not in this PR **Postal addresses.** The removed class bundled six things; five were capability limits with no third party involved. Disclosing a member's physical location is third-party harm, which #178 explicitly holds the line on, and it belongs in the member-PII lane beside `ForbidPrincipalEcho` rather than in a content class. Tracked at https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/766 rather than folded in here, because it is a policy call and this change should not wait on it. That does mean **merging this leaves member-location disclosure unenforced** until #766 is decided. Flagging it plainly rather than burying it — #766 lays out the three options including explicitly accepting the risk, which is defensible under #178. ## Verification - `go build ./...` clean - `go test ./...` all green - `pre-commit run` on staged files: all hooks pass - `go run ./cmd/sirens-echo-prompt` — `sirens-echo` rewritten (20866 → 20640 prompt bytes), `sirens-deep` reported current, its bundle never carried the rule - `grep -ri "irl.physical|physical world"` returns nothing outside `.git` Not verified: live behaviour. This changes the model's instruction surface, so the real check is a turn that would previously have been refused. Worth one before the 2026-08-19 demo.
feat(content): the physical world stops being a denied class
All checks were successful
ci / test (pull_request) Successful in 35s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
ci / image-build (pull_request) Successful in 21s
4a490569dc
irl-physical fails the criterion set in issue 178: declining to say what the
weather is risks neither a security incident nor a shutdown, so it is not a
blocker. The class was drawn at capability rather than at harm, and it blocked
bounded reference lookups nobody had in mind when it was written.

The class bundled six things. Five - transit, directions, weather, real-world
scheduling, delivery - have no third party in the picture and go without
ceremony. Postal addresses is different: disclosing a member's physical
location is third-party harm, which 178 holds the line on. That piece is NOT
re-landed here, because it belongs in the member-PII lane beside
ForbidPrincipalEcho rather than in a capability class. Tracked separately so it
is not silently dropped.

contentgate_test.go used irl-physical as its generic deny fixture for parse,
whitespace, backtick, and class-pairing cases, none of it semantic. Those move
to medical-legal-advice with the same case count, so gate coverage is
unchanged. contentclass_test.go's ordinary-loses-to-sensitive test moves the
same way and keeps testing the real taxonomy.

The not-real-world canonical phrase goes with the rule it served; no-tool
covers an honest "there is no weather tool here" more generally.

agent/rendered/sirens-echo.prompt.txt regenerated via cmd/sirens-echo-prompt.
sirens-deep is unchanged, its bundle never carried the rule.

closes #764

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into olaf/remove-irl-physical
All checks were successful
ci / test (pull_request) Successful in 34s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
ci / image-build (pull_request) Successful in 20s
f38e97d158
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>

# Conflicts:
#	agent/rendered/sirens-echo.prompt.txt
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo!767
No description provided.