Skip to content

Give freeform an upper witness without restoring a length cap - #843

Merged
atomchung merged 11 commits into
mainfrom
agent/836-freeform-upper-witness
Aug 29, 2026
Merged

atomchung merged 11 commits into
mainfrom
agent/836-freeform-upper-witness

Conversation

@atomchung

Copy link
Copy Markdown
Owner

User outcome

A simple lookup stays short. A research-heavy decision can carry several sourced increments when each one changes the call, instead of being implicitly compressed toward a corpus in which every positive exemplar was under 400 characters.

Current behavior / evidence

Change

  • retain the existing compact freeform positives as lower witnesses;
  • add one synthetic freeform_research_depth positive with eight distinct increments, explicit source/as-of provenance, an engine-owned portfolio consequence, a contextual research judgment, and observable falsifiers;
  • make that scene the one exemplar visible in references/freeform-answers.md;
  • state beside it that this is an upper witness, not a minimum/default answer size or permission to narrate irrelevant research.

Scope / non-goals

This is deliberately one surface. It changes no engine, schema, persisted state, transaction lifecycle, execution truth, privacy boundary, or other conversational route. consider, no_book, and weekly_read remain unchanged until owner-live evidence shows they need the same treatment.

Acceptance

  • existing compact freeform scenes remain in the corpus;
  • freeform stays inside the corpus's 3–5 positive-exemplar range;
  • the new scene passes E-5 through E-8;
  • the reference/corpus drift gate proves the generation-path copy is canonical;
  • product and QA/eval CI pass;
  • follow-up owner-live evidence compares one simple lookup and one research-heavy decision before this pattern expands to another surface.

Privacy / rollout / recovery

All issuers, ratings sources, prices, dates, holdings, and deal facts are synthetic. The change is reversible by restoring the previous freeform fence and removing one fixture scene; no migration or recovery path is involved.

Refs #836. This PR does not close it: the issue remains open until owner-live evidence decides whether any other surface needs an upper witness.

@atomchung atomchung left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BLOCK — the upper witness repeats the same provenance on two floors.

The three researched claims already satisfy C2 by naming source + date inline (WDGT 8-K, investor presentation, Northstar Ratings). The final caliber line then lists the same three sources and dates again. That teaches the generation path to pay twice for the same provenance, directly against D6 and D7's “nothing appears on two floors” rule—the exact semantic class the deterministic E-5…E-8 checks intentionally cannot catch.

Smallest repair: keep the inline source/date beside each public fact, and reduce the end block to the book/pricing frame plus material gaps, e.g. (帳本 8/14、價格 8/14 收盤;未評反壟斷通過機率與交易後估值). Apply the same edit to the corpus copy and the fenced generation-path copy, then rerun both CI groups.

Everything else in the two-file slice is appropriately bounded: compact lower witnesses remain, the richer scene is explicitly an upper—not default—witness, the freeform/plain-conversation scope is consistent with the existing route contract, and no engine/state/privacy/execution boundary changes. GitHub cannot accept an approval from the repository owner, so this is recorded as a blocking COMMENT review.

Copy link
Copy Markdown
Owner Author

Blocker repaired and re-reviewed

Commit ff8f11c applies the smallest D6/D7 repair:

Final semantic review found no remaining blocker. The PR still changes exactly two synchronized surfaces: the freeform generation-path exemplar and its canonical corpus copy. It changes no engine, schema, persistence, execution state, privacy boundary, or other route.

Verification on the exact final tree:

  • focused expression / voice / language / installed-tree / research-prior checks: green;
  • local python3 tests/run_all.py --group product: 49/49 suites pass;
  • local python3 tests/run_all.py --group qa-eval: 11/11 suites pass;
  • GitHub Actions run 33053001530: product-contract and qa-eval-tooling both pass on Python 3.11 and 3.12; network-smoke is skipped by PR policy.

Mechanical and semantic acceptance for this PR are complete. Behavioral acceptance is deliberately still open: #836 requires the frozen simple-lookup versus research-heavy owner-live comparison before this pattern expands to another surface. Merge remains an owner decision.

@atomchung
atomchung merged commit 5e0c7b6 into main Aug 29, 2026
5 checks passed
atomchung added a commit that referenced this pull request Oct 5, 2026
The four hunks below sat inside the compact-witness commit of #851, so dropping
that commit would have silently dropped them too. They belong with the rest of
the history cut:

- the "revised by owner ruling 2026-07-30 (#561) from the original
  four-column table" narrative on the positions view
- "Since #830, *where* they go is a rule" and "since #830 that block
  separates ..." (the rules stand; the dating goes)
- "and #823 did not build one"

Also corrects the maintainer-guide row for #834, which still named
freeform_positions_view as freeform's exemplar after #843 made it
freeform_research_depth. No second fence, no test change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
atomchung added a commit that referenced this pull request Oct 5, 2026
#851)

* docs(instructions): drop history narratives from the instruction surface

An instruction file is read as instructions, not as a changelog. Past-tense
sentences about what a rule used to be, which PR changed it, and when the
owner ruled, all cost budget and invite the model to reason about the
repository's history instead of the user's question.

Removed: qa/SKILL.md's three narrated asides, book-refresh.md's "and the
answer changed with #523", first-review.md's "now gated rather than
trusted", condition-slots.md's "It used to be the one thing thrown away",
decision-framing.md's "no longer says it a second time" and its History
block, and trade-consequence.md's dated owner-ruling paragraph plus the
"Deleted, and what replaced each" table (three renderings becomes two,
because two is what there are).

server.js's MCP tool description becomes a contract rather than one line,
with a `.describe()` on each input field: a tool description is read by a
model choosing whether to call it, so precision is worth more than brevity.

60/60 offline suites pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* docs(instructions): drop the history narratives in freeform-answers.md

The four hunks below sat inside the compact-witness commit of #851, so dropping
that commit would have silently dropped them too. They belong with the rest of
the history cut:

- the "revised by owner ruling 2026-07-30 (#561) from the original
  four-column table" narrative on the positions view
- "Since #830, *where* they go is a rule" and "since #830 that block
  separates ..." (the rules stand; the dating goes)
- "and #823 did not build one"

Also corrects the maintainer-guide row for #834, which still named
freeform_positions_view as freeform's exemplar after #843 made it
freeform_research_depth. No second fence, no test change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* docs(instructions): correct three claims the history cut left stale or loose

Found by the independent review of #851 (Codex and Antigravity) and checked
against the code before changing anything:

- docs/maintainer-guide.md, the #830 row, still said trade-consequence.md
  "states a reason per keep and per delete". The per-delete table is gone, so
  the row now says what the file does: a reason per kept fact.
- fomo_submit_demo_choice described `locale` as the language of its
  "confirmation text", but the tool returns one fixed English string and only
  echoes `locale` back. The description now says that.
- qa/SKILL.md Step 6 said archive-receipt makes "converting a miss" part of
  the walkthrough. The gate (`verify --require-findings`) requires a recorded
  disposition, and `--no-findings` and `not-episodable:` are legal ones, so the
  sentence now says "recording where each miss went".

No behaviour change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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