Skip to content

AD-030: retire the gets-sharper-every-day promise + last behavioral scoring path - #419

Closed
runyourempire wants to merge 2 commits into
mainfrom
worktree-promise-retirement-ad030
Closed

AD-030: retire the gets-sharper-every-day promise + last behavioral scoring path#419
runyourempire wants to merge 2 commits into
mainfrom
worktree-promise-retirement-ad030

Conversation

@runyourempire

Copy link
Copy Markdown
Collaborator

What

AD-030: retire the "gets sharper every day" promise — plus the last behavioral scoring path (dismissal-derived anti-topics feeding the negative stack), found by the post-#414 verification sweep.

New canonical, propagated from CLAUDE.md through every surface: "4DA reads the internet for developers — privately, locally. Your codebase decides what's relevant." "Yesterday's noise becomes tomorrow's signal" survives, re-attributed to corpus re-judging (true and implemented). The 92%/98% benchmark stays as body copy with methodology.

Why

The promise described a mechanism AD-029 removed, was never measurable (7 explicit feedback signals against a 200k corpus — "all risk, no demonstrated lift"), and post-v19 left ~100 self-contradicting instances, several asserting dead mechanisms inside Score Autopsy — live INV-023 violations. Public but unadvertised is the only cheap moment; after launch this is a retraction.

Scope

  • Governance first: AD-030 (with re-claim criteria: a /calibrate-measured lift, published) + amendments to AD-017/025/026/028 — all four decisions survive; only rationales rewrite (AD-028's lifetime honesty now rests on the cost structure)
  • P0 honesty: in-app strings asserting dead mechanisms rewritten or deleted; the learned/affinity/anti factor rows removed (the anti row also had inverted magnitude-vs-multiplier semantics and rendered a false penalty on every item); "Compound Intelligence" tab → "Personal, Not Aggregate"
  • 13 locales: 45 stale keys purged per locale, regenerated from corrected English; generator scripts purged first so nothing re-injects
  • Ship-locked: installer descriptions, homepage JSON-LD (incl. the Offer), npm MCP README (lands on the pending mcp-v5.0.0 publish)
  • Site + docs: 22 files rewritten (present-tense verifiable statements; improvement attributed to engine updates and the user's codebase); the refund-adjacent trial claim deleted; framework §7 kept as a dev-process thesis across all three mirrors
  • New public post: /writing/retiring-a-claim-we-could-not-measure/ — the incident record as an engineering story
  • Enforcement: scripts/check-retired-claims.cjs (+9 tests) in test:scripts + validate
  • Scoring fix (no version bump — probe documented in scoring/mod.rs): build_negative_stack no longer accepts auto-detected anti-topics (0.30 suppression priors from dismissal counts); competing-tech inference over the real dependency graph only

Merge-conflict note

src-tauri/src/blind_spots.rs is claimed by the live fix+title-truncation lane; this PR's change there is confined to build_negative_stack_from_deps (compile-required by the signature change).

Verification

  • Retired-claims guard clean repo-wide; 9/9 guard tests
  • Translation parity: 0 errors across 13 languages - tsc clean
  • Frontend suite green - Rust 4,419 green - fmt clean
  • Site built with eleventy: rendered output has ZERO instances of the old claim outside the retirement post; 7 of the new tagline

🤖 Generated with Claude Code

https://claude.ai/code/session_016puYGGmj3oHxmcKBbJ5vXq

runyourempire and others added 2 commits August 12, 2026 03:46
…stack

The last behavioral scoring path left after the v19 demotion (AD-029),
found by the post-merge verification sweep: build_negative_stack injected
0.30 Bayesian suppression priors from auto-detected anti_topics rows whose
confidence is pure dismissal count (rejection_count/10) — five dismissals
could auto-ban a topic to x0.30 composite authority via
negative_stack_prior. Inert on the live corpus (anti_topics has 0 rows,
priors byte-identical, hence NO PIPELINE_VERSION bump — precedent and
probe documented in scoring/mod.rs), but structurally live.

The negative stack now builds from competing-tech inference over the
actual dependency graph only. Explicit topic suppression remains
user-authored exclusions, which hard-filter upstream. blind_spots'
duplicate anti-topic feed removed with it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016puYGGmj3oHxmcKBbJ5vXq
The promise described a mechanism AD-029 removed, was never measurable
("all risk, no demonstrated lift" — 7 explicit feedback signals against a
200k-item corpus), and post-v19 left ~100 instances of self-contradicting
copy, several asserting dead mechanisms inside Score Autopsy — live
INV-023 violations. Pre-launch (public, unadvertised) is the only cheap
moment; after launch this is a retraction.

New canonical (propagated from CLAUDE.md through every surface):
"4DA reads the internet for developers — privately, locally. Your
codebase decides what''s relevant." "Yesterday''s noise becomes tomorrow''s
signal" SURVIVES, re-attributed to corpus re-judging (verdict epochs +
re-examination) — it is true and implemented. The 92%/98% benchmark stays
as body copy with methodology. "Compound knowledge" survives only in the
framework''s dev-process sense.

- Governance first: AD-030 (with re-claim criteria: a /calibrate-measured
  lift, published) + amendments to AD-017/025/026/028 — all four decisions
  survive, only rationales rewrite (AD-028''s lifetime honesty now rests on
  the cost structure: zero marginal cost + offline 2099 key)
- P0: in-app strings that asserted dead mechanisms rewritten or deleted
  ("will be penalized in relevance scoring", "Boosted because you''ve shown
  interest", "scoring corrections applied", the "Learned" badge, learned
  factor rows + affinity chips — the anti factor also had inverted
  magnitude/multiplier semantics and rendered a false penalty on every item)
- "Compound Intelligence" tab renamed "Personal, Not Aggregate" — its
  content (per-user, inspectable, local-only) was always a privacy story
- 13 locales: 45 stale keys purged per locale, regenerated from corrected
  English via i18n:fill; generator scripts purged first so nothing
  re-injects (apply-translations.cjs carried 12 hardcoded copies)
- Ship-locked surfaces: installer shortDescription/longDescription,
  homepage JSON-LD (incl. the Offer), npm MCP README (lands on next
  publish)
- Site + docs: 22 files rewritten under the house rule (present-tense
  verifiable statements; improvement attributed to engine updates and the
  user''s codebase, never engagement); signal.njk''s 16 compounding claims
  reframed on the analysis layer; the refund-adjacent trial claim deleted;
  framework §7 kept as a dev-process thesis with scoring-accuracy claims
  stripped across all three mirrored copies
- New public post: site/src/writing/retiring-a-claim-we-could-not-measure
  — the incident record as an engineering story, ending on the re-claim bar
- Enforcement: scripts/check-retired-claims.cjs (+9 tests) wired into
  test:scripts and validate; historical-record files allowlisted;
  retired-ok escape hatch for quoting the claim as history

Verified: guard clean repo-wide; translation parity 0 errors across 13
languages; tsc clean; frontend suite green; Rust 4,419 green; fmt clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016puYGGmj3oHxmcKBbJ5vXq
@runyourempire
runyourempire enabled auto-merge (squash) August 11, 2026 18:12
@vercel

vercel Bot commented Aug 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
4da-home Ready Ready Preview Aug 11, 2026 6:12pm

runyourempire added a commit that referenced this pull request Aug 14, 2026
#431)

Completes AD-030 on the four gate-violating files #419 does not touch (.ai/RULES.md, AGENTS.md, CONVENTIONS.md, CHANGELOG.md) plus three unscanned tool-rule mirrors. Without this, #419 fails its own check-retired-claims gate on rebase. Wording copied verbatim from #419's CLAUDE.md; CHANGELOG.md uses the retired-ok escape hatch rather than falsifying release history. Verified: 4 violations to 0, and all remaining violations lie inside #419's file set.
@runyourempire

Copy link
Copy Markdown
Collaborator Author

Superseded by #469, which merges this branch's work onto current main (conflicts resolved in favour of main's newer facts — see #469's description for the resolution calls). This PR will be closed when #469 merges.

auto-merge was automatically disabled August 16, 2026 11:14

Pull request was closed

runyourempire added a commit that referenced this pull request Aug 16, 2026
…de that does not exist (#466)

Closes the documentation-truth findings from the forensic audit that
were verified still open at `f26da1ea`. Every change makes a document
match the code; where the code is the problem, this PR records the
divergence rather than pretending it away.

## `CLAUDE.md` never received #431's drift correction

#431 corrected five of the six agent-instruction mirrors. `CLAUDE.md` —
the propagation root — got none of it, so the file every session loads
first has been the wrong one.

- **Design tokens.** `CLAUDE.md` listed `--bg-primary`,
`--text-primary`, `--accent-gold`. The real names are
`--color-`-prefixed (`src/App.css:8-26`). An agent following the doc
verbatim produced CSS that silently did nothing. Verified independently:
`--color-bg-primary` at `App.css:8`, and a light theme at `:49+`
overrides the same token names, so the added "never hard-code a hex"
note is load-bearing rather than decorative.
- **The 60-line Rust function rule** was presented as enforced. It is
not implemented anywhere, and `src-tauri/Cargo.toml:252` explicitly sets
`too_many_lines = "allow"`. Now stated as a convention.
- **`ts-rs` was wrong in all seven files**, not just `CLAUDE.md` — every
one said v10; `src-tauri/Cargo.toml:27` pins `"12"`.
- **Source count.** Every mirror said "20+". `build_all_sources()`
registers **22** (counted: 22 `Box::new` entries). Mastodon and Lemmy
were missing from every list, and `CVE/OSV` was written as one entry
when it is two — which is exactly how 22 came to read as 20.

## Five INVARIANTS entries describe mechanisms that do not exist

Verified by repo-wide grep. Each is now either corrected to what the
code does or retired with its reason.

| | Claimed | Actual |
|---|---|---|
| INV-001 | "precision MUST be >85%" | No 85% threshold exists. Real
enforced floors: aggregate precision >= 0.70, F1 >= 0.40, per-persona
noise rejection >= 80% (`scoring/simulation/reality.rs`) |
| INV-023 | `STATIC_/ACTIVE_/LEARNED_LAYER_WEIGHT` | **Zero `.rs`
hits.** Also still stale in `specs/ACE-STONE-TABLET.md` |
| INV-041 | "ALL persistent state MUST live in SQLite" | Contradicted by
four subsystems — `settings.json`, the OS keychain,
`data/calibrations/`, `data/signal_terminal_token.txt` |
| INV-060 | `ExclusionStrength` enum, "percentages are CANONICAL" |
**Zero `.rs` hits** |
| INV-071 | ">=5 exposures" | See below — it is worse than "3 not 5" |
| INV-090 | warn at TS 350 / RS 600 | Gate uses ts 300 / tsx 350 / rs
700 |

`.ai/FAILURE_MODES.md` documented the 2026-08-11 poisoned-curve incident
as caused by state living outside SQLite **without naming the invariant
that forbids it**. That cross-reference is now there.

**INV-071 turned out to be three disagreeing gates, not one wrong
number:** compute uses `>= 3` (`ace/behavior/tracking.rs:37`), read
defaults to `>= 5` (`ace/behavior/queries.rs:11-12`), display uses `> 3`
(`ace_commands/interactions.rs:429`) — and the explicit-rejection arm
sits ahead of all three with **no exposure floor at all**, so a single
dismissal of a never-engaged topic yields a negative affinity from one
exposure. All four are recorded. The code is unchanged; this needs a
decision, not a doc edit.

## Three in-code comments assert security properties the code does not
have

Comments only — zero behaviour change. False security comments are worse
than none, because they stop the next reader from checking.

- `settings/types.rs` — *"Must be true before cloud providers can be
used."* No call site gates on `cloud_llm_disclosure_accepted`. INV-031
now says explicitly that consent is informed-disclosure, not an enforced
gate; the comment now agrees.
- `src-tauri/Cargo.toml` — *"debug-only dependency, stripped from
release builds"* about `victauri-plugin`, which sits in
`[dependencies]`, not `[dev-dependencies]`, under no
`cfg(debug_assertions)` table. True only via the crate's own internal
gating, which is now what it says.
- `src-tauri/src/osv/sync.rs` — *"it never sends the user's dependency
set anywhere."* True of the ZIP-mirror fallback only. `sync_ecosystem`
POSTs the user's package names to `OSV_BATCH_URL` (up to 1000/request)
and is attempted **first** on every cycle, so reaching that branch means
disclosure already happened.

## Two things this PR deliberately does not do

**AD-030 is out of scope.** PR #419 already contains the AD-030 entry,
`scripts/check-retired-claims.cjs`, and the promise removal across 67
files. This PR touches none of it — `CLAUDE.md` edits here are confined
to lines 46+ and do not go near the tagline. A trial merge against #419
is conflict-free.

`specs/ACE-STONE-TABLET.md` gets not-built notes at the three blocks the
false invariants were transcribed from, but is otherwise left intact as
the historical design record rather than rewritten.

## Something that needs settling

`.ai/RULES.md`'s own header says it is *"Generated from `CLAUDE.md` —
the maintained source of truth"*, and explains `sync-ai-rules.sh` was
deleted because it ran the other way and would clobber `CLAUDE.md`. That
is the opposite of how the mirror set is usually described. All seven
files are now consistent either way, so nothing is blocked — but one of
those two statements is wrong and someone should decide which.

## Still open, for #419

`src/locales/en/ui.json` `firstRun.scanningDescription` still says "20
sources", as do all 12 other locales. Left alone because #419 owns the
locale pass; fold 20→22 into it.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01Fq96xWyPQjx2bCCzWtsnC9

---------

Co-authored-by: Claude Opus 4.8 <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