Skip to content

wiki: /about describes the Human-at-boundaries moderation policy - #55

Merged
Deicyde merged 5 commits into
mainfrom
claude/worker-about-copy
Oct 14, 2026
Merged

Deicyde merged 5 commits into
mainfrom
claude/worker-about-copy

Conversation

@Deicyde

@Deicyde Deicyde commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

Problem

The /about page (wiki/src/home.ts:722-730 at 37b7036, last changed 2026-08-04) tells contributors:

Human edits are patrolled by moderators, and AI proposals to change a human-authored annotation are queued for human approval before anything lands.

Neither part matches the ratified policy or the live data:

  • Proposals. Under the Human-at-boundaries policy (docs/ROADMAP.md, ratified 2026-08-06, built 2026-08-07), the nightly deterministic resolver decides proposals unattended, including ones on human annotations. This runs through site/resolve_proposals.py --submit with WIKILEAN_AUTO_DECIDE:=1 in site/ops/nightly.env. Live /stats shows "Decided by AI (auto-resolve) 6".
  • Patrol. Live /stats shows "Human edits patrolled 0" against 32 awaiting patrol.
  • Sign-in providers. The same paragraph says "sign in (GitHub or Google)", but production offers only GitHub: live /login shows "Continue with Github", and auth.ts shows Google only when its secrets are set.

This is the public description attached to the data and research notice that contributors accept.

Two related pages say the same outdated things:

  • /proposals (wiki/src/pages.ts) says the AI "never applies" proposals, which is no longer true under the same policy.
  • /about and /articles call the Wikidata property "proposed" and name it "formalized as (Lean/Mathlib)". The property exists: P14534, "Mathlib Declaration ID" (bot/push_property.py).

Change

  • New "How edits are moderated" section, each claim checked against the code:

    • Edits by people take effect immediately and are shown as human-curated.
    • Edits are not pre-screened: they are listed in Recent changes (?kind=edit) with an awaiting-patrol marker, and Stats shows the patrol count.
    • Every annotation change is in the article history, and patrollers can restore an article's annotations to any earlier version.
    • The pipeline can't silently overwrite a human-curated annotation. Bot saves that drop or alter one get a 422 (findLostHuman), and the pipeline can file a proposal instead.
    • Proposals no longer need a person's approval. The nightly resolver (no language model) decides the ones that match its fixed rules. The rest stay pending for a patroller or a later run, or lapse on the next pipeline save of that article.
    • What a pipeline approval does to a human-curated annotation. index.ts's approve path relabels it ai-moderated. The copy says what that means for readers and for later saves:
      • The annotation is then shown as "AI-generated · not yet reviewed". site/assets/script.js gives that label to every provenance other than human.
      • It loses the human-curated protection, so later pipeline saves can change it directly. The anti-clobber guards (findLostHuman, _preserve_human) protect only provenance human.
    • A patroller's approval stamps the result human-curated. The copy states this too.
    • People remain the gate for outside contributions. The tagging bot opens Mathlib PRs on its own, but they merge only after Mathlib review. Wikidata statements are added only for reviewed mappings.
  • /proposals intro no longer says "never applies". It lists the resolver's three rules from site/resolve_proposals.py:

    • R1: reject proposals that change nothing;
    • R2: approve verified Mathlib declaration renames;
    • R3: approve marking a proof_wanted stub as partial.

    The rest wait for a patroller, and the intro still links to /about. The route is not KV-cached, so it needs no key bump.

  • Wikidata property name. /about links Property:P14534 and calls it "Mathlib Declaration ID". The /articles "Datasets & graphs" entry names the same property. The proposal-era wording is gone from both pages.

  • Limitations paragraph:

    • drops "growing sample";
    • links /login without naming providers;
    • removes the old moderation sentence.
  • Render-cache keys page:about:v1 → page:about:v2 and page:articles:v2 → page:articles:v3. The CLAUDE.md/AGENTS.md key list is updated to match. CONTRIBUTING.md is handled separately.

How tested

  • npx tsc --noEmit -p . passes. Full worker suite npx vitest run: 38 files, 918 tests pass.
  • test/about.test.ts (5 tests). Assertions run on whitespace-normalized text and cover:
    • the old promises and the "GitHub or Google" claim are gone;
    • each new claim is present, including both approval directions, the relabel's label and lost protection, the annotation-only restore, and the Mathlib review gate;
    • the P14534 link and name are present, and "formalized as (Lean/Mathlib)" is gone;
    • the cache key is v2 and v1 is gone.
  • test/home.test.ts: /articles names P14534 and no longer has the proposal-era wording.
  • test/proposals.test.ts: the /proposals intro no longer says "never applies" and describes the nightly resolver.
  • Merged with wiki: security headers on Worker responses + report-only CSP #47 (claude/worker-security-headers) in a throwaway checkout: test/security-headers.test.ts and test/about.test.ts pass, and so do the full suite (39 files, 926 tests) and tsc.

Risks

Copy only. If the moderation policy changes again, this section and the /proposals intro must change with it.

