fix(ghcr): close 4 missing image gaps + targeted local build targets - #822
Conversation
…alysis Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add a2ui-nats-bridge, session-context-worker, llama-throughput-lab, tokenism-ui to integrations-ghcr matrix (10 -> 14 entries) - Create tokenism-ui Dockerfile (multi-stage Next.js standalone) and .dockerignore, enable output: "standalone" in next.config.ts - Add 5 entries to images.yaml (a2ui, session-context, tokenism-ui, ultimate-tts-studio, llama-throughput-lab) - Fix pmoves-botz and pmoves-tailscale branch refs: main -> Hardened - Add ghcr-build-one, ghcr-prepublish-one, ghcr-dispatch-one targets for single-image local validation - Add ghcr-list target to enumerate matrix entries - Expand GHCR_LOCAL_INTEGRATIONS with 3 new in-repo images Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
📝 WalkthroughWalkthroughThis changeset extends the PMOVES build infrastructure by adding five new component entries to the GHCR integration matrix, introducing per-image Makefile targets for granular build operations, and updating documentation to reflect the Mar 7, 2026 audit snapshot and gap analysis findings. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (2)
pmoves/docs/PRODUCTION_AUDIT_DASHBOARD.md (1)
51-76: Gap analysis documents pre-fix baseline — consider adding a resolution note.The GHCR Matrix Gap Analysis section accurately documents the gap discovered on Mar 7, showing 4 missing images with "❌" indicators. Since this PR adds those images to the matrix, consider appending a brief resolution note (e.g., "Resolution: PR
#822adds CI definitions for these 4 images") to maintain audit trail clarity. As per coding guidelines, keep status claims aligned with evidence.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pmoves/docs/PRODUCTION_AUDIT_DASHBOARD.md` around lines 51 - 76, The GHCR Matrix Gap Analysis section documents four missing images as of Mar 7, 2026; append a brief resolution note under that section stating that those gaps have been addressed by this PR (e.g., "Resolution: PR `#822` adds CI definitions for these 4 images") so the audit trail reflects the fix and keeps status claims aligned with evidence; update the "GHCR Matrix Gap Analysis (Mar 7, 2026)" subsection (referenced by that heading) to include the resolution line and ensure the PR number and action (adding CI definitions) are accurate.pmoves/docs/NEXT_STEPS.md (1)
6-6: Heading level skips from h1 to h3.The document structure jumps from
# PMOVES v5 • NEXT_STEPS(h1) directly to### Latest changes(h3), violating markdown best practices (MD001). Consider using## Latest changesfor consistent hierarchy.Proposed fix
-### Latest changes (Mar 7, 2026) +## Latest changes (Mar 7, 2026)Note: This would require updating all other
### Latest changesheadings for consistency.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pmoves/docs/NEXT_STEPS.md` at line 6, The document's heading hierarchy jumps from the h1 title "# PMOVES v5 • NEXT_STEPS" to "### Latest changes", violating MD001; update "### Latest changes" to "## Latest changes" (and similarly update any other "### Latest changes" occurrences) so the heading levels descend consistently beneath the top-level title; verify other headings beneath "## Latest changes" remain at the correct levels after the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/integrations-ghcr.matrix.json:
- Around line 158-169: The tokenism-ui entry references a submodule path
(PMOVES-ToKenism-Multi/pmoves-nextjs) which won't be exported by the workflow's
git archive command; update the JSON entry for "tokenism-ui" so git_url points
to the submodule repo
(https://github.com/POWERFULMOVES/PMOVES-ToKenism-Multi.git) and change
"context" to "pmoves-nextjs" (keep "dockerfile" as "pmoves-nextjs/Dockerfile" or
adjust to match), ensuring the Docker build context includes the actual files
instead of an empty submodule; alternatively, if you prefer keeping the current
git_url, modify the workflow (integrations-ghcr.yml) to init submodules (git
submodule update --init --recursive) before running git archive or switch to git
clone --recurse-submodules for that entry.
In `@pmoves/docs/NEXT_STEPS.md`:
- Around line 24-27: Update the GHCR gap analysis narrative in NEXT_STEPS.md to
match the post-merge state introduced by this PR: either adjust the counts to
show that integrations-ghcr.matrix.json now includes the four previously-missing
images (update "4 compose-referenced images lack CI build definitions" and
"covers 10 of 24" to the new totals, e.g., 14 covered), or add an explicit note
that the listed numbers reflect the pre-fix baseline and will change after
applying the entries added to integrations-ghcr.matrix.json; reference the file
integrations-ghcr.matrix.json and the four image names (`a2ui-nats-bridge`,
`llama-throughput-lab`, `session-context-worker`, `tokenism-ui`) in the updated
text so the claim is aligned with the evidence.
- Line 10: The string in the release note line containing "chrome extension"
should use the proper noun "Chrome" — update the phrase in the Batch 3 entry
(the line that reads "`#821` (chrome extension + 9 security fixes)") to "`#821`
(Chrome extension + 9 security fixes)`" so the product name is capitalized
correctly.
In `@pmoves/docs/PMOVES.AI` PLANS/ROADMAP.md:
- Line 12: Update the GHCR matrix audit bullet to reflect that the missing CI
build entries for images a2ui-nats-bridge, llama-throughput-lab,
session-context-worker, and tokenism-ui are being added by this PR (`#822`) rather
than stating the gap as still open; edit the sentence in ROADMAP.md so it reads
that the gap analysis identified those images without GHCR CI definitions and
that this PR (`#822`) closes that gap (or similar wording indicating the
resolution).
In `@pmoves/docs/PRODUCTION_AUDIT_DASHBOARD.md`:
- Line 36: The "Batch 3" release line contains a lowercase "chrome" which should
be capitalized as the proper noun "Chrome"; update the text in the
PRODUCTION_AUDIT_DASHBOARD.md entry (the line referencing "Batch 3 (17:11 UTC):
`#820` distributed topology docs, `#821` chrome extension (9 security fixes)") to
read "#821 Chrome extension (9 security fixes)". Ensure you also scan for the
same lowercase "chrome" occurrence referenced in NEXT_STEPS.md and replace it
with "Chrome" for consistency.
In `@pmoves/images.yaml`:
- Around line 81-83: Update the image refs in pmoves/images.yaml to match the
refs used by the local-prepublish/CI matrix so builds validate the same code:
open pmoves/images.yaml and change the ref values for the entries named
pmoves-botz and pmoves-tailscale (and any others flagged like
pmoves-tokenism-ui) to the exact ref strings used in
.github/workflows/integrations-ghcr.matrix.json (the entries there are read by
pmoves/tools/ghcr_local_prepublish.py and make ghcr-build-one), then run the
provided verification script to ensure no mismatches remain.
---
Nitpick comments:
In `@pmoves/docs/NEXT_STEPS.md`:
- Line 6: The document's heading hierarchy jumps from the h1 title "# PMOVES v5
• NEXT_STEPS" to "### Latest changes", violating MD001; update "### Latest
changes" to "## Latest changes" (and similarly update any other "### Latest
changes" occurrences) so the heading levels descend consistently beneath the
top-level title; verify other headings beneath "## Latest changes" remain at the
correct levels after the change.
In `@pmoves/docs/PRODUCTION_AUDIT_DASHBOARD.md`:
- Around line 51-76: The GHCR Matrix Gap Analysis section documents four missing
images as of Mar 7, 2026; append a brief resolution note under that section
stating that those gaps have been addressed by this PR (e.g., "Resolution: PR
`#822` adds CI definitions for these 4 images") so the audit trail reflects the
fix and keeps status claims aligned with evidence; update the "GHCR Matrix Gap
Analysis (Mar 7, 2026)" subsection (referenced by that heading) to include the
resolution line and ensure the PR number and action (adding CI definitions) are
accurate.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 5486da90-57df-4103-82c3-adc709aa0e85
📒 Files selected for processing (7)
.github/workflows/integrations-ghcr.matrix.jsonPMOVES-ToKenism-Multipmoves/Makefilepmoves/docs/NEXT_STEPS.mdpmoves/docs/PMOVES.AI PLANS/ROADMAP.mdpmoves/docs/PRODUCTION_AUDIT_DASHBOARD.mdpmoves/images.yaml
| { | ||
| "name": "tokenism-ui", | ||
| "git_url": "https://github.com/POWERFULMOVES/PMOVES.AI.git", | ||
| "ref": "main", | ||
| "context": "PMOVES-ToKenism-Multi/pmoves-nextjs", | ||
| "dockerfile": "PMOVES-ToKenism-Multi/pmoves-nextjs/Dockerfile", | ||
| "image_name": "pmoves-tokenism-ui", | ||
| "build_args": "", | ||
| "platforms": "linux/amd64,linux/arm64", | ||
| "generate_sbom": false, | ||
| "trivy_ignorefile": "" | ||
| } |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify the submodule exists and check its remote URL
cd "$(git rev-parse --show-toplevel)" 2>/dev/null || exit 0
# Check if PMOVES-ToKenism-Multi is a submodule
if git submodule status PMOVES-ToKenism-Multi 2>/dev/null; then
echo "✔ PMOVES-ToKenism-Multi is a registered submodule"
# Get the submodule's URL
git config --file .gitmodules --get submodule.PMOVES-ToKenism-Multi.url || echo "URL not found in .gitmodules"
else
echo "✖ PMOVES-ToKenism-Multi is NOT a submodule - context path may be valid"
fi
# Check if the Dockerfile exists within the submodule path
if [ -f "PMOVES-ToKenism-Multi/pmoves-nextjs/Dockerfile" ]; then
echo "✔ Dockerfile exists at expected path"
else
echo "✖ Dockerfile not found at PMOVES-ToKenism-Multi/pmoves-nextjs/Dockerfile"
fiRepository: POWERFULMOVES/PMOVES.AI
Length of output: 312
Submodule context path will fail in CI — git archive does not include submodule contents.
The tokenism-ui entry references context path PMOVES-ToKenism-Multi/pmoves-nextjs, which is a git submodule. The workflow at lines 228-235 in integrations-ghcr.yml uses git archive --format=tar HEAD | tar -x -C integration-src for the PMOVES.AI repo. This command does not export submodule contents — the PMOVES-ToKenism-Multi/ directory will be empty, and the Dockerfile won't be available during the Docker build, causing the build to fail.
Options to fix:
- Change
git_urltohttps://github.com/POWERFULMOVES/PMOVES-ToKenism-Multi.gitand adjustcontexttopmoves-nextjs(similar tollama-throughput-lab) - Add
git submodule update --init --recursiveto the workflow before archive - Use
git clone --recurse-submodulesinstead of archive for this entry
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/integrations-ghcr.matrix.json around lines 158 - 169, The
tokenism-ui entry references a submodule path
(PMOVES-ToKenism-Multi/pmoves-nextjs) which won't be exported by the workflow's
git archive command; update the JSON entry for "tokenism-ui" so git_url points
to the submodule repo
(https://github.com/POWERFULMOVES/PMOVES-ToKenism-Multi.git) and change
"context" to "pmoves-nextjs" (keep "dockerfile" as "pmoves-nextjs/Dockerfile" or
adjust to match), ensuring the Docker build context includes the actual files
instead of an empty submodule; alternatively, if you prefer keeping the current
git_url, modify the workflow (integrations-ghcr.yml) to init submodules (git
submodule update --init --recursive) before running git archive or switch to git
clone --recurse-submodules for that entry.
| - Merge wave completed on `main`: 8 PRs merged in 3 batches | ||
| - Batch 1: `#814` (UI build fix), `#815` (smoke Supabase discovery), `#816` (healthcheck stability), `#817` (CI runner alignment), `#819` (DoX submodule bump) | ||
| - Batch 2: `#818` (model fabric + coding-plan wiring — rebased after 8 CodeRabbit comments) | ||
| - Batch 3: `#820` (distributed topology docs/examples), `#821` (chrome extension + 9 security fixes) |
There was a problem hiding this comment.
Capitalize "Chrome" as a proper noun.
Static analysis correctly flags that "chrome" should be "Chrome" when referring to Google Chrome software.
Proposed fix
- - Batch 3: `#820` (distributed topology docs/examples), `#821` (chrome extension + 9 security fixes)
+ - Batch 3: `#820` (distributed topology docs/examples), `#821` (Chrome extension + 9 security fixes)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - Batch 3: `#820` (distributed topology docs/examples), `#821` (chrome extension + 9 security fixes) | |
| - Batch 3: `#820` (distributed topology docs/examples), `#821` (Chrome extension + 9 security fixes) |
🧰 Tools
🪛 LanguageTool
[uncategorized] ~10-~10: The proper noun “Chrome” (= software from Google) needs to be capitalized.
Context: ...ibuted topology docs/examples), #821 (chrome extension + 9 security fixes) - Chrome ...
(GOOGLE_PRODUCTS)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@pmoves/docs/NEXT_STEPS.md` at line 10, The string in the release note line
containing "chrome extension" should use the proper noun "Chrome" — update the
phrase in the Batch 3 entry (the line that reads "`#821` (chrome extension + 9
security fixes)") to "`#821` (Chrome extension + 9 security fixes)`" so the
product name is capitalized correctly.
| - GHCR matrix gap analysis completed: | ||
| - 4 compose-referenced images lack CI build definitions: `a2ui-nats-bridge`, `llama-throughput-lab`, `session-context-worker`, `tokenism-ui` | ||
| - `ultimate-tts-studio` is in GHCR (manually pushed) but has no automated CI build | ||
| - `integrations-ghcr.matrix.json` covers 10 of 24 `images.yaml` entries |
There was a problem hiding this comment.
Verify gap analysis accuracy after this PR lands.
The GHCR gap analysis section states that 4 images "lack CI build definitions" and the matrix "covers 10 of 24" entries. However, this PR adds these 4 images to integrations-ghcr.matrix.json, which would change the count to 14.
Consider updating the narrative to reflect the post-merge state, or clarify this describes the pre-fix baseline. As per coding guidelines, keep status claims aligned with evidence.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@pmoves/docs/NEXT_STEPS.md` around lines 24 - 27, Update the GHCR gap analysis
narrative in NEXT_STEPS.md to match the post-merge state introduced by this PR:
either adjust the counts to show that integrations-ghcr.matrix.json now includes
the four previously-missing images (update "4 compose-referenced images lack CI
build definitions" and "covers 10 of 24" to the new totals, e.g., 14 covered),
or add an explicit note that the listed numbers reflect the pre-fix baseline and
will change after applying the entries added to integrations-ghcr.matrix.json;
reference the file integrations-ghcr.matrix.json and the four image names
(`a2ui-nats-bridge`, `llama-throughput-lab`, `session-context-worker`,
`tokenism-ui`) in the updated text so the claim is aligned with the evidence.
| - March 7 merge wave completed on `main`: `#814`, `#815`, `#816`, `#817`, `#818`, `#819`, `#820`, `#821` (8 PRs, 3 batches). | ||
| - Chrome extension security hardening landed in `#821`: 9 CodeRabbit review items addressed (auth storage isolation, XSS remediation, mock server hardening, timeout guards, state management fixes, CSP). | ||
| - Distributed topology documentation + examples landed in `#820`. | ||
| - GHCR matrix gap analysis: 4 compose-referenced images (`a2ui-nats-bridge`, `llama-throughput-lab`, `session-context-worker`, `tokenism-ui`) have no CI build definition — tracked as ops follow-up. |
There was a problem hiding this comment.
Update this audit bullet so it doesn’t describe a closed gap as still open.
This PR is the one adding those missing GHCR entries, so keeping the note as “have no CI build definition” will make the Mar 7 snapshot stale as soon as #822 merges. Reword it as the gap analysis finding that this PR closes.
Suggested wording
-- GHCR matrix gap analysis: 4 compose-referenced images (`a2ui-nats-bridge`, `llama-throughput-lab`, `session-context-worker`, `tokenism-ui`) have no CI build definition — tracked as ops follow-up.
+- GHCR matrix gap analysis identified 4 compose-referenced images (`a2ui-nats-bridge`, `llama-throughput-lab`, `session-context-worker`, `tokenism-ui`) without CI build definitions; PR `#822` adds the missing matrix coverage and local validation targets.As per coding guidelines, "Keep status claims aligned with evidence in runbooks and smokes."
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - GHCR matrix gap analysis: 4 compose-referenced images (`a2ui-nats-bridge`, `llama-throughput-lab`, `session-context-worker`, `tokenism-ui`) have no CI build definition — tracked as ops follow-up. | |
| - GHCR matrix gap analysis identified 4 compose-referenced images (`a2ui-nats-bridge`, `llama-throughput-lab`, `session-context-worker`, `tokenism-ui`) without CI build definitions; PR `#822` adds the missing matrix coverage and local validation targets. |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@pmoves/docs/PMOVES.AI` PLANS/ROADMAP.md at line 12, Update the GHCR matrix
audit bullet to reflect that the missing CI build entries for images
a2ui-nats-bridge, llama-throughput-lab, session-context-worker, and tokenism-ui
are being added by this PR (`#822`) rather than stating the gap as still open;
edit the sentence in ROADMAP.md so it reads that the gap analysis identified
those images without GHCR CI definitions and that this PR (`#822`) closes that gap
(or similar wording indicating the resolution).
| - Merge wave completed on `main`: 8 PRs merged in 3 batches (#814-#821) | ||
| - Batch 1 (06:00 UTC): #814 UI build fix, #815 smoke Supabase discovery, #816 healthcheck stability, #817 CI runner alignment, #819 DoX submodule bump | ||
| - Batch 2 (07:01 UTC): #818 model fabric + coding-plan wiring (rebased after 8 CodeRabbit comments) | ||
| - Batch 3 (17:11 UTC): #820 distributed topology docs, #821 chrome extension (9 security fixes) |
There was a problem hiding this comment.
Capitalize "Chrome" as a proper noun.
Same issue as in NEXT_STEPS.md - "chrome" should be "Chrome".
Proposed fix
- - Batch 3 (17:11 UTC): `#820` distributed topology docs, `#821` chrome extension (9 security fixes)
+ - Batch 3 (17:11 UTC): `#820` distributed topology docs, `#821` Chrome extension (9 security fixes)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - Batch 3 (17:11 UTC): #820 distributed topology docs, #821 chrome extension (9 security fixes) | |
| - Batch 3 (17:11 UTC): `#820` distributed topology docs, `#821` Chrome extension (9 security fixes) |
🧰 Tools
🪛 LanguageTool
[uncategorized] ~36-~36: The proper noun “Chrome” (= software from Google) needs to be capitalized.
Context: ...): #820 distributed topology docs, #821 chrome extension (9 security fixes) - Chrome e...
(GOOGLE_PRODUCTS)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@pmoves/docs/PRODUCTION_AUDIT_DASHBOARD.md` at line 36, The "Batch 3" release
line contains a lowercase "chrome" which should be capitalized as the proper
noun "Chrome"; update the text in the PRODUCTION_AUDIT_DASHBOARD.md entry (the
line referencing "Batch 3 (17:11 UTC): `#820` distributed topology docs, `#821`
chrome extension (9 security fixes)") to read "#821 Chrome extension (9 security
fixes)". Ensure you also scan for the same lowercase "chrome" occurrence
referenced in NEXT_STEPS.md and replace it with "Chrome" for consistency.
| - name: pmoves-botz | ||
| repo: PMOVES-BoTZ | ||
| ref: heads/main | ||
| ref: heads/PMOVES.AI-Edition-Hardened |
There was a problem hiding this comment.
Keep the image refs aligned with integrations-ghcr.matrix.json.
build-images.yml publishes from pmoves/images.yaml, but make ghcr-build-one goes through pmoves/tools/ghcr_local_prepublish.py and reads .github/workflows/integrations-ghcr.matrix.json instead. The provided cross-file context already shows pmoves-tokenism-ui is split today (main in the matrix vs heads/PMOVES.AI-Edition-Hardened here), so local prepublish and CI are validating different code. These pmoves-botz / pmoves-tailscale ref flips need to stay in lockstep for the same reason.
Use this read-only check to compare overlapping refs in both sources. Expected result: no mismatches.
#!/bin/bash
set -euo pipefail
python - <<'PY'
import json
import pathlib
import re
images_refs = {}
current = None
for line in pathlib.Path("pmoves/images.yaml").read_text().splitlines():
m = re.match(r'^\s*-\s+name:\s*(\S+)\s*$', line)
if m:
current = m.group(1)
images_refs[current] = None
continue
m = re.match(r'^\s*ref:\s*(\S+)\s*$', line)
if m and current:
images_refs[current] = m.group(1)
matrix_raw = json.loads(pathlib.Path(".github/workflows/integrations-ghcr.matrix.json").read_text())
if isinstance(matrix_raw, dict):
entries = matrix_raw.get("include") or matrix_raw.get("matrix") or matrix_raw.get("images") or []
else:
entries = matrix_raw
mismatches = []
for entry in entries:
name = entry.get("name")
if name in images_refs:
matrix_ref = entry.get("ref")
images_ref = images_refs[name]
if images_ref != matrix_ref:
mismatches.append((name, images_ref, matrix_ref))
if not mismatches:
print("No ref mismatches found between pmoves/images.yaml and integrations-ghcr.matrix.json")
else:
for name, images_ref, matrix_ref in mismatches:
print(f"{name}: images.yaml={images_ref!r} matrix.json={matrix_ref!r}")
raise SystemExit(1)
PYAlso applies to: 102-104, 169-174
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@pmoves/images.yaml` around lines 81 - 83, Update the image refs in
pmoves/images.yaml to match the refs used by the local-prepublish/CI matrix so
builds validate the same code: open pmoves/images.yaml and change the ref values
for the entries named pmoves-botz and pmoves-tailscale (and any others flagged
like pmoves-tokenism-ui) to the exact ref strings used in
.github/workflows/integrations-ghcr.matrix.json (the entries there are read by
pmoves/tools/ghcr_local_prepublish.py and make ghcr-build-one), then run the
provided verification script to ensure no mismatches remain.
Summary
ghcr-build-one,ghcr-prepublish-one,ghcr-dispatch-one,ghcr-listtargets for single-image workflowsoutput: "standalone"in next.config.ts)Files Changed
.github/workflows/integrations-ghcr.matrix.jsonpmoves/images.yamlpmoves/MakefilePMOVES-ToKenism-Multipmoves/docs/PRODUCTION_AUDIT_DASHBOARD.mdpmoves/docs/NEXT_STEPS.mdpmoves/docs/PMOVES.AI PLANS/ROADMAP.mdTest Plan
make -C pmoves ghcr-listshows all 14 imagesmake -C pmoves ghcr-build-one IMAGE=tokenism-nextjsbuilds successfullyjq . < .github/workflows/integrations-ghcr.matrix.json)pmoves/images.yamlvalidates (no duplicate keys, valid branch refs)🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Chores
Documentation