Skip to content

docs(identity): forbid unsourced quantitative or factual claims#67

Merged
dembrane-sam-bot merged 1 commit into
mainfrom
sam/update-no-unsourced-numbers
May 24, 2026
Merged

docs(identity): forbid unsourced quantitative or factual claims#67
dembrane-sam-bot merged 1 commit into
mainfrom
sam/update-no-unsourced-numbers

Conversation

@dembrane-sam-bot
Copy link
Copy Markdown
Contributor

What is this change?

Adds a new bullet point to src/identity.md under honesty rules explicitly forbidding fabrication of quantitative or factual claims in reviews, PR descriptions, and comments.

What did Sam notice that led to this?

During an Opus mentor review of PR #62, the mentor noticed that Sam (Flash) made a quantitative claim in analysis about unit test assertions that was not backed by real committed measurements, pointing out a critical gap in our honesty guardrails.

Tier?

Tier 2 (Identity change)

Confidence?

100% confident. This is a vital alignment rule to prevent hallucinations from creeping into our reviews and metrics.

spashii added a commit that referenced this pull request May 24, 2026
#68)

## What this enables

Slack-triggered sessions can't exit cleanly anymore without **closing
the loop** — defined as: a `chat.postMessage` / `chat.update` must come
AFTER the last substantive outward-facing tool call in the session. An
ACK at the start followed by work + silence does NOT close the loop.

## The corrected rule (timing-based, not 'any post')

**Substantive outward-facing** (operator expects a report):
- `gh pr create / edit / merge`, other non-Slack bash
- `consult_opus`
- `worker` / `parallel_workers`
- `edit_file` / `write_file` outside `/data/journal/`
- `fetch_url`

**Inward** (operator doesn't need a report):
- `read_file`, `grep`, `glob_files`
- Journal writes (`/data/journal/`)
- Slack housekeeping bash (`setStatus`, `reactions.add`,
`conversations.replies`)

`closed_loop` is True iff a post comes AFTER the last outward call (or
no outward work happened at all — a question Sam answered without
tools).

If the gate fires, the daemon spawns a retry whose only job is to read
the previous session's audit-log slice and post the summary. The retry
agent is told explicitly **not to trust the journal** (since the
journal-claiming-without-evidence pattern is the parent failure mode).

## Consequences

- Today's failure mode — Sam runs 30+ tool calls, opens a PR, exits
clean, ✅ fires, operator sees no reply — is
structurally blocked. Two sessions today (`f31a21c5` after 'Can you
update to add these tools?' and `624e27ec` after 'Use opus to review
this'); both opened PRs (#66, #67) but never posted. After this PR:
caught and retried.
- The ACK-first rule from SAM-32 doesn't false-pass the gate anymore.
Posting an ACK doesn't satisfy the rule unless a final reply also comes
after the substantive work.
- Sessions with no outward work (`read_file` only or no tools at all)
just need any single post — they're 'Sam answered a question' shapes.
- Scheduled (daily-maintenance) and retry sessions are exempt — silence
is allowed for routine work, retries have their own failure path.

## How to verify

- `pytest tests/` — 119 passed (22 new in `test_silent_exit.py` + 97
existing, no regressions). The new tests include 4 explicit
ACK-then-work-then-silent cases that would have false-passed the earlier
rule.
- Next Slack mention where Sam opens a PR but forgets to post: the logs
will show `session exited cleanly but never posted to Slack; spawning
retry to narrate (session=...)` and the retry will post the summary
in-thread.

## Tier

Tier 3 (`src/runtime/session.py`, `src/runtime/daemon.py`,
`src/runtime/prompts.py`) + Tier 1 (`src/capabilities/slack.md`
documents the gate in Sam's source).

Closes the silent-exit class of bug surfaced by the 2026-05-24 14:30 and
15:55 sessions.
@dembrane-sam-bot dembrane-sam-bot added this pull request to the merge queue May 24, 2026
Merged via the queue into main with commit d6d601c May 24, 2026
2 checks passed
@dembrane-sam-bot dembrane-sam-bot deleted the sam/update-no-unsourced-numbers branch May 24, 2026 16:03
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.

2 participants