Skip to content

Constitution v2.0.0: trim domain conventions, add governance principles#3602

Merged
ten9876 merged 1 commit into
mainfrom
governance/constitution-v2-trim-domain-principles
Jun 15, 2026
Merged

Constitution v2.0.0: trim domain conventions, add governance principles#3602
ten9876 merged 1 commit into
mainfrom
governance/constitution-v2-trim-domain-principles

Conversation

@ten9876

@ten9876 ten9876 commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator

What

Amends the AetherSDR Constitution 1.1.0 → 2.0.0 (MAJOR). Updates CONSTITUTION.md and the canonical .specify/memory/constitution.md (byte-identical) plus all downstream artifacts.

Why

Five of the original principles (II MeterSmoother, III UI Labels, IV BandPlanManager, VI CHAIN Widget, VII Auto-Generated Contributors) were AetherSDR-domain implementation conventions — "use this class / read from that manager" guidance — not governance invariants encoding a cross-cutting failure mode. They're better expressed as pointers in AGENTS.md. In their place we add principles that are governance invariants for a TX-capable, networked, multi-client, AI-built SDR.

Principle changes

Removed → relocated to AGENTS.md (Key Implementation Patterns): MeterSmoother ballistics, UI-label naming, BandPlanManager, CHAIN widget, auto-generated Contributors.

Added:

# Principle
II The Radio Is Authoritative On Live State — on conflict the radio wins; reconciliation is radio→client only
III Radio-Persistable Settings Live On The Radio — if the radio can save/recall it, it lives there, not the client
IV Every Contribution Is Clean-Room — no decompiled/reverse-engineered code, start to finish (licensing integrity)
VI AetherSDR Never Transmits Without Operator Intent — no keying as a side effect; the radio owns OOB limits, we own intent
VII Untrusted Input Is Validated At The Boundary — every external stream parsed defensively, fails closed

Rewritten: V — from "use nested JSON" guidance into the invariant beneath it: Each Feature Owns Its Configuration As A Single Object (defaultable, versionable, atomically-writable — the integrity pair to XIV).

Unchanged: I (FlexLib Authority), VIII–XIV (Foundry defensive set).

Net result

Gapless I–XIV, 14 principles. I, V, and VIII–XIV keep their numerals and meaning, so their prior Principle <N>. citations stay valid. II/III/IV/VI/VII numerals were refilled with new principles — old citations to those numerals (git history, CHANGELOG) now denote different principles; a clean renumber is deferred to a later revision and recorded in the SYNC header's Citation note.

Downstream sync (in this PR)

  • AGENTS.md / CONTRIBUTING.md / GEMINI.md / .github/copilot-instructions.md — principle count back to 14, domain-principle list updated, the 5 relocated conventions added as AGENTS.md pointers, radio-authority section cross-references II & III.
  • .github/PULL_REQUEST_TEMPLATE.md — fixed the stale Principle-II example; added a clean-room (Principle IV) checklist item.
  • CMakeLists.txt — dropped an orphaned "Principle III" build comment.
  • tests/band_plan_license_filter_test.cpp — re-pointed the old "Principle IV" comment to the AGENTS.md convention.

Constitution mirror verified byte-identical; no stale counts or dangling principle citations remain (CHANGELOG entries left as historical record).

Principle XIII.

🤖 Generated with Claude Code

…principles

Constitution 1.1.0 -> 2.0.0 (MAJOR).

Removed 5 AetherSDR-domain implementation conventions (formerly II
MeterSmoother, III UI Labels, IV BandPlanManager, VI CHAIN Widget, VII
Auto-Generated Contributors) — they were "use this class / read from that
manager" guidance, not governance invariants. Relocated to AGENTS.md as
implementation pointers.

Added 5 governance principles in their place:
- II  The Radio Is Authoritative On Live State
- III Radio-Persistable Settings Live On The Radio
- IV  Every Contribution Is Clean-Room
- VI  AetherSDR Never Transmits Without Operator Intent
- VII Untrusted Input Is Validated At The Boundary

