diff --git a/.codespellignore b/.codespellignore index beb047d..a927898 100644 --- a/.codespellignore +++ b/.codespellignore @@ -1,24 +1 @@ -Auctor -Astris -MoU -MoUs -kWh -k-anonymity -de-id -Civic -Tome -RME -DOE -HUD -NIH -CDC -DOJ -OMB -GAO -CBO -POC -SKU -IRB -CPD -HRV -PSL +# Add words you intentionally keep diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml new file mode 100644 index 0000000..19a30c3 --- /dev/null +++ b/.github/workflows/audit.yml @@ -0,0 +1,18 @@ +name: Audit + +on: + pull_request: + branches: [ dev, main ] + +jobs: + audit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + - name: Run audit + run: | + python scripts/audit_completeness.py diff --git a/MANIFEST.json b/MANIFEST.json new file mode 100644 index 0000000..f1cc6e3 --- /dev/null +++ b/MANIFEST.json @@ -0,0 +1,10 @@ +{ + "required_files": [ + "docs/doctrine/manifesto.md", + "docs/frameworks/constella_1.6.md", + "docs/frameworks/constella_project_tree.md", + "docs/research/celestial_ecology.md", + "docs/research/cymatic_faith_links.md", + "docs/archive/README.md" + ] +} \ No newline at end of file diff --git a/Makefile b/Makefile index 63e412b..802e4b5 100644 --- a/Makefile +++ b/Makefile @@ -5,11 +5,13 @@ check: spell lint spell: @echo ">> codespell (skip if not installed)"; \ if command -v codespell >/dev/null; then \ - codespell --ignore-words .codespellignore . || exit 1; \ + find . -type f \( -name "*.md" -o -name "*.txt" -o -name "*.rst" \) \ + -not -path "./docs/constella/_inbox/*" \ + -print0 | xargs -0 codespell --check-filenames --ignore-words .codespellignore || exit 1; \ else echo "codespell not installed, skipping"; fi lint: @echo ">> markdownlint (skip if not installed)"; \ if command -v markdownlint >/dev/null; then \ - markdownlint "**/*.md" -c .markdownlint.json || exit 1; \ - else echo "markdownlint not installed, skipping"; fi + markdownlint "**/*.md" -c .markdownlint.json || exit 1; \ + else echo "markdownlint not installed, skipping"; fi \ No newline at end of file diff --git a/docs/archive/README.md b/docs/archive/README.md new file mode 100644 index 0000000..5e19cf3 --- /dev/null +++ b/docs/archive/README.md @@ -0,0 +1,3 @@ +# Archive + +Drop exported chat transcripts here (Markdown or text). Use `scripts/sync_chat_archive.py` to index. diff --git a/docs/doctrine/manifesto.md b/docs/doctrine/manifesto.md new file mode 100644 index 0000000..51e2463 --- /dev/null +++ b/docs/doctrine/manifesto.md @@ -0,0 +1,5 @@ +# Constella 1.6 Manifesto: Doctrine of Resonance Origin + + + +See: `../img/resonance_origin_diagram.png` diff --git a/docs/frameworks/constella_1.6.md b/docs/frameworks/constella_1.6.md new file mode 100644 index 0000000..ff189cb --- /dev/null +++ b/docs/frameworks/constella_1.6.md @@ -0,0 +1,10 @@ +# Constella 1.6 Framework + +- Cosmic Resonance +- Gaia Resonance +- Faith (traditional) +- FAITHH AI (tools) +- Technology/Tools + +## Project Tree +(Insert project tree diagram / bullets) diff --git a/docs/frameworks/constella_project_tree.md b/docs/frameworks/constella_project_tree.md new file mode 100644 index 0000000..48d4f72 --- /dev/null +++ b/docs/frameworks/constella_project_tree.md @@ -0,0 +1,7 @@ +# Project Tree + +- Cosmic Resonance +- Gaia Resonance +- Faith Layer +- FAITHH AI / Tools +- Tech & Ops diff --git a/docs/research/celestial_ecology.md b/docs/research/celestial_ecology.md new file mode 100644 index 0000000..51a951c --- /dev/null +++ b/docs/research/celestial_ecology.md @@ -0,0 +1,5 @@ +# Celestial Ecology + +- Moon as stabilizer +- Star resonance and biological rhythms +- Feedback loops (Gaia circuit) diff --git a/docs/research/cymatic_faith_links.md b/docs/research/cymatic_faith_links.md new file mode 100644 index 0000000..5e6ed65 --- /dev/null +++ b/docs/research/cymatic_faith_links.md @@ -0,0 +1,4 @@ +# Cymatic Fingerprint of Faiths + +- Origin regions → sky patterns → principles +- Constellation archetypes mapped to religious motifs diff --git a/rfcs/000-template.md b/rfcs/000-template.md new file mode 100644 index 0000000..f1ec977 --- /dev/null +++ b/rfcs/000-template.md @@ -0,0 +1,25 @@ +# RFC: + +- Status: Draft +- Authors: <name> +- Reviewers: <names> +- Created: <YYYY-MM-DD> +- Target Release: 1.6 / 2.0 + +## Summary +<Short summary> + +## Motivation +<Why> + +## Proposal +<What is being changed / added> + +## Alternatives +<Considered options> + +## Risks +<Concerns, mitigations> + +## Decision Record +<Fill after review> diff --git a/scripts/audit_completeness.py b/scripts/audit_completeness.py new file mode 100644 index 0000000..f5c0739 --- /dev/null +++ b/scripts/audit_completeness.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +import json, pathlib, sys + +ROOT = pathlib.Path(__file__).resolve().parents[1] + +def main(): + manifest = json.loads((ROOT / "MANIFEST.json").read_text(encoding="utf-8")) + missing = [] + for req in manifest.get("required_files", []): + if not (ROOT / req).exists(): + missing.append(req) + if missing: + print("[WARN] Missing required files:") + for m in missing: + print(" -", m) + sys.exit(1) + print("[OK] All required files present.") + +if __name__ == "__main__": + main() diff --git a/scripts/sync_chat_archive.py b/scripts/sync_chat_archive.py new file mode 100644 index 0000000..d2fca5c --- /dev/null +++ b/scripts/sync_chat_archive.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 + +import os, sys, pathlib, re + +ARCHIVE_DIR = pathlib.Path(__file__).resolve().parents[1] / "docs" / "archive" +INDEX = ARCHIVE_DIR / "index.md" + +def main(): + ARCHIVE_DIR.mkdir(parents=True, exist_ok=True) + files = sorted([p for p in ARCHIVE_DIR.glob("**/*") if p.is_file() and p.suffix.lower() in (".md",".txt") and p.name != "index.md"]) + lines = ["# Archive Index\\n"] + for p in files: + rel = p.relative_to(ARCHIVE_DIR) + # extract top-level header if present + title = None + try: + for line in p.read_text(encoding="utf-8", errors="ignore").splitlines(): + if line.strip().startswith("# "): + title = line.strip().lstrip("# ").strip() + break + except Exception: + pass + display = title or rel.as_posix() + lines.append(f"- [{display}]({rel.as_posix()})") + INDEX.write_text("\\n".join(lines), encoding="utf-8") + print(f"[OK] Indexed {len(files)} items to {INDEX}") + +if __name__ == "__main__": + main()