docs(index): cross-link to acc-podman-desktop extension - #50
Merged
Conversation
Closes the deferral from the extension repo's v0.1 PR #6 (the documentation closer). Both INDEX docs now point operators living in Podman Desktop at the sibling extension that surfaces the same wire format as a webview. * `INDEX_subagent_clustering.md` — see-also entry for the cluster topology panel + extension docs. * `AUTORESEARCHER_index.md` — companion section enumerating the PD panels (Stack, Examples, Cluster, Compliance, Performance) that exercise the autoresearcher demo end-to-end inside PD. No code changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4 tasks
flg77
added a commit
to flg77/acc-podman-desktop
that referenced
this pull request
May 9, 2026
…3 PR #12) (#14) Closes v0.3 PR #12. * `icon.png` — replaces the 220-byte placeholder with a 256×256 ACC mark: six sub-agent cells around a centre arbiter, on the webview-bg purple. Matches the cluster-topology metaphor the panels render. * `README.md` — embeds the icon inline at the top; adds a 3×3 panel-screenshot grid keyed to filenames under `docs/screenshots/`. Until the captures land the references resolve to GitHub's image-not-found placeholder; that's the reminder for whoever runs the demo to drop them in. * `docs/screenshots/README.md` — capture conventions (resolution, trim guidance, filename map). * `BACKLOG.md` — mark v0.3 PR #12 done. The runtime-side INDEX cross-link landed as a separate PR on `agentic-cell-corpus` (flg77/acc#50). Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
flg77
added a commit
that referenced
this pull request
May 9, 2026
Slot #50 went to an unrelated docs PR (docs(index): cross-link to acc-podman-desktop extension), so the manifest delivery PR landed as #51, the MCP reconciler will be #52, and the demo samples PR will be #53. Updates tasks.md headings, design.md cross-refs, and proposal.md PR-slot summary. Local branch name (feat/op-pr50-manifest-delivery) left as-is — already pushed and the PR is open. This is the second drift encountered on this openspec change, both absorbed cleanly by the renumber clause. No content changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
flg77
added a commit
that referenced
this pull request
May 9, 2026
* chore(openspec): claim PR-50 slot from acc1 Lock acquisition for the manifest delivery reconciler PR. Single-file edit pushed immediately so the other Claude instance (10.199.12.8) sees the claim on next git pull. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(openspec): renumber to PR-51/52/53 — drift caught Slot #50 went to an unrelated docs PR (docs(index): cross-link to acc-podman-desktop extension), so the manifest delivery PR landed as #51, the MCP reconciler will be #52, and the demo samples PR will be #53. Updates tasks.md headings, design.md cross-refs, and proposal.md PR-slot summary. Local branch name (feat/op-pr50-manifest-delivery) left as-is — already pushed and the PR is open. This is the second drift encountered on this openspec change, both absorbed cleanly by the renumber clause. No content changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * build(operator): sync-manifests target + .gitignore for data mirror The ManifestDeliveryReconciler ships next on this branch and uses //go:embed over operator/internal/reconcilers/manifests/data/. embed paths can't escape the Go module, so the trees have to be mirrored into the operator subtree at build time. Adds: make sync-manifests — mirrors ../roles, ../skills, ../mcps into internal/reconcilers/manifests/data/ and strips __pycache__, *.pyc, *.pyo, .DS_Store (so flat-key round-trip k→k.replace("__","/") in the reconciler is safe). Wires sync-manifests as a prerequisite for: generate, build, run, test, test-unit, docker-build. Existing developers running any of those targets get the mirror automatically. The mirror is gitignored — it's a build artefact, not source. Verified: 183 files mirrored from the live trees (47 roles × ~2-3 files + 14 skills + 5 mcps + supporting docs/data). No __pycache__ leakage. Refs openspec/changes/20260508-operator-feature-parity-d-e/tasks.md PR-51 task 1 (build-side prep). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(operator): ManifestDeliveryReconciler — embed.FS to ConfigMaps Adds operator/internal/reconcilers/manifests/delivery.go: a SubReconciler that emits three corpus-namespace ConfigMaps holding the operator-baked roles/, skills/, and mcps/ trees. Agent pods get these mounted at /etc/acc/{roles,skills,mcps} via volume injection landing in a follow-up commit on this branch. Design choices: * embed.FS over data/roles, data/skills, data/mcps (mirrored at build time by `make sync-manifests`). Build-time embed avoids runtime fetches and lets the operator GC ConfigMap ownership cleanly via SetControllerReference. * ConfigMap data keys flatten "/" to "__" because Kubernetes rejects "/" in keys. Round-trip is safe: the sync target strips __pycache__ et al, and no real path contains "__". The agent_deployment volume's items[] reverses the flatten via UnflattenKey() so the in-pod filesystem sees the original tree shape. * Opt-out gate: spec.manifestDelivery == "none" skips the upsert and clears status.manifestDeliveryReady, leaving any pre-existing user-managed ConfigMaps alone. * Public helpers (FlattenPath, UnflattenKey, ConfigMapName, Suffixes, RolesMountPath / SkillsMountPath / MCPsMountPath consts) so agent_deployment can reference the same naming and path rules without duplicating logic. Smoke-tested locally: walkTree returns 149 role files, 28 skill files, 6 mcp files (matches `find ../{roles,skills,mcps} -type f` after the sync filters), and the round-trip on coding_agent_implementer/role.yaml is byte-stable. Refs openspec/changes/20260508-operator-feature-parity-d-e/tasks.md PR-51 task 2. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(operator): wire ManifestDeliveryReconciler into chain (slot 2) Slots the new manifest delivery reconciler immediately after PrerequisiteReconciler and before UpgradeReconciler. The acc-{roles,skills,mcps} ConfigMaps must exist before any agent Deployment is built — slot 2 puts the upsert before the upgrade pre-checks and before every infra reconciler that doesn't depend on the manifest tree. Order matches the design.md table for PR-51 wire-in. Verified: go build ./... and go vet ./... clean. Refs openspec/changes/20260508-operator-feature-parity-d-e/tasks.md PR-51 task 3. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(operator): inject manifest volumes + ACC_*_ROOT env in agent pods Wires the corpus-scoped acc-roles, acc-skills, and acc-mcps ConfigMaps emitted by ManifestDeliveryReconciler into every agent pod via: /etc/acc/roles ← corpus.Name + "-acc-roles" ConfigMap /etc/acc/skills ← corpus.Name + "-acc-skills" ConfigMap /etc/acc/mcps ← corpus.Name + "-acc-mcps" ConfigMap ACC_ROLES_ROOT=/etc/acc/roles ACC_SKILLS_ROOT=/etc/acc/skills ACC_MCPS_ROOT=/etc/acc/mcps The Volume sources use an explicit items[] projection list — keys are read from the live ConfigMap and projected via manifests.UnflattenKey(key) so the in-pod filesystem sees the original slash-separated paths instead of the flattened "key__like__this" ConfigMap data keys. Behavioural choices: * spec.manifestDelivery == "none" returns empty slices — no mounts, no env vars. Lets users bake the trees into a custom agent image if they prefer. * If a ConfigMap is not yet present at agent_deployment time, that tree's mount is skipped (not errored). The manifest reconciler runs earlier in the parent chain so this only happens during the first reconcile pass; the next cycle picks it up cleanly. * Reads CM data from the API client, not from any cached structure, so adding a new role at runtime (regenerate + redeploy operator) propagates into the items[] list and triggers a Deployment update via the Upsert MergeFrom patch. go build ./... and go vet ./... clean. Refs openspec/changes/20260508-operator-feature-parity-d-e/tasks.md PR-51 task 4. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(operator): TUI sample mounts acc-roles + acc-skills ConfigMaps Closes the parity gap with container/production/podman-compose.yml:464 (TUI service, ACC_ROLES_ROOT=/app/roles): the operator-managed TUI Deployment now reads the same operator-baked roles/, skills/ trees that agent pods do, so the Ecosystem screen has data to render in operator-mode just as it does in compose-mode. Adds: env vars ACC_ROLES_ROOT=/etc/acc/roles, ACC_SKILLS_ROOT=/etc/acc/skills mounts /etc/acc/roles ← {corpus}-acc-roles ConfigMap (read-only) /etc/acc/skills ← {corpus}-acc-skills ConfigMap (read-only) The ConfigMap volumes are mounted with optional: true so first-apply races against the manifest reconciler don't ImagePullBack the TUI; the next reconcile cycle resolves both objects cleanly. Documented caveat in the file header: the operator flattens "/" → "__" in CM keys (Kubernetes rejects "/"), so without an items[] projection the TUI sees flat-keyed entries. Acceptable for the Ecosystem screen which only enumerates role names; a TUI screen needing the nested shape should call the role_loader's operator-mode helper that splits "__" back to "/" — tracked separately. Refs openspec/changes/20260508-operator-feature-parity-d-e/tasks.md PR-51 task 5. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * test(operator): unit coverage for manifest delivery reconciler Adds two test files: internal/reconcilers/manifests/delivery_test.go (white-box, 4 tests) - walkTree returns the right keys for a known persona spread (analyst legacy, coding_agent_implementer D3, research_planner E4) - round-trip safety: every flat key unflattens back to a valid path with no spurious "/" introductions, across all three trees - FlattenPath / UnflattenKey direct round-trip on six explicit cases - Suffixes() returns the exact strings agent_deployment relies on test/unit/manifest_delivery_test.go (black-box, 4 tests) - End-to-end Reconcile against a fake controller-runtime client: asserts three corpus-scoped ConfigMaps are created with non-empty Data and the operator-managed manifest-tree label - ConfigMap keys never contain "/", and unflatten produces multi- segment paths (proving the projection contract holds) - spec.manifestDelivery="none" short-circuits the reconciler: no CMs created, status.ManifestDeliveryReady stays false - Idempotency: two Reconcile calls leave Data sizes equal go mod tidy was needed (fake client pulled in gopkg.in/evanphx/json-patch.v4 as an indirect dep — already present in go.sum via transitive github.com/evanphx/json-patch). Refs openspec/changes/20260508-operator-feature-parity-d-e/tasks.md PR-51 task 6. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(openspec): mark PR-51 tasks complete All seven PR-51 tasks (1 build prep + 6 plan items) landed across commits baa60f0, 72a8650, 93783ee, a6ac7c1, adf1f90, 6ba5b0f. Updates the lock board to status=ready-for-review. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
flg77
added a commit
that referenced
this pull request
Jun 11, 2026
WebGUI parity with the TUI Ecosystem editor for role authoring. Reuses
acc.tui.role_writeback so the WebGUI and TUI share ONE validate +
atomic-write path.
acc/webgui/routes_roles.py:
- GET /api/roles/{id}/yaml + /md — read for the editor (viewer)
- PUT /api/roles/{id}/yaml — validate + atomic write; RoleValidationError
→ HTTP 400 carrying {message, errors} (operator)
- PUT /api/roles/{id}/md — free-form narrative write (operator)
- POST /api/roles — create a new role dir + validated role.yaml +
optional role.md; rolls back the dir on validation failure; 409 on
duplicate (operator)
- path-safe role_id (regex-gated, blocks traversal); ACC_ROLES_ROOT
resolution consistent with CapabilityIndex / acc-tui.
Publish-to-catalog (WS-C3) is deferred — gated on the signing-identity
decision (proposal 020 open question: trigger Tekton pipeline vs mounted
token vs keypair). The React Marketplace/Catalogs/Role-editor screens
(WS-C1) wrap these + the existing endpoints next.
tests/test_routes_role_authoring.py — 12 tests (read/404, edit
valid/invalid-400-with-errors/404, md write, create/409/rollback,
invalid-id rejection), mirroring the test_routes_roles.py fixtures.
Sweep: 3071 passed, 69 skipped.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the deferral from the acc-podman-desktop repo's v0.1 PR #6 (documentation closer). Both INDEX docs now point operators living in Podman Desktop at the sibling extension that surfaces the same wire format as a webview.
INDEX_subagent_clustering.md— see-also entry for the cluster topology panel + extension docs.AUTORESEARCHER_index.md— companion section enumerating the PD panels (Stack, Examples, Cluster, Compliance, Performance) that exercise the autoresearcher demo end-to-end inside PD.No code changes; doc-only.
Test plan
🤖 Generated with Claude Code