Fix #522: per-repo feature toggles #532

Merged
crueber merged 1 commit from fix/issue-522 into main 2026-09-14 19:41:52 +00:00
Owner

One settings model, six booleans, end-to-end (closes #522): [features] TOML section (validated, merge-ignored, all-on default, unknown keys rejected) → summary projection (always-present features + unconditional ~t ETag suffix, +0 probes) → tab gating (Issues/Pulls/Releases hidden when off, Code re-highlighted, deep links sane) → API guards (POST forks / PUT star / PUT watch refuse 403; DELETE always works; counts intact; no admin bypass) → #447-idiom disabled pills → six General-tab toggles on the existing save path → re-enable restores everything. Table-driven tests (config/api/social/notify/pulls/tabs/pills/settings), -race green, coverage gate holds, node 1211/1212 (1 pre-existing live smoke fail), vite+esbuild green, e2e green, live HTTP probe green. No new deps. Docs: 07_api §9.1/§11 + Decisions, 12_web_ui Decisions, 02/03/06/07 Decisions.

One settings model, six booleans, end-to-end (closes #522): [features] TOML section (validated, merge-ignored, all-on default, unknown keys rejected) → summary projection (always-present features + unconditional ~t ETag suffix, +0 probes) → tab gating (Issues/Pulls/Releases hidden when off, Code re-highlighted, deep links sane) → API guards (POST forks / PUT star / PUT watch refuse 403; DELETE always works; counts intact; no admin bypass) → #447-idiom disabled pills → six General-tab toggles on the existing save path → re-enable restores everything. Table-driven tests (config/api/social/notify/pulls/tabs/pills/settings), -race green, coverage gate holds, node 1211/1212 (1 pre-existing live smoke fail), vite+esbuild green, e2e green, live HTTP probe green. No new deps. Docs: 07_api §9.1/§11 + Decisions, 12_web_ui Decisions, 02/03/06/07 Decisions.
One settings model, six booleans: [features] TOML section (validated,
merge-ignored, all-on default, unknown keys rejected — the Description
precedent), projected on the summary as always-present features with an
unconditional ~t ETag suffix (the #513 ruling — settings-only flips and
pre-#522 bodies revalidate; +0 probes, manifest-inline fold), tab gating
in the showChecksTab pattern with Code re-highlight, 403 API guards on
Star/SetWatch/StartFork (DELETE always works, counts intact, no bypass),
#447-idiom disabled pill affordances, six General-tab toggles on the
existing save path, re-enable restores everything.

Docs: 07_api.md §9.1/§11 + Decisions, 12_web_ui.md Decisions,
02/03/06/07 features Decisions, Apidocs rows.

Tests: config parse/merge/resolve/ETagBits matrix, summary wire +
revalidate + walView fold, per-guard matrices (fail-open nil/declining,
403 + side-effect-free refusal, unstar/unwatch-always, re-enable),
tabs.js gate + highlight matrices, pill + settings-tab source pins,
#522-scoped stale-pin updates (4 files), buildCollab wiring pin.
-race green; cover holds (config 95.9, api 95.3, social 99.5, notify
95.2, pulls 96.1); node 1212 total/1211 pass (1 pre-existing live-server
smoke fail, verified head-to-head on main); vite + esbuild green;
internal/e2e green; live HTTP composition probe green.
Sign in to join this conversation.
No description provided.