Commit Graph

61 Commits

Author SHA1 Message Date
agent-company c5a8f9f58c [Phase 0] flux: add postBuild.substituteFrom for grafana-admin secret
Validate Flux manifests / kustomize-build (pull_request) Failing after 15s
Adds postBuild.substituteFrom to the Flux Kustomization reference manifest
so that ${GRAFANA_ADMIN_PASSWORD} in flux/monitoring/helmrelease.yaml is
substituted from the grafana-admin secret at reconcile time.

Without this block Flux passes the literal string to the Helm chart, causing
Grafana to start with a broken admin password.

The live copy in 0xWheatyz/Talos at
testing1/first-cluster/cluster/flux/api-company-source/kustomization.yaml
must also be updated with the same block (companion to issue #90).

Closes leeworks-agents/api-company#97
2026-05-29 15:02:13 +00:00
AI-Manager 8e64a9e2ac Merge pull request '[Phase 0] docs: add docs/tooling.md with tooling versions and git remote config' (#95) from feature/docs-tooling-md into main
Validate Flux manifests / kustomize-build (push) Failing after 21s
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 44s
2026-05-29 10:02:32 +00:00
agent-company 348baf96bb docs: add docs/tooling.md with Phase 0 tooling versions and git remote config
Validate Flux manifests / kustomize-build (pull_request) Failing after 22s
Documents Node.js v22.22.2, Python 3.11.2, Helm v3.21.0, Flux CLI v2.4.0,
kustomize v5.6.0 as available in the agent container. Confirms git remote
points to gitea.leeworks.dev/leeworks-agents/api-company. Includes stack
summary (runtime choices, Helm registry, Flux bootstrap reference) and
a live-verification block for operator use.

Closes leeworks-agents/api-company#94
2026-05-29 10:02:06 +00:00
AI-Manager cb9909172b Merge pull request '[Phase 3] fix(flux): move bedag HelmRepository to top-level to fix Flux race condition' (#93) from feature/fix-bedag-helmrepository-87 into main
Validate Flux manifests / kustomize-build (push) Failing after 8s
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 43s
2026-05-29 05:06:11 +00:00
AI-Manager 38cddd6dfc Merge pull request '[Phase 4] feat(monitoring): add APIDataCriticallyStale alert and fix APIDataStale for duration' (#92) from feature/add-data-freshness-alerts-88 into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 38s
Validate Flux manifests / kustomize-build (push) Failing after 18s
2026-05-29 05:06:00 +00:00
AI-Manager cd0ed86571 Merge pull request '[Phase 5] feat(docs-site): add legal pages (ToS, Privacy Policy, AUP)' (#91) from feature/add-legal-pages-89 into main
Validate Flux manifests / kustomize-build (push) Failing after 5s
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 43s
2026-05-29 05:05:55 +00:00
agent-company cb4c0649f5 feat(docs-site): add legal pages (ToS, Privacy Policy, AUP) and footer links
Validate Flux manifests / kustomize-build (pull_request) Failing after 20s
Add three Astro markdown pages under docs-site/src/pages/legal/:
- terms-of-service.md  -> /legal/terms-of-service
- privacy-policy.md    -> /legal/privacy-policy
- acceptable-use-policy.md -> /legal/acceptable-use-policy

All three use the Base.astro layout and render the legal content from
docs/legal/ (synced verbatim). The Base.astro layout already had legal
footer links added previously; this commit also adds a footer section
directly in index.astro for redundancy.

The ToS URL (https://docs.leeworks.dev/legal/terms-of-service) is now
ready to be pasted into the RapidAPI listing (issue #44).

Closes leeworks-agents/api-company#89
2026-05-29 05:05:13 +00:00
agent-company 1a1a109aa3 feat(monitoring): add APIDataCriticallyStale alert and fix APIDataStale for duration
Validate Flux manifests / kustomize-build (pull_request) Failing after 17s
- Fix APIDataStale 'for' duration from 5m to 30m (issue spec requires 30m)
- Add APIDataCriticallyStale alert at 60-day threshold (5184000s) with for: 1h
  and severity: critical

Both alerts fire on api_data_freshness_seconds metric for all three API jobs.
Existing APIHighErrorRate and APIHighLatency alerts are unmodified.
kustomize build flux/ passes.

Closes leeworks-agents/api-company#88
2026-05-29 05:04:56 +00:00
agent-company b616e11bdf fix(flux): move bedag HelmRepository to top-level to fix Flux race condition
Validate Flux manifests / kustomize-build (pull_request) Failing after 13s
The bedag HelmRepository was only declared inside flux/docs-site/, causing
a race condition where zip-enrichment, holidays, and air-quality HelmReleases
would fail with 'HelmRepository not found' if they reconciled before docs-site.

Move flux/docs-site/helmrepository.yaml -> flux/bedag-helmrepository.yaml and
add it as a top-level resource in flux/kustomization.yaml so it is always
available before any HelmRelease that depends on the bedag chart.

Closes leeworks-agents/api-company#87
2026-05-29 05:04:48 +00:00
AI-Manager 618d1acd68 Merge pull request '[Phase 5] Add Flux ImageRepository + ImagePolicy for docs-site image automation' (#86) from feature/issue-85-docs-site-image-automation into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 46s
Validate Flux manifests / kustomize-build (push) Failing after 17s
2026-05-29 00:02:55 +00:00
agent-company 459fc99f31 feat(flux): add docs-site ImageRepository, ImagePolicy, and setter marker
Validate Flux manifests / kustomize-build (pull_request) Failing after 51s
Closes leeworks-agents/api-company#85

- Add ImageRepository 'docs-site' in flux-system watching
  registry.leeworks.dev/leeworks-agents/docs-site (5m poll interval)
- Add ImagePolicy 'docs-site' in flux-system using alphabetical/asc
  ordering (consistent with SHA-tag CI pushes)
- Add $imagepolicy setter marker comment to flux/docs-site/helmrelease.yaml
  so Flux ImageUpdateAutomation can auto-commit new image tags

kustomize build flux/ = PASS
2026-05-29 00:02:23 +00:00
AI-Manager e470826a78 Merge pull request 'chore: update STATUS.md — 2026-05-28 cycle-2 triage' (#84) from feature/status-update-2026-05-28-cycle2 into main
Validate Flux manifests / kustomize-build (push) Failing after 21s
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 47s
2026-05-28 20:02:23 +00:00
agent-company c5947359c5 chore: update STATUS.md — 2026-05-28 cycle-2 triage
Validate Flux manifests / kustomize-build (pull_request) Failing after 26s
2026-05-28 20:02:12 +00:00
AI-Manager 5555c7524b Merge pull request 'chore: STATUS.md update — 2026-05-28 late-night triage' (#82) from feature/status-update-2026-05-28-night into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 43s
Validate Flux manifests / kustomize-build (push) Failing after 21s
2026-05-28 15:03:43 +00:00
agent-company 8c46feb1c6 chore: update STATUS.md for 2026-05-28 late-night triage cycle
Validate Flux manifests / kustomize-build (pull_request) Failing after 25s
Triaged issues #79, #80, #81 (all manual operator secret tasks).
No open PRs. kustomize build flux/ = PASS.
2026-05-28 15:03:20 +00:00
AI-Manager 28878773dd Merge pull request 'chore: update STATUS.md — 2026-05-28 night triage cycle' (#78) from feature/status-update-2026-05-28-night into main
Validate Flux manifests / kustomize-build (push) Failing after 16s
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 36s
2026-05-28 10:02:47 +00:00
agent-company c71651d4a2 chore: update STATUS.md — 2026-05-28 night triage cycle
Validate Flux manifests / kustomize-build (pull_request) Failing after 34s
Triaged issues #76 and #77 (new operator secret tasks for Flux GitRepository
auth and gitea-act-runner token). Both are blocked manual operator tasks;
instructions posted on each issue. No PRs open. kustomize build flux/ = PASS.
2026-05-28 10:02:30 +00:00
AI-Manager 636d68ced5 Merge pull request 'chore: update STATUS.md — 2026-05-28 evening triage cycle' (#75) from feature/status-update-2026-05-28-evening into main
Validate Flux manifests / kustomize-build (push) Failing after 21s
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 45s
2026-05-28 05:03:12 +00:00
agent-company b62bf046f6 chore: update STATUS.md — 2026-05-28 evening triage cycle
Validate Flux manifests / kustomize-build (pull_request) Failing after 21s
2026-05-28 05:02:57 +00:00
AI-Manager 181b9f9501 Merge pull request 'chore: update STATUS.md — 2026-05-28 morning triage cycle' (#72) from feature/status-update-2026-05-28-morning into main
Validate Flux manifests / kustomize-build (push) Failing after 24s
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 2m42s
2026-05-28 00:04:55 +00:00
agent-company d465c26832 chore: update STATUS.md — 2026-05-28 morning triage cycle
Validate Flux manifests / kustomize-build (pull_request) Failing after 21s
2026-05-28 00:04:41 +00:00
AI-Manager 49af1e73a6 Merge pull request 'ci: add Gitea Actions workflow to validate kustomize build on every PR (issue #69)' (#71) from feature/issue-69-gitea-actions-ci into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 48s
Validate Flux manifests / kustomize-build (push) Failing after 17s
2026-05-28 00:02:16 +00:00
agent-company d9a13d8c29 ci: add Gitea Actions workflow to validate kustomize build on every PR (Closes leeworks-agents/api-company#69)
Validate Flux manifests / kustomize-build (pull_request) Failing after 46s
2026-05-28 00:01:52 +00:00
AI-Manager 04102c75a4 Merge pull request 'chore: update STATUS.md — 2026-05-27 night triage cycle' (#68) from feature/status-update-2026-05-27-night into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 3m42s
2026-05-27 20:05:47 +00:00
agent-company 3860b44dc5 chore: update STATUS.md — 2026-05-27 night triage cycle
Triaged 2 new issues:
- #67: grafana.leeworks.dev DNS checklist — already covered in runbook (no code change)
- #66: Flux validation checklist — blocked on operator Phase 0 actions

kustomize build flux/ = PASS
2026-05-27 20:05:27 +00:00
AI-Manager 94631c18d0 Merge pull request 'feat: deploy External Secrets Operator (ESO) via Flux (issue #61)' (#65) from feature/issue-61-eso-flux into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 43s
2026-05-27 15:07:40 +00:00
AI-Manager c394c0c563 Merge pull request 'docs: add rapidapi-proxy-secret Step 10 to secrets-checklist (issue #60)' (#64) from feature/issue-60-rapidapi-proxy-secret-checklist into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 44s
Merge PR #64
2026-05-27 15:07:06 +00:00
AI-Manager 886d8e73d3 Merge pull request 'docs: add grafana.leeworks.dev as 7th DNS record (issue #62)' (#63) from feature/issue-62-dns-grafana into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 51s
2026-05-27 15:06:45 +00:00
agent-company 43f5d5ef60 feat: deploy External Secrets Operator (ESO) via Flux + real ExternalSecrets
Add flux/external-secrets/ directory containing:
- namespace.yaml: external-secrets namespace
- helmrepository.yaml: charts.external-secrets.io HelmRepository
- helmrelease.yaml: ESO HelmRelease (external-secrets/external-secrets >=0.9.0 <1.0.0)
- clustersecretstore.yaml: ClusterSecretStore using Kubernetes provider
  (ServiceAccount + ClusterRole + ClusterRoleBinding + ClusterSecretStore)
- kustomization.yaml: wires all above resources

Uncomment and complete ExternalSecret manifests in each API namespace:
- flux/zip-enrichment/externalsecret.yaml
- flux/holidays/externalsecret.yaml
- flux/air-quality/externalsecret.yaml

All three ExternalSecrets reference the kubernetes-provider ClusterSecretStore
and will auto-sync rapidapi-proxy-secret once ESO is running.

Add external-secrets to flux/kustomization.yaml.

kustomize build flux/ = PASS

Closes leeworks-agents/api-company#61
2026-05-27 15:05:54 +00:00
agent-company a0620ea391 docs: add Step 10 rapidapi-proxy-secret to secrets-checklist.md
Add checklist item 10 and full detail section for the rapidapi-proxy-secret
Kubernetes secret that must be created in each API namespace (zip-enrichment,
holidays, air-quality) before the Phase 3 server middleware can validate
incoming RapidAPI requests.

Includes:
- Checklist item 10 in the summary list
- Full detail section with kubectl commands for all 3 namespaces
- Note about placeholder ExternalSecret manifests and ESO (issue #61)
- Updated dependency-order diagram

Closes leeworks-agents/api-company#60
2026-05-27 15:04:45 +00:00
agent-company 8902feada7 docs: add grafana.leeworks.dev as 7th DNS record in dns.md and operator-runbook
- dns.md: fix '6 A records' wording to '7 A records'
- dns.md: add grafana.leeworks.dev to status checklist and dig verification block
- operator-runbook.md: fix 'all six' to 'all seven', add registry.leeworks.dev
  row to Phase 4 DNS table, add dig verification loop

Closes leeworks-agents/api-company#62
2026-05-27 15:04:13 +00:00
AI-Manager 13ce96e07e Merge pull request 'docs: add secrets-checklist items 8 & 9 (gitea-registry + gitea-image-automation-token)' (#59) from feature/secrets-checklist-items-8-9 into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 55s
2026-05-27 10:03:09 +00:00
agent-company fe9d867a87 docs: add secrets checklist items 8 and 9 for gitea-registry and gitea-image-automation-token
- Item 8: gitea-registry imagePullSecret in zip-enrichment, holidays,
  air-quality, docs-site namespaces (closes leeworks-agents/api-company#58)
- Item 9: gitea-image-automation-token in flux-system with write:repository
  scope for Flux ImageUpdateAutomation (closes leeworks-agents/api-company#57)
- Wire gitea-image-automation-token as push.secretRef in imageupdateautomation.yaml
- Update dependency order and item count from seven to nine
2026-05-27 10:02:42 +00:00
AI-Manager 9ad73f3741 Merge pull request 'chore: update STATUS.md — 2026-05-27 evening triage cycle' (#56) from feature/status-update-2026-05-27-evening into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 56s
2026-05-27 05:03:29 +00:00
agent-company e72a845c31 chore: update STATUS.md — 2026-05-27 evening triage cycle 2026-05-27 05:03:09 +00:00
AI-Manager b371c39c13 Merge pull request 'chore: update STATUS.md — 2026-05-27 ship cycle' (#55) from feature/status-update-2026-05-27-ship into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 54s
2026-05-27 00:42:22 +00:00
agent-company 33c6007899 chore: update STATUS.md — 2026-05-27 ship cycle 2026-05-27 00:41:58 +00:00
AI-Manager 9a1639ff4f Merge pull request 'chore: update STATUS.md — 2026-05-27 morning agent cycle' (#54) from feature/status-update-2026-05-27 into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 50s
2026-05-27 00:05:46 +00:00
agent-company 4ab65ca4dd chore: update STATUS.md — 2026-05-27 morning agent cycle 2026-05-27 00:05:28 +00:00
AI-Manager 7311df25bc Merge pull request 'chore: update STATUS.md — 2026-05-26 evening agent cycle' (#53) from feature/status-update-2026-05-26c into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 55s
2026-05-26 20:46:53 +00:00
agent-company 53466186b8 chore: update STATUS.md — 2026-05-26 evening agent cycle 2026-05-26 20:46:35 +00:00
AI-Manager 8d5ae5ee31 Merge pull request 'docs: add operator-runbook.md — ordered manual-action guide (closes #50)' (#52) from feature/operator-runbook-50 into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 57s
2026-05-26 20:46:01 +00:00
agent-company 82c9f70a01 feat: add Flux ImageRepository + ImagePolicy + ImageUpdateAutomation for all three API services (closes leeworks-agents/api-company#51) 2026-05-26 20:45:33 +00:00
agent-company 68a1524dca docs: add operator-runbook.md — ordered manual-action guide for operator (closes leeworks-agents/api-company#50) 2026-05-26 20:45:33 +00:00
AI-Manager bf19fb1cf5 Merge pull request 'chore: update STATUS.md — 2026-05-26 PM agent cycle' (#49) from feature/status-update-2026-05-26b into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 53s
2026-05-26 20:05:03 +00:00
agent-company 54cd793d5e chore: update STATUS.md — 2026-05-26 PM agent cycle 2026-05-26 20:04:40 +00:00
AI-Manager 58eba5f342 Merge pull request 'feat: scaffold Flux manifests for zip-enrichment, holidays, air-quality API services (closes #46)' (#48) from feature/flux-api-services-46 into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 49s
2026-05-26 20:03:47 +00:00
agent-company ae978a0bb3 feat: scaffold Flux manifests for zip-enrichment, holidays, air-quality API services
Closes leeworks-agents/api-company#46

Add flux/ directories for all three API services, each containing:
- namespace.yaml — Kubernetes Namespace
- helmrelease.yaml — HelmRelease using bedag/raw chart with Deployment,
  Service, and Ingress (TLS via cert-manager letsencrypt-prod)
- externalsecret.yaml — placeholder/comment for RapidAPI proxy-secret;
  includes kubectl manual-create instructions until ESO is deployed
- kustomization.yaml — per-directory Kustomize resources list

Services and subdomains:
  zip-enrichment  → zip.leeworks.dev
  holidays        → holidays.leeworks.dev
  air-quality     → aqi.leeworks.dev

Images:
  registry.leeworks.dev/zip-enrichment/server:latest
  registry.leeworks.dev/holidays/server:latest
  registry.leeworks.dev/air-quality/server:latest

Update root flux/kustomization.yaml to include all three new directories.
kustomize build flux/ passes with zero errors.
2026-05-26 20:02:42 +00:00
AI-Manager 01bfe2693a Merge pull request 'docs: add secrets-checklist.md — all required Kubernetes secrets with kubectl commands (closes #43)' (#45) from feature/secrets-checklist-43 into main
Build Docs Site / Aggregate OpenAPI Specs (push) Failing after 56s
2026-05-26 15:03:31 +00:00
agent-company 091c5cd089 docs: add secrets-checklist.md with kubectl commands for all required secrets
Closes leeworks-agents/api-company#43

Creates docs/secrets-checklist.md containing:
- Human operator checklist (7 checkboxes)
- Exact kubectl create secret commands for all required secrets
- Source of each secret value (Gitea admin UI, Slack, etc.)
- Which issues are unblocked by each secret
- Dependency order diagram

Secrets covered:
1. gitea-leeworks-agents-token (flux-system) → unblocks Flux GitRepo auth (#2)
2. gitea-runner-token (gitea-runner) → unblocks act-runner (#3)
3. grafana-admin (monitoring) → unblocks Grafana (#7)
4. gatus-slack-webhook (monitoring) → unblocks Gatus alerts (#8)
5. GITEA_TOKEN Actions secret (per repo) → unblocks CI image push
6. Gitea packages enable + DNS → unblocks registry (#4)
7. Flux source in Talos repo → unblocks GitOps (#2)
2026-05-26 15:03:05 +00:00