Slice 7: §14 chrome + settings and admin neighborhoods
§14.1 richer landing, §14.2 /philosophy route (disk-backed), §14.3 persistent About link. /settings/notifications surfaces Slice 6's preferences/quiet-hours/mute/watches endpoints. /admin home base consolidates role management, the §6.2 write-mute, the audit-log viewer, the permission-events log, and the §13.2 graduation queue. Backend: backend/app/philosophy.py, backend/app/api_admin.py (seven admin endpoints + user-search), GET /api/users/me/notification-mutes. Frontend: Landing.jsx (deck), Philosophy.jsx, NotificationSettings.jsx, Admin.jsx, App.jsx routing for the chrome surfaces. Tests: backend/tests/test_chrome_vertical.py — 13 cases. Full suite 75/75 green. Spec corrections: §14.2 (PHILOSOPHY.md source is a deployment-time decision), §17 (admin block extended to name the seven new endpoints + user-search and notification-mutes read). §19.1 rewritten for Slice 8 hardening; §19.2 grew four candidates (owner succession, mute-from-actor, the "Following since <date>" disclosure, audit-log row prose). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,24 +1,60 @@
|
||||
// Landing.jsx — §14.1's pre-login surface.
|
||||
//
|
||||
// Title, subtitle, the short-form pitch from PHILOSOPHY.md, then the
|
||||
// single primary action: "Sign in with Gitea." The visual design is
|
||||
// deferred per §14.4; the structural commitments are here.
|
||||
// The landing page has three jobs per §14.1: name what this thing is,
|
||||
// pitch why someone would care, and offer the sign-in affordance. The
|
||||
// visual treatment is deferred per §14.4 — what matters here is the
|
||||
// hierarchy. Title and subtitle frame the framework, the short-form
|
||||
// pitch (sourced verbatim from the top of PHILOSOPHY.md) does the
|
||||
// argument, and the single primary action lets a reader who is sold
|
||||
// step through. The secondary link to `/philosophy` is for the reader
|
||||
// who is interested but needs more before signing in.
|
||||
//
|
||||
// The deck below the pitch is intentionally restrained — three crisp
|
||||
// claims about what the framework *is*, anchored in the spec's
|
||||
// structural decisions, so the reader who has not yet read the
|
||||
// philosophy can still tell at a glance whether this is for them.
|
||||
|
||||
import { Link } from 'react-router-dom'
|
||||
|
||||
export default function Landing() {
|
||||
return (
|
||||
<div className="landing">
|
||||
<h1>Wiggleverse RFCs</h1>
|
||||
<p className="subtitle">A standards process for shared meaning between humans and machines.</p>
|
||||
<p className="pitch">
|
||||
Large language models work brilliantly with programming languages because every
|
||||
word in Python or C has a definitive meaning enforced by tooling. They struggle
|
||||
with natural language because no such dictionary exists for words like
|
||||
<em> consent</em>, <em> trait</em>, or <em> agency</em> — words that do enormous
|
||||
work in any system that interacts with humans. The Wiggleverse RFC framework is
|
||||
a standardization process for that vocabulary. Build the dictionary first.
|
||||
</p>
|
||||
<a className="btn-signin" href="/auth/login">Sign in with Gitea</a>
|
||||
<a className="secondary-link" href="/philosophy">Read the full philosophy →</a>
|
||||
<div className="landing-inner">
|
||||
<h1>Wiggleverse RFCs</h1>
|
||||
<p className="subtitle">
|
||||
A standards process for shared meaning between humans and machines.
|
||||
</p>
|
||||
|
||||
<p className="pitch">
|
||||
Large language models work brilliantly with programming languages because every
|
||||
word in Python or C has a definitive meaning enforced by tooling. They struggle
|
||||
with natural language because no such dictionary exists for words like
|
||||
<em> consent</em>, <em> trait</em>, or <em> agency</em> — words that do enormous
|
||||
work in any system that interacts with humans. The Wiggleverse RFC framework is
|
||||
the standardization process for that vocabulary. Build the dictionary first.
|
||||
</p>
|
||||
|
||||
<a className="btn-signin" href="/auth/login">Sign in with Gitea</a>
|
||||
<Link className="secondary-link" to="/philosophy">Read the full philosophy →</Link>
|
||||
|
||||
<ul className="landing-deck">
|
||||
<li>
|
||||
<strong>One word per RFC.</strong> An RFC defines a single word — its meaning,
|
||||
its relationships to other defined words, and the protocol by which humans and
|
||||
machines interact with it.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Argued in public, with the model.</strong> Every definition is the
|
||||
product of a transcript: a human and a model in careful argument until the
|
||||
ambiguity is gone. The argument is the evidence the definition was earned.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Graduation is the load-bearing moment.</strong> A super-draft is the
|
||||
start of the conversation. Graduation gives the definition a permanent home
|
||||
and a stable identifier — and only then can other RFCs build on it.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user