Skip to content

prep: ready zeitghost for Apache-2.0 OSS companion release#15

Merged
aaronmarkham merged 2 commits into
mainfrom
prep/oss-release
Jun 1, 2026
Merged

prep: ready zeitghost for Apache-2.0 OSS companion release#15
aaronmarkham merged 2 commits into
mainfrom
prep/oss-release

Conversation

@aaronmarkham

Copy link
Copy Markdown
Owner

Preps zeitghost for an Apache-2.0 open-source release alongside spiritwriter-core.

What this does

License/community files

  • Adds CHANGELOG.md (Keep a Changelog style, matching spiritwriter-core), seeded with 0.1.0.
  • LICENSE (full Apache 2.0), NOTICE, and pyproject.toml license metadata were already correct.

Scrubbing private infra from tracked files

  • Per-node identity now comes from the environment / CI secrets instead of being committed:
    • Inventory reads ansible_host via lookup("env", "DEPLOY_HOST") (required) and ansible_user via lookup("env", "DEPLOY_USER") (defaults to deploy); /home/... paths derive from ansible_user.
    • The deploy workflow injects DEPLOY_HOST/DEPLOY_USER from repo secrets, and the health check curls $DEPLOY_HOST instead of the literal IP.
  • Genericized the bootstrap deploy user frionodedeploy throughout infra/bootstrap/.
  • git grep for the old IP / username returns nothing.

Docs

  • Softened perseus-news references (private sibling) and dropped the dead GitHub link in README.md / CLAUDE.md.

Intentionally left in place

  • Domain news.spiritwriter.ai / spiritwriter.ai — it is the public site (nginx server_name, rendered landing page), not a secret.

Required before next deploy

Repo secrets DEPLOY_HOST and DEPLOY_USER must be set (done). Without them the inventory has no SSH target.

Validation

  • Inventory + workflow YAML parse; bash -n clean on bootstrap.sh.
  • No secrets found in a full-tree scan.

🤖 Generated with Claude Code

aaronmarkham and others added 2 commits May 31, 2026 12:09
- Add CHANGELOG.md (Keep a Changelog, seeded with 0.1.0)
- Soften perseus-news references (private sibling, drop dead GitHub link)
  in README and CLAUDE.md
- Move per-node identity out of tracked files into CI secrets / env:
  inventory reads ansible_host + ansible_user via lookup("env", ...)
  (DEPLOY_HOST required, DEPLOY_USER defaults to "deploy"); deploy
  workflow injects both from repo secrets and the health check curls
  $DEPLOY_HOST instead of the literal IP
- Genericize bootstrap deploy user frionode -> deploy throughout

Domain (news.spiritwriter.ai) intentionally left in place: it is the
public site, baked into nginx server_name and the rendered landing page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
spiritwriter-core renamed its PyPI distribution to `spiritwriter` (>=0.9.0).
The import name is unchanged, so zeitghost's `import spiritwriter` code is
unaffected — but several spots reference the *distribution* name and would
break or go stale otherwise:

- pyproject + CLAUDE.md: dependency `spiritwriter-core` -> `spiritwriter>=0.9.0`
- generator.py / shards.py: `importlib.metadata.version("spiritwriter-core")`
  -> `version("spiritwriter")` (footer/provenance version chip; resolved to
  ""/"?" under the old name once the renamed wheel is installed)
- wheel-build globs: `spiritwriter_core-*.whl` -> `spiritwriter-*.whl` in the
  deploy workflow and build-wheels.sh (wheel filename derives from the dist
  name, so the cleanup glob no longer matched the rebuilt wheel)
- public site: `pip install spiritwriter` in the install chip + copy button,
  PyPI project URL, and "Powered by spiritwriter" branding across templates

Left unchanged: the GitHub repo (`aaronmarkham/spiritwriter-core`) isn't
renamed, so repo URLs, the CI checkout dir (`path: spiritwriter-core`),
sibling-repo paths (`../../../spiritwriter-core`), and a few infra comments
that name the source repo stay as-is.

Tests: 67 passed. `version("spiritwriter")` resolves to 0.9.0; rebuilt wheel
`spiritwriter-0.9.0-*.whl` matches the updated glob.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@aaronmarkham aaronmarkham merged commit 3636876 into main Jun 1, 2026
1 check passed
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