Skip to content

Phase B: mechanical plugin sync (structure source-of-truth + coherence check + version discipline) - #10

Merged
crowcreation merged 2 commits into
mainfrom
sync-plugin-phase-b
Jun 20, 2026
Merged

Phase B: mechanical plugin sync (structure source-of-truth + coherence check + version discipline)#10
crowcreation merged 2 commits into
mainfrom
sync-plugin-phase-b

Conversation

@crowcreation

Copy link
Copy Markdown
Owner

Fast-follow to Phase A (#9). Leaves behind machinery so the plugin cannot silently drift from its own source again, on two axes. Not launch-blocking.

Axis A — plugin ↔ repo (prevent recurrence)

  • nexus.structure.json — single machine-readable source of structural truth (failure-log path, session-state dir, universe path, PARA folders, frontmatter fields, command set, optional drift vocabulary). Nothing imports it; it is canonical because the check makes deviation fail. Narrated by a thin STRUCTURE.md.
  • scripts/check_plugin_coherence.py — zero-dependency stdlib check (13 assertions) against the verified consumer allowlist: no stale .nexus state paths anywhere, one failure-log path across all consumers, command set matches the JSON + README, drift vocabulary consistent where it appears, the seed log stays category-free; advisory PARA-folder scan on the scaffolders. Exits non-zero with a precise diff.
  • Wired as a pre-commit hook (.pre-commit-config.yaml) and a GitHub Action (.github/workflows/coherence.yml).
  • /nexus-init and the setup-prompt are documented as two thin emitters of the one structure, kept honest by the check; /field-report stays the human drift backstop.

Axis B — plugin ↔ users (keep installs current)

  • CHANGELOG.md (Keep-a-Changelog): 0.6.0 reconciliation + this 0.7.0 entry. CONTRIBUTING.md rule: every command/hook/structure change bumps the version and adds a changelog entry. Version 0.6.0 → 0.7.0.
  • Offline staleness surface: session_preflight.py prints the installed plugin version, read from the manifest. No network call.
  • docs/updating.md: CLI (/plugin marketplace update + reinstall) vs desktop Customize panel (remove + re-add when greyed); /plugin is CLI-only; nexus: namespacing. Linked from README.
  • STRUCTURE.md documents the two-layer trade-off: discipline in the paste layer (never stale on the user), enforcement automation in the plugin (accepted update cost).

Category decision (resolved)

Drift categories are an optional, emergent vocabulary, never imposed on a day-one log. The seed template is now category-free, so /nexus-init and the setup-prompt agree; the seven codes remain only as an opt-in reference in the failure-logging skill, CLAUDE-lite, and /failure. The check asserts the vocabulary is consistent where it appears, not that any log is categorised.

Verification

  • Coherence check exits 0 against the reconciled main (this also validated Phase A's completeness).
  • Deliberate break (re-point a command's failure-log path to .nexus/) → check fails with a precise file:line diff. Reverted.
  • pre-commit and the Action both run the check; both YAMLs parse valid.

Also folded in

  • GETTING-STARTED.md + a README pointer — a greenfield terminal onboarding doc that landed in the working tree alongside the Phase B README edits. Additive onboarding, not part of the sync machinery; separate commit (c96b76e). KB-root consistent; check stays green.

🤖 Generated with Claude Code

crowcreation and others added 2 commits June 20, 2026 14:17
Leaves behind machinery so the plugin cannot silently drift from its own
source again, on two axes.

Plugin<->repo (prevent recurrence):
- nexus.structure.json: single machine-readable source of structural truth
  (paths, PARA folders, frontmatter, command set, optional drift vocabulary),
  narrated by a thin STRUCTURE.md. Nothing imports it; the check makes
  deviation fail.
- scripts/check_plugin_coherence.py: zero-dependency stdlib check asserting
  every consumer agrees with the structure file (no stale .nexus state paths,
  one failure-log path everywhere, command set matches the JSON and README,
  drift vocabulary consistent where it appears, category-free seed log;
  advisory PARA-folder scan). Wired as a pre-commit hook and a GitHub Action.

Plugin<->user (keep installs current):
- CHANGELOG.md (Keep-a-Changelog) with the 0.6.0 reconciliation and this
  0.7.0 entry; CONTRIBUTING rule that every command/hook/structure change
  bumps the version and adds an entry. Version 0.6.0 -> 0.7.0.
- session_preflight.py prints the installed plugin version, read offline from
  the manifest (no network).
- docs/updating.md: CLI vs desktop update routes; linked from README.
- STRUCTURE.md documents the two-layer sync trade-off (discipline in the
  paste layer, enforcement in the plugin).

Category decision (resolved): drift categories are an optional, emergent
vocabulary, never imposed on a day-one log. Seed template is now category-free
so /nexus-init and the setup prompt agree; the seven codes remain only as an
opt-in reference in the skill, CLAUDE-lite, and /failure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Greenfield terminal path from empty terminal to a running Nexus in ~10
minutes. Folded into this branch because it appeared in the working tree
alongside the Phase B README edits; it is additive onboarding, not part of
the sync machinery. KB-root consistent (root failure-log.md, declared
commands, no .nexus state paths) — coherence check stays green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 20, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
nexus-deploy Ready Ready Preview, Comment Jun 20, 2026 1:40pm

@crowcreation
crowcreation merged commit 41f3993 into main Jun 20, 2026
3 checks passed
@crowcreation
crowcreation deleted the sync-plugin-phase-b branch June 20, 2026 13:42
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