Release-affecting: ships only through the Brain release and promotion path.

What Jack must do

Read the new section and confirm it describes the policy you ratified. Nothing to configure.

The About page said human edits are patrolled by moderators and that AI
proposals to change a human-authored annotation are queued for human
approval. Under the policy ratified 2026-08-06 the nightly resolver decides
proposals (including ones on human annotations, which are relabeled
ai-moderated when approved), and patrol is a list, not a pre-screen. The new
copy says what happens, drops the 'growing sample' claim, and links sign-in
without naming providers (only GitHub is configured in production).

Render-cache key page:about:v1 -> v2.
- A patroller's approval stamps the result human (index.ts approve path), so
  the copy now states both directions instead of claiming AI-changed text is
  never shown as human work, and uses the reader-visible 'human-curated'.
- Proposals 'do not wait for a person by default'; unmatched ones stay
  pending for a patroller or lapse when their target is removed or already
  matches.
- History claim scoped to annotation changes; revert is a patroller action.
- The human gate is described as WikiLean's outside contributions (Mathlib
  PRs, Wikidata statements), not a property of those projects.
- CLAUDE.md/AGENTS.md render-key list: page:about:v1 -> v2.
- Tests assert on whitespace-normalized text.
- 'no longer need a person's approval' (unmatched proposals still wait).
- The Mathlib gate is reviewer approval before merge; the bot opens PRs on
  its own. Wikidata statements only for human-reviewed mappings.
- Patrollers restore annotations (the Wikipedia pin is not rolled back).
- Recent changes link filters to human edits; lapse happens on the next
  pipeline save of the article; patroller approval of a change stamps
  human-curated.
@Deicyde

Deicyde commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner Author

Review status: merged in 6593f9bf; all required fixes verified

Update 2026-10-14 (re-checked at 5c40956b):

  • Landed (verified at 5c40956 and on main): the /proposals intro no longer says the AI "never applies" proposals. It describes the nightly resolver's three rules (wiki/src/pages.ts:1094-1098), pinned by wiki/test/proposals.test.ts:366-370.
  • Landed: the /about relabel sentence now says a pipeline-approved human annotation is shown as "AI-generated · not yet reviewed" and loses the human-curated protection (wiki/src/home.ts:745-749). The test is updated at wiki/test/about.test.ts:88-90.
  • Landed: wiki: security headers on Worker responses + report-only CSP #47's test now accepts any page:about: key, so the v2 rename keeps main green.
  • Extra, fine: /about and /articles name P14534 "Mathlib Declaration ID", and page:articles is bumped to v3.
  • Deferred (optional, still accurate): "each one is listed" and the Wikidata "reviewed mappings" wording.
  • Still open: site/ops/nightly.env:47 says "never applies", and site/build_index.py:225 uses the proposal-era property name.
  • Nothing is live until a Brain release is rebuilt at 6593f9b, a fresh P1B runs, and the release is promoted.
Original review (2026-10-14)

Independent adversarial review of 8d572f49: a defect reviewer with skeptics, a design reviewer with a devil's advocate, and an arbiter.

Verdict: the right fix. It replaces a false /about promise with an accurate Human-at-boundaries description, and no new claim is false today. Close two copy gaps first so the one Brain release that carries this fixes all of it.

Required before merge

  • wiki/src/pages.ts:1094-1095 (/proposals) still says the AI "never applies" proposals and links to /about. Reword it to match the policy: the nightly resolver auto-decides by default, and production already has AI-decided revisions. The route is not KV-cached, so no key bump is needed.
  • wiki/src/home.ts:745-746: say what the relabel does. After one AI approval, a human annotation shows as "AI-generated · not yet reviewed" and loses all protection, because every guard checks for provenance exactly equal to human. Update the matching about.test.ts assertion.
  • Coordinate with wiki: security headers on Worker responses + report-only CSP #47: its test at wiki/test/security-headers.test.ts:49 asserts page:about:v1, which this PR renames to v2. There is no textual conflict, but the merged tree fails the required gate. Preferably wiki: security headers on Worker responses + report-only CSP #47 accepts any page:about: key.

Decisions for the maintainer

  • Confirm the section matches the ratified policy, then pick the detailed version (recommended) or a 2-3 sentence one. Either needs the same release.
  • Should one AI approval permanently remove a human annotation's protection? Changing that is separate code work in findLostHuman and _preserve_human.

Merge order: release-affecting; merge with the batch (#46, #47, #50, #52, #54, #58), not as a release trigger. #50 conflicts in the CLAUDE.md/AGENTS.md key list; keep both bumps.

Fixes are in progress; this comment will be updated.

Posted by the WikiLean PR swarm (lead); updated 2026-10-14.

@Deicyde

Deicyde commented Oct 14, 2026

Copy link
Copy Markdown
Owner Author

Status review (2026-10-14): ✅ Ready

This is copy only, and the new sentences match the edit, save, proposal and patrol paths in current code and production behaviour. There is no migration and no secret.

Nits (worth folding into this page:about:v2 bump, since every /about change costs a release cycle)

  • The same page contradicts itself. /about still calls the Wikidata property "proposed" and names it "formalized as (Lean/Mathlib)" (home.ts:697-699); the /articles page says the same at home.ts:474-475. P14534 "Mathlib Declaration ID" exists and has 115 statements, and the new moderation paragraph further down the same page says statements are added to Wikidata. Fixing line 475 needs a page:articles bump.
  • /stats still says "Pending (awaiting a human)", which contradicts the new policy text. wiki: /stats AI-review freshness, recent run counts, public GET /api/runs (counts only) #50 already bumps page:stats, so fix it there.

Cross-PR: #47's test hard-codes page:about:v1 and fails once this lands. The fix belongs in #47, which shouldn't pin the version. If #47 merges first unchanged, this PR's CI will fail after updating from main until that assertion is changed here.

Conflicts: #50 conflicts in the AGENTS.md and CLAUDE.md cache-key list. Keep both page:about:v2 and page:stats:v6.

To ship: Worker change, so it needs the next Brain release and promotion. The old page:about:v1 KV entry expires on its own after its 300 s TTL.


🤖 Automated status pass by Claude Code over all 18 open PRs (#46–#63), posted for the repo owner. An independent verifier re-checked each finding. All 18 heads were also merged and tested together in a scratch tree; the only test failure that comes from combining them is #47 × #55 (three other pairs had mechanical text conflicts). Reviewed head: 8d572f49.

- /proposals intro no longer says the AI never applies proposals: it names
  the nightly resolver's rules (reject no-change proposals, approve verified
  Mathlib renames, approve 'partial' for proof_wanted stubs) and says the
  rest wait for a patroller. The route is not KV-cached.
- /about: a pipeline approval on a human-curated annotation now says what
  the relabel means: the annotation is shown as 'AI-generated · not yet
  reviewed' and loses the human-curated protection, so later pipeline saves
  can change it directly.
- /about and /articles name the existing Wikidata property, Mathlib
  Declaration ID (P14534), instead of the proposal-era 'formalized as
  (Lean/Mathlib)'. /about stays on page:about:v2 (unreleased); /articles
  page:articles:v2 -> v3, and the CLAUDE.md/AGENTS.md key list with it.

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

Deicyde commented Oct 14, 2026

Copy link
Copy Markdown
Owner Author

Fixes pushed (2026-10-14)

This addresses the PR swarm review's two required copy fixes (the /proposals intro and the /about relabel) and the stale Wikidata property name from the "Status review (2026-10-14)"; the #47 test coordination was fixed in #47.

What changed (all in ded364f1, with test updates)

  • /proposals intro (pages.ts): no longer says the AI "never applies" proposals. It lists the nightly resolver's rules (reject no-change proposals, approve verified Mathlib renames, approve marking proof_wanted stubs as partial); everything else waits for a patroller. The route isn't KV-cached, so no key bump.
  • /about relabel (home.ts): when the pipeline approves a change to a human-curated annotation, the page now says it is shown as "AI-generated · not yet reviewed" and loses its human-curated protection, so later pipeline saves can change it.
  • Wikidata property: /about (linked) and /articles now name "Mathlib Declaration ID" (P14534) instead of the proposal-era "formalized as (Lean/Mathlib)". page:articles goes v2 → v3 in index.ts, the home.ts header and the CLAUDE.md/AGENTS.md key list. /about stays on page:about:v2.

Verification

Not changed / still open

  • The /stats label "Pending (awaiting a human)" is left for wiki: /stats AI-review freshness, recent run counts, public GET /api/runs (counts only) #50.
  • The static-site generators site/build_index.py and site/export_wikidata_rdf.py (/concepts) still use the old property name; they are not Worker routes, so out of scope here.
  • Owner decisions from the swarm review: confirm the section matches the ratified policy, and whether one pipeline approval should remove a human annotation's protection (code in findLostHuman / _preserve_human). Only copy changed here.

Merge notes


🤖 Posted by Claude Code for the repo owner. Each fix was checked by an independent verifier before it was pushed. Head: ded364f1.

@Deicyde
Deicyde merged commit 6593f9b into main Oct 14, 2026
4 checks passed
@Deicyde
Deicyde deleted the claude/worker-about-copy branch October 14, 2026 21:14
Deicyde added a commit that referenced this pull request Oct 15, 2026
Conflict in the AGENTS.md/CLAUDE.md render-cache key list: take main's
line (page:articles:v3 and page:about:v2 from #55) with this branch's
page:stats:v5 -> v6 bump.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deicyde added a commit that referenced this pull request Oct 17, 2026
wiki: /about describes the Human-at-boundaries moderation policy
Deicyde added a commit that referenced this pull request Oct 17, 2026
Conflict in the AGENTS.md/CLAUDE.md render-cache key list: take main's
line (page:articles:v3 and page:about:v2 from #55) with this branch's
page:stats:v5 -> v6 bump.
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