Commit graph

15 commits

Author SHA1 Message Date
Natalie
7a32fa18fc infra_manifest v0.7.0: deployment model rules (manage-apps, systemd, mesh)
Capture the deployment/supervision model now implemented by @quinn/manage-apps:
- manage_apps_orchestrator: manage-apps auto-discovers .infra.yaml (no registry);
  retire per-app app.manifest.yaml and hand-rolled start/deploy ssh scripts.
- systemd_supervision: standing cloud services run as systemd units (not
  foreground ssh / PID files); deploy installs the unit, manage-apps drives it.
- mesh_host_resolution: service.host is an ssh alias from net-tools host-apply;
  internal traffic rides the WG mesh (no auth on-mesh, no public app ports).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 03:30:10 -04:00
Natalie
cf2f1532c7 feat(infra_manifest): global droplet tier com.uvlava.<role> (DNS)
Add a global tier (no producer segment) for cross-producer shared services:
com.uvlava.dns (DNS), com.uvlava.wg (mesh hub). Pattern now allows optional
producer segment. Producer hosts stay com.uvlava.<producer>.<role>.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 02:17:41 -04:00
Natalie
5024ee517d infra_manifest: mandate DigitalOcean + reverse-DNS droplet naming
Add two must-rules and a schema pattern:
- cloud_provider: standing cloud hosts run on DO (nyc3 default), uvlava TF.
- droplet_naming: com.uvlava.<producer>.<role>; name is ForceNew → rename
  live via doctl + ignore_changes=[name], never a destructive apply.
- droplets[].name pattern ^com\.uvlava\.(ct|mc|quinn)\.[a-z0-9-]+$

Reflects the live fleet: com.uvlava.{ct.services,ct.redroid,quinn.artifacts,quinn.infra}.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 20:42:20 -04:00
Natalie
11fc015686 feat(infra_manifest): producer-level shared-infra droplets topology
Add optional `droplets` array for producer-root manifests (@quinn/.infra.yaml):
one shared services droplet (all forges + npm/pypi/swift registries + DNS + edge)
+ a dedicated MCP droplet, instead of one droplet per producer. v0.3.0->0.4.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 14:16:22 -04:00
Natalie
d1629a7545 feat(recursive_code_workspace): one forge per producer + tf-forge module
Each producer has its OWN forge (no sharing): ct-forge, mc-forge, quinn-forge.
@quinn moves from the interim ct-forge quinn/ user namespace to a dedicated
quinn-forge. All three forges are stood up from the same reusable module
@quinn/@developer/tf-forge (DO project + droplet + Forgejo + Verdaccio + PAT).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 11:19:15 -04:00
Natalie
62258be795 feat(recursive_code_workspace): root holds producers only; add @projects kind-org
Root (~/Code) contains ONLY producer namespaces (@ct/@mc/@quinn) + support
buckets. Kind-orgs never appear at root — they nest one level down under a
producer: path is ~/Code/<producer>/<kind-org>/<repo> (e.g. ~/Code/@quinn/
@packages, never ~/Code/@packages). Add @projects as a kind-org (project-shaped
initiatives vs single deployable @applications).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 11:13:44 -04:00
Natalie
a3e38820db feat(recursive_code_workspace): @quinn default user producer
Add @quinn as the default producer namespace (Quinn's user account) for any
repo not distinctly @ct or @mc. Two forge hosts (ct-forge, mc-forge); three
producer namespaces (@ct/@mc org-backed, @quinn user-backed on ct-forge quinn/).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 11:08:17 -04:00
Natalie
420c61fc80 docs(recursive_code_workspace): pin exact platform version lineage
Confirmed via README version markers + git history: egirl=v0, lilith-platform=v1,
lilith-platform.live=v2 (still live prod), atlilith=v3, cocottetech=v4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 11:03:42 -04:00
Natalie
796658a325 fix(recursive_code_workspace): two producers only; lilith/egirl are versions
Correct the producer model: exactly two producers/forges — @ct (ct-forge)
and @mc (mc-forge); black.lan retired. "lilith"/"egirl" are NOT producers
but version names of the single ct platform lineage: egirl=v0, lilith=v1-v3,
cocotte=v4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 10:59:31 -04:00
Natalie
59368f8bc8 feat(recursive_code_workspace): model producer namespaces + kind-orgs
Encode the abstract workspace model: @org dirs are either producer
namespaces (@ct) mirroring a forge, or kind-orgs (@applications/@packages/
@platform/@developer). Add rules for forge-mirroring, scope-by-repo-boundary,
3-tier package placement, and versioned @platform generations. v0.1.0->0.2.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 10:56:38 -04:00
Natalie
f2242e969a feat(infra_manifest): optional .infra.<env>.yaml dev/prod variants (v0.3.0)
Add an optional 'environment' field (default prod) and document sibling
.infra.dev.yaml manifests (same schema) so a project can declare a distinct
non-prod deployment — e.g. a local mac operator instance alongside the DO prod
service. Run-only/access config (passcodes, bind addrs) stays out of the manifest.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 10:20:12 -04:00
Natalie
578233c1b4 feat(infra_manifest): v0.2.0 — host∈mesh-hosts rule, broaden provider (mac/bare-metal/local)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 10:10:16 -04:00
Natalie
3dc5a9b321 feat(conventions): codify lilith v0-v4 conventions (py/rust/gd + 7 general)
Mined the egirl->cocotte lineage + the prose agentic configs. Per-language
standards (py/rust/gd) and general conventions: service_architecture,
multi_agent_workflow, error_handling_logging, mcp_server_patterns,
naming_conventions, tenancy_patterns (draft), database_patterns. Captures the
canonical/latest where versions diverged. 14/14 lint:yaml-valid.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 08:42:44 -04:00
Natalie
59656b5b93 feat(conventions): apiVersion+semver versioning, run lint:yaml CLI, rename infra_manifest
Add document apiVersion (conventions/v1) + per-convention semver + updated date to
the schema and all seed conventions; manifest files carry their own apiVersion
(infra/v1). New ./run (symlink -> scripts/cli/run) with lint:yaml validating every
programming_*/<name>.yaml against the schema (name==filename, scope==dir). Rename
infra-manifest.yaml -> infra_manifest.yaml for name match. 4/4 valid.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 08:36:10 -04:00
Natalie
48d4853685 feat(conventions): seed central workspace+coding conventions repo
convention.yaml.schema (meta-schema) + per-language dirs (general/ts/swift/py/
rust/gd). Seed conventions: recursive_code_workspace (the ~/Code @org tree,
always-active), infra_manifest (per-project .infra.yaml + its schema), and
ts/code_standards + general/git_commit (shifted from the prose agentic configs).
Referenced by global config as convention:<name>(<args>).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 08:19:39 -04:00