Rewrote V from "use nested JSON" into the invariant beneath it (each feature
owns its configuration as one self-contained object), the integrity pair to
Principle XIV.

Net: gapless I-XIV, 14 principles. I, V, and VIII-XIV keep their numerals and
meaning; II/III/IV/VI/VII numerals were refilled (a clean renumber is deferred).
CONSTITUTION.md and the canonical .specify/memory/constitution.md updated
byte-identically.

Downstream synced: AGENTS.md / CONTRIBUTING.md / GEMINI.md /
copilot-instructions.md counts + domain lists; PR template gains a clean-room
checklist item; stale Principle-II/IV citations re-pointed to their conventions.

Principle XIII.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@ten9876 ten9876 requested review from a team as code owners June 15, 2026 00:46

@aethersdr-agent aethersdr-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this, @ten9876 — it's a careful, well-documented governance change. I verified the mechanical claims against the branch and they hold up:

  • Byte-identityCONSTITUTION.md.specify/memory/constitution.md (cmp clean on the PR branch).
  • 14 principles, gapless I–XIV — heading count is 14; AGENTS.md/CONTRIBUTING.md/copilot/GEMINI/README all read "14 principles" consistently. The AGENTS.md domain list enumerates I–VII with no gap.
  • Test change is comment-onlytests/band_plan_license_filter_test.cpp touches only the header doc-comment (2 lines); the test body is untouched, so no build/behavior risk. Same for the CMakeLists.txt comment.
  • ✅ Downstream sync (PR template, copilot, CONTRIBUTING, GEMINI, AGENTS) is internally consistent with the new principle set.

No code-correctness concerns — this is docs/governance, so the AppSettings/RAII/boundary-handling review dimensions are N/A.

One substantive point for maintainer judgment (not a blocker): the numeral refill of II/III/IV/VI/VII. You've disclosed this honestly in the SYNC "Citation note," but it's worth surfacing explicitly: existing citations don't just go stale, they become actively misleading. For example CHANGELOG.md:486 ("Bandplan edge corrected to 21.200 MHz (Principle IV.)") and :491/:496/:1345 all cite the old BandPlanManager principle — under v2.0.0 those Roman numerals now resolve to "Every Contribution Is Clean-Room." A future reader cross-referencing a CHANGELOG entry to the live constitution gets a wrong, plausible-looking match, with nothing flagging the mismatch. Same for :478 (II → was MeterSmoother, now Radio-Authoritative) and :622 (VI → was CHAIN, now Transmit-On-Intent).

The alternative that preserves citation stability would be to append the 5 new principles as XV–XIX and leave I–XIV's meanings fixed (optionally tombstoning the 5 removed ones as "Relocated to AGENTS.md — see Key Implementation Patterns"). That keeps every historical Principle <N> citation valid forever, at the cost of non-contiguous "domain vs. governance" grouping. The refill approach you've taken trades that durability for a clean 1–14 block now plus a deferred renumber later — a reasonable call, but it's the maintainers' to make since they own the citation surface. If you keep the refill, consider whether the deferred "clean renumber" TODO is something this PR should resolve rather than carry forward, since each release that lands citing the refilled numerals deepens the ambiguity.

Minor (description only, nothing committed): the PR body has a leaked template token — "cross-references II ${PR_DIFF} III" — and a couple of stray trailing "Principle XIII."/"Principle XIV" lines. Harmless since they're not in the tree, but worth tidying so the description reads clean.

Overall the change is coherent, verified, and the one real tradeoff is documented. Deferring to the maintainers on the refill-vs-append decision.


🤖 aethersdr-agent · cost: $4.6214 · model: claude-opus-4-8

@ten9876 ten9876 merged commit e6218e4 into main Jun 15, 2026
6 checks passed
@ten9876 ten9876 deleted the governance/constitution-v2-trim-domain-principles branch June 15, 2026 13:51
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