CASP is intentionally a small protocol — three files, five verbs, one deterministic check. The roadmap keeps it that way: each item removes friction or widens reach without bloating the contract.
casp upgradecasp upgrade refreshes a cockpit's scaffolds without touching its data: it rewrites only casp/README.md and casp/templates/**, and never writes now.md or roadmap.md, nor lays a template over state.json. Idempotent, with --dry-run. An additive casp_version stamp records the release that last scaffolded the cockpit, and casp doctor warns when it falls behind. 0.12.1 hardens it: a write can no longer escape the cockpit through a symlinked parent, the refresh set is an allowlist so an unknown file is left alone, an unrecognised flag exits without writing, and the state write is atomic. upgrade never gates; check remains the only gate.CASP-SESSION-003, the first new drift category since the rule codes: every entry in phases_shipped[] must be declared by a session log carrying a phase: key in its frontmatter. Filenames are never consulted — where the mapping would need a guess, there is no finding. Adoption is derived from the data, not configured: the first declaring log opens the enforcement window, everything before it stays exempt (the exempt count is printed, never silent), and a repo where no log declares a phase gets no finding at all.casp audit status prints the unaudited range since the last deep audit (last_deep_audit..HEAD, commit + file counts, --json for data); casp audit bump records a new watermark. It separates the cheap per-merge gate (casp check, every session) from the expensive holistic audit that runs in batch, on demand — a production-cutover gate, never a merge gate: casp check gains no rule and does not block on it. Fully additive.casp doctor reads your environment — Node, git, the cockpit, the pre-push hook — and never gates (always exits 0); casp version --json gives a { name, version, node, schema_version } handoff; and casp check --json findings now carry expected / actual, so an agent can diff the drift without parsing prose. Additive — the report schema is unchanged.check finding carries a stable CASP-<AREA>-<NNN> code; casp rules lists the catalogue and casp explain <CODE> prints one rule's definition. Plus an injection-safe git path for untrusted state values, published JSON Schemas, and precise "what CASP proves / does not prove" docs.casp help is first-class (exit 0), with a focused per-command block for every verb — why it exists, usage, every flag, real examples. casp help <command> and casp <command> --help are identical.casp install-hook wires casp check into your pre-push hook; casp next now refuses to start on a drifted state — both boundaries, start and push, are gated. Plus casp status --json (the structured session handoff) and casp verify <commit> + casp state diff (read-only inspection over the git-grounded trail).sessions_dir / logs_dir state keys, so a project validates against its real layout instead of adopting CASP's defaults. The whole protocol — check, new, ship, close — honors them. Still three files, five verbs, one check.casp ship and casp close automate the deterministic session close; casp check --all gates every cockpit under a root in one report. Migrations became fully opt-in (0.4.0), casp init is green out of the box (0.4.1), and check --all <absolute path> resolves correctly (0.4.2). Still three files, five verbs, one check — these are helpers.casp check runs fully green on CASP's own repository. Alembic (.py) migrations and multi-log session_log values supported.casp check --json + CASP manages itselfnext set to null) validates clean instead of failing; casp --version is derived from package.json.casp next verb, and a tested exit-code contract — clean exits 0, drift exits 1.state.json, now.md, roadmap.md) and the casp check drift validator.casp/facts.json — opt-in, like migrations_applied. A recorded value declares its source, the hash of that source at the moment it was verified, the method that produced it, and a validity window. Three deterministic comparisons — source hash changed, validity expired, method absent — catch the fact that *was* true. No model is involved — the deterministic floor is unchanged.casp rollback (state mutation only), a CI status-check installer, a generic webhook notifier (user-owned outbound, off by default). Each ships when a real demand signal exists.CASP est volontairement un protocole minimal — trois fichiers, cinq verbes, une vérification déterministe. La feuille de route le garde ainsi : chaque élément retire de la friction ou élargit la portée sans alourdir le contrat.
casp upgradecasp upgrade rafraîchit les gabarits d'un cockpit sans toucher à ses données : il ne réécrit que casp/README.md et casp/templates/**, et n'écrit jamais now.md ni roadmap.md, et ne plaque aucun gabarit sur state.json. Idempotent, avec --dry-run. Une empreinte additive casp_version enregistre la version qui a échafaudé le cockpit en dernier, et casp doctor avertit lorsqu'elle prend du retard. La 0.12.1 durcit l'ensemble : une écriture ne peut plus s'échapper du cockpit par un répertoire parent lié symboliquement, l'ensemble rafraîchi est une liste blanche — un fichier inconnu est laissé intact —, un drapeau non reconnu sort sans rien écrire, et l'écriture d'état est atomique. upgrade ne gate jamais ; check reste la seule garde.CASP-SESSION-003, la première nouvelle catégorie de dérive depuis les codes de règles : chaque entrée de phases_shipped[] doit être déclarée par un journal de session portant une clé phase: dans son frontmatter. Les noms de fichiers ne sont jamais consultés — là où la correspondance exigerait une supposition, il n'y a aucun résultat. L'adoption se déduit des données, elle ne se configure pas : le premier journal déclarant ouvre la fenêtre d'application, tout ce qui précède reste exempté (le nombre d'exemptions est affiché, jamais tu), et un dépôt où aucun journal ne déclare de phase n'obtient aucun résultat.casp audit status affiche la plage non auditée depuis le dernier audit approfondi (last_deep_audit..HEAD, commits + fichiers, --json pour les données) ; casp audit bump enregistre un nouveau jalon. Cela sépare la garde légère à chaque fusion (casp check, à chaque session) de l'audit holistique coûteux, exécuté par lot, à la demande — une garde de mise en production, jamais une garde de fusion : casp check ne gagne aucune règle et ne bloque pas dessus. Entièrement additif.casp doctor lit votre environnement — Node, git, le cockpit, le hook pre-push — et ne gate jamais (sort toujours 0) ; casp version --json donne une passation { name, version, node, schema_version } ; et les résultats de casp check --json portent désormais expected / actual, pour qu'un agent puisse comparer la dérive sans analyser la prose. Additif — le schéma du rapport est inchangé.check porte un code stable CASP-<AREA>-<NNN> ; casp rules liste le catalogue et casp explain <CODE> imprime la définition d'une règle. Plus un chemin git à l'épreuve de l'injection pour les valeurs d'état non fiables, des JSON Schemas publiés, et des docs précises sur « ce que CASP prouve — et ne prouve pas ».casp help est de première classe (exit 0), avec un bloc focalisé par commande pour chaque verbe — sa raison d'être, l'usage, chaque option, des exemples réels. casp help <command> et casp <command> --help sont identiques.casp install-hook câble casp check dans votre hook pre-push ; casp next refuse désormais de démarrer sur un état en dérive — les deux frontières, début et push, sont gardées. Plus casp status --json (la passation de session structurée) et casp verify <commit> + casp state diff (inspection en lecture seule de la piste ancrée dans git).sessions_dir / logs_dir, pour qu'un projet se valide contre son agencement réel au lieu d'adopter les valeurs par défaut de CASP. Tout le protocole — check, new, ship, close — les honore. Toujours trois fichiers, cinq verbes, une vérification.casp ship et casp close automatisent la clôture déterministe de session ; casp check --all garde tous les cockpits sous une racine en un seul rapport. Les migrations sont devenues entièrement optionnelles (0.4.0), casp init est vert dès l'installation (0.4.1), et check --all <chemin absolu> se résout correctement (0.4.2). Toujours trois fichiers, cinq verbes, une vérification — ce sont des utilitaires.casp check est entièrement vert sur le dépôt de CASP lui-même. Migrations Alembic (.py) et valeurs session_log multiples prises en charge.casp check --json + CASP se gère lui-mêmenext à null) se valide proprement au lieu d'échouer ; casp --version dérive de package.json.casp next, et un contrat de code de sortie testé — propre renvoie 0, dérive renvoie 1.state.json, now.md, roadmap.md) et le validateur de dérive casp check.casp/facts.json — optionnel, comme migrations_applied. Une valeur enregistrée déclare sa source, l'empreinte de cette source au moment de la vérification, la méthode qui l'a produite et une durée de validité. Trois comparaisons déterministes — empreinte de source modifiée, validité expirée, méthode absente — attrapent le fait qui *a été* vrai. Aucun modèle n'intervient — le socle déterministe reste inchangé.casp rollback étroit (mutation d'état uniquement), un installateur de status check CI, un notificateur webhook générique (sortant possédé par l'utilisateur, désactivé par défaut). Chaque élément n'est livré que sur signal de demande réel.CASP es deliberadamente un protocolo mínimo — tres archivos, cinco verbos, una verificación determinista. La hoja de ruta lo mantiene así: cada elemento elimina fricción o amplía el alcance sin inflar el contrato.
casp upgradecasp upgrade actualiza los andamios de un cockpit sin tocar sus datos: solo reescribe casp/README.md y casp/templates/**, y nunca escribe now.md ni roadmap.md, ni coloca una plantilla sobre state.json. Idempotente, con --dry-run. Una marca aditiva casp_version registra la versión que andamió el cockpit por última vez, y casp doctor avisa cuando se queda atrás. La 0.12.1 lo endurece: una escritura ya no puede escapar del cockpit a través de un directorio padre enlazado simbólicamente, el conjunto refrescado es una lista blanca — un archivo desconocido se deja intacto —, un indicador no reconocido sale sin escribir nada, y la escritura de estado es atómica. upgrade nunca actúa como barrera; check sigue siendo la única.CASP-SESSION-003, la primera categoría de deriva nueva desde los códigos de regla: cada entrada de phases_shipped[] debe declararse en un registro de sesión que lleve una clave phase: en su frontmatter. Los nombres de archivo nunca se consultan — donde la correspondencia exigiría una suposición, no hay resultado. La adopción se deduce de los datos, no se configura: el primer registro que declara abre la ventana de aplicación, todo lo anterior queda exento (el número de exenciones se imprime, nunca se silencia), y un repositorio donde ningún registro declara una fase no obtiene resultado alguno.casp audit status imprime el rango sin auditar desde la última auditoría profunda (last_deep_audit..HEAD, commits + archivos, --json para datos); casp audit bump registra una nueva marca. Separa la barrera ligera de cada fusión (casp check, en cada sesión) de la auditoría holística costosa, ejecutada por lotes, bajo demanda — una barrera de puesta en producción, nunca una barrera de fusión: casp check no gana ninguna regla y no se bloquea por ella. Totalmente aditivo.casp doctor lee tu entorno — Node, git, el cockpit, el hook pre-push — y nunca actúa como barrera (siempre sale 0); casp version --json da un traspaso { name, version, node, schema_version }; y los resultados de casp check --json ahora llevan expected / actual, para que un agente pueda comparar la deriva sin analizar la prosa. Aditivo — el esquema del informe no cambia.check lleva un código estable CASP-<AREA>-<NNN>; casp rules lista el catálogo y casp explain <CODE> imprime la definición de una regla. Además, una ruta git a prueba de inyección para valores de estado no confiables, JSON Schemas publicados, y docs precisas sobre «qué prueba CASP — y qué no».casp help es de primera clase (exit 0), con un bloque enfocado por comando para cada verbo — su razón de ser, el uso, cada opción, ejemplos reales. casp help <command> y casp <command> --help son idénticos.casp install-hook conecta casp check a tu hook pre-push; casp next ahora se niega a empezar sobre un estado en deriva — ambas fronteras, inicio y push, quedan vigiladas. Además casp status --json (el traspaso de sesión estructurado) y casp verify <commit> + casp state diff (inspección de solo lectura sobre el rastro anclado en git).sessions_dir / logs_dir, para que un proyecto se valide contra su diseño real en lugar de adoptar los valores por defecto de CASP. Todo el protocolo — check, new, ship, close — las respeta. Siguen siendo tres archivos, cinco verbos, una verificación.casp ship y casp close automatizan el cierre determinista de sesión; casp check --all custodia todos los cockpits bajo una raíz en un solo informe. Las migraciones pasaron a ser totalmente opcionales (0.4.0), casp init sale verde desde la instalación (0.4.1), y check --all <ruta absoluta> se resuelve correctamente (0.4.2). Siguen siendo tres archivos, cinco verbos, una verificación — son utilidades.casp check sale completamente verde en el propio repositorio de CASP. Migraciones de Alembic (.py) y valores session_log múltiples compatibles.casp check --json + CASP se gestiona a sí mismonext en null) se valida sin errores en lugar de fallar; casp --version se deriva de package.json.casp next y un contrato de código de salida probado — limpio devuelve 0, deriva devuelve 1.state.json, now.md, roadmap.md) y el validador de deriva casp check.casp/facts.json — opcional, como migrations_applied. Un valor registrado declara su fuente, el hash de esa fuente en el momento de la verificación, el método que lo produjo y un plazo de validez. Tres comparaciones deterministas — hash de fuente modificado, validez expirada, método ausente — atrapan el hecho que *fue* cierto. No interviene ningún modelo — el suelo determinista no cambia.casp rollback estrecho (solo mutación de estado), un instalador de status check de CI, un notificador webhook genérico (saliente propiedad del usuario, desactivado por defecto). Cada elemento se publica solo con una señal de demanda real.CASP ist bewusst ein minimales Protokoll — drei Dateien, fünf Befehle, eine deterministische Prüfung. Die Roadmap hält es so: jeder Punkt nimmt Reibung weg oder erweitert die Reichweite, ohne den Vertrag aufzublähen.
casp upgradecasp upgrade frischt die Gerüstdateien eines Cockpits auf, ohne seine Daten anzutasten: Es schreibt nur casp/README.md und casp/templates/** neu, schreibt nie now.md oder roadmap.md und legt keine Vorlage über state.json. Idempotent, mit --dry-run. Ein additiver casp_version-Stempel hält fest, welche Version das Cockpit zuletzt aufgebaut hat, und casp doctor warnt, wenn er zurückfällt. 0.12.1 härtet das ab: Ein Schreibvorgang kann das Cockpit nicht mehr über ein symbolisch verknüpftes übergeordnetes Verzeichnis verlassen, die Auffrischungsmenge ist eine Positivliste — eine unbekannte Datei bleibt unangetastet —, ein unbekanntes Flag beendet sich ohne Schreibvorgang, und der Zustandsschreibvorgang ist atomar. upgrade gatet nie; check bleibt das einzige Gate.CASP-SESSION-003, die erste neue Drift-Kategorie seit den Regelcodes: Jeder Eintrag in phases_shipped[] muss durch ein Session-Log deklariert sein, das einen phase:-Schlüssel im Frontmatter trägt. Dateinamen werden nie herangezogen — wo die Zuordnung raten müsste, gibt es keinen Befund. Die Übernahme wird aus den Daten abgeleitet, nicht konfiguriert: Das erste deklarierende Log öffnet das Geltungsfenster, alles davor bleibt ausgenommen (die Zahl der Ausnahmen wird ausgegeben, nie verschwiegen), und ein Repository, in dem kein Log eine Phase deklariert, erhält überhaupt keinen Befund.casp audit status zeigt den ungeprüften Bereich seit dem letzten Deep-Audit (last_deep_audit..HEAD, Commits + Dateien, --json für Daten); casp audit bump setzt eine neue Wassermarke. Das trennt das günstige Gate bei jedem Merge (casp check, in jeder Session) vom teuren holistischen Audit, das gebündelt und bei Bedarf läuft — ein Gate für den Produktions-Cutover, nie ein Merge-Gate: casp check erhält keine neue Regel und blockiert nicht darauf. Vollständig additiv.casp doctor liest deine Umgebung — Node, git, das Cockpit, den Pre-Push-Hook — und schrankt nie ab (beendet immer mit 0); casp version --json liefert eine Übergabe { name, version, node, schema_version }; und die Ergebnisse von casp check --json tragen jetzt expected / actual, damit ein Agent die Drift vergleichen kann, ohne Prosa zu parsen. Additiv — das Berichtsschema bleibt unverändert.check-Ergebnis trägt einen stabilen CASP-<AREA>-<NNN>-Code; casp rules listet den Katalog und casp explain <CODE> druckt die Definition einer Regel. Dazu ein injektionssicherer git-Pfad für nicht vertrauenswürdige Zustandswerte, veröffentlichte JSON-Schemas und präzise Doku dazu, was CASP beweist — und was nicht.casp help ist erstklassig (beendet mit 0), mit einem fokussierten Block pro Befehl für jedes Verb — wozu es dient, Nutzung, jede Option, echte Beispiele. casp help <command> und casp <command> --help sind identisch.casp install-hook verdrahtet casp check in deinen Pre-Push-Hook; casp next verweigert nun den Start auf einem gedrifteten Zustand — beide Grenzen, Start und Push, sind bewacht. Dazu casp status --json (die strukturierte Sitzungsübergabe) und casp verify <commit> + casp state diff (schreibgeschützte Inspektion des in git verankerten Trails).sessions_dir / logs_dir, damit ein Projekt gegen sein echtes Layout validiert, statt CASPs Standardwerte zu übernehmen. Das gesamte Protokoll — check, new, ship, close — berücksichtigt sie. Weiterhin drei Dateien, fünf Verben, eine Prüfung.casp ship und casp close automatisieren den deterministischen Sitzungsabschluss; casp check --all bewacht jedes Cockpit unter einem Wurzelverzeichnis in einem einzigen Bericht. Migrationen wurden vollständig optional (0.4.0), casp init ist von Anfang an grün (0.4.1), und check --all <absoluter Pfad> wird korrekt aufgelöst (0.4.2). Weiterhin drei Dateien, fünf Verben, eine Prüfung — das sind Helfer.casp check läuft auf CASPs eigenem Repository vollständig grün. Alembic-Migrationen (.py) und mehrfache session_log-Werte werden unterstützt.casp check --json + CASP verwaltet sich selbstnext auf null) validiert sauber, statt zu scheitern; casp --version wird aus package.json abgeleitet.casp next und ein getesteter Exit-Code-Vertrag — sauber gibt 0 zurück, Drift gibt 1 zurück.state.json, now.md, roadmap.md) und der Drift-Validator casp check.casp/facts.json — optional, wie migrations_applied. Ein erfasster Wert deklariert seine Quelle, den Hash dieser Quelle zum Zeitpunkt der Prüfung, die Methode, die ihn erzeugt hat, und eine Gültigkeitsdauer. Drei deterministische Vergleiche — geänderter Quell-Hash, abgelaufene Gültigkeit, fehlende Methode — fangen die Tatsache, die *einmal* wahr war. Kein Modell ist beteiligt — der deterministische Boden bleibt unverändert.casp rollback (nur Zustandsmutation), ein CI-Status-Check-Installer, ein generischer Webhook-Notifier (vom Nutzer kontrollierter Ausgang, standardmäßig aus). Jeder Punkt erscheint erst bei echtem Bedarfssignal.