Skip to content

Move limits to claim, write, and action boundaries - #828

Merged
atomchung merged 1 commit into
mainfrom
codex/issue-827-permission-boundaries
Aug 20, 2026
Merged

Move limits to claim, write, and action boundaries#828
atomchung merged 1 commit into
mainfrom
codex/issue-827-permission-boundaries

Conversation

@atomchung

Copy link
Copy Markdown
Owner

Summary

  • let FOMO Kernel engage with investment decisions and explicit candidate discovery with or without a recorded book
  • move missing-book and missing-price handling from whole-answer refusal to claim-level portfolio boundaries
  • replace universal question, chart, instrument, and attempt ceilings with decision-value, coverage, cost, and latency stops
  • preserve engine ownership of portfolio-derived numbers, provenance, privacy, explicit canonical writes, and external-action truth
  • add a versioned three-locale trigger corpus and retire fixed refusal-shape evaluation gates
  • strengthen candidate fan-out so exploration records zero canonical evaluation rows and only the selected candidate records exactly one

User impact

Before this candidate, a missing ticker or recorded book, an open candidate search, or a request that benefited from multiple tools could stop the Skill before it gave its best supported recommendation. After this candidate, those inputs scope what the answer may claim rather than whether it may reason, research, compare, and recommend.

Simple questions remain text-first. Relevant research, tools, and visuals are permitted when requested or materially useful. Candidate discovery must disclose its universe, filters, as-of point, exclusions, and material coverage limits rather than claiming exhaustive market coverage.

Integrity retained

  • portfolio-derived numbers and rule effects remain engine-owned
  • public facts require source and as-of; user statements and model judgment remain distinct
  • exploratory candidates remain ephemeral; durable state uses the canonical commit path
  • recommendations never claim a trade, send, publish, or other external action happened without confirmation and an owning integration
  • private holdings, trades, motives, and answers stay local/private

Validation

  • python3.12 tests/run_all.py --group product — 48/48 suites passed
  • python3.12 tests/run_all.py --group qa-eval — 11/11 suites passed
  • trigger-v2 mutation suite — 14/14 passed
  • episode checker probes — 96/96 passed
  • episode bank — 11/11 replayed clean
  • final adversarial read-only review — CLEAN

Pending acceptance before ready-for-review

This PR is intentionally a draft. The remaining product verdict is the actual old-vs-new Skill comparison required by #827:

  • frozen baseline bea5952af76354bcc01a3dc1af457e92a98dfa70
  • candidate c14ceea6f1e4e66336918aea1d2b34f9de00b30c
  • same host, model, frozen inputs, and lookup snapshot across all four required scenes
  • blind owner usefulness preference, with at least three of four scenes favoring the candidate

The next experiment may use private-local investment_note material, but private inputs and transcripts must not enter this public PR; only synthetic or sanitized receipts may be attached.

Refs #827

@atomchung

Copy link
Copy Markdown
Owner Author

Acceptance receipt (sanitized) — #827 four-scene actual-Skill A/B

  • Arms: frozen baseline bea5952 vs candidate c14ceea (this head), isolated detached worktrees + isolated state roots.
  • Same host and model both arms (Claude Code subagent, claude-opus-5), frozen inputs and lookup snapshot, scripted persona; owner-live private-local material stayed local per the privacy gate — this comment is the sanitized receipt.
  • Blind pairwise owner verdict: candidate preferred in scenes 1, 2, 3; scene 4 tie → 3/4, gate met.
  • Integrity audit: no invented portfolio numbers, no user-statement laundering, no unconfirmed action claims, in either arm. Exploration stayed ephemeral (appended: 0) in 18 of 20 consider calls across both arms.
  • One durable-write scope finding per arm (not a relative regression): candidate persisted an unselected 'still-live' recommendation in the discovery scene (2 open canonical rows); baseline persisted a rejected candidate + declined resolution in the selection scene (3 rows vs the contracted 1). Follow-up issue next.
  • Cross-cutting owner feedback on BOTH arms: answers too long to finish reading — verbosity is the next usefulness bottleneck. Follow-up issue next.

Per the PR's pending-acceptance section, exiting draft and merging.

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