Complete remaining tasks: CI fix, dep bumps, PNG export, repo cleanup#141
Complete remaining tasks: CI fix, dep bumps, PNG export, repo cleanup#141dfrostar wants to merge 4 commits into
Conversation
`type=ref,event=tag` only fires on push:tag, so manually dispatched
runs produced an image with only `:latest` and no version tag. Switch
to `type=raw,value=${RELEASE_TAG}`, which resolves correctly for both
push:tag (github.ref_name) and workflow_dispatch (inputs.tag).
https://claude.ai/code/session_01TbVzuy37bW5ENo1VgJT2iA
…13.0 Consolidates the four open dependabot pins. Validated locally: `ruff check .` and `black --check .` (the blocking CI gates) pass, and the full pytest suite is green. mypy 2.1.0 surfaces more pre-existing type issues but the type-check job is non-blocking (continue-on-error). https://claude.ai/code/session_01TbVzuy37bW5ENo1VgJT2iA
Adds an "Export PNG" button to the sidebar that saves the current graph canvas. The on-screen canvas is transparent, so the export composes it onto an opaque fill matching the UI background before toDataURL, and names the download after the project plus a timestamp. https://claude.ai/code/session_01TbVzuy37bW5ENo1VgJT2iA
The "Lint", "Type Check", "Build Package", and "Test (Python 3.x)" directories each held a single system.txt — downloaded GitHub Actions runner log fragments named after CI job names, committed by mistake. They're not part of the project; remove them so the repo root is clean. https://claude.ai/code/session_01TbVzuy37bW5ENo1VgJT2iA
NeuralMind self-benchmarkStatus: Phase 1 — Reduction on committed fixture
Phase 2 — Learning uplift
Note: uplift numbers on a 500-line fixture are intentionally modest — the point is to Assumptions
Per-model token reduction
Rows marked measured use the provider's real tokenizer. Rows marked Automated by |
There was a problem hiding this comment.
Pull request overview
This PR bundles several maintenance and small feature updates: fixing GHCR Docker tagging for manual workflow dispatches, bumping pinned dev tooling versions, adding a PNG export action to the web graph view, and removing accidentally committed CI runner log artifacts.
Changes:
- Fix GHCR Docker publish workflow so
workflow_dispatchruns produce a version tag (not just:latest). - Bump pinned tool/dependency versions in
requirements-pinned.txt(black/ruff/mypy/tiktoken). - Add “Export PNG” button and client-side export logic in the graph-view UI; remove committed CI log directories’
system.txtfiles.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/docker-publish.yml |
Adjusts docker/metadata-action tagging so version tags are generated for both tag pushes and manual dispatch runs. |
requirements-pinned.txt |
Updates pinned versions for formatter/linter/type-checker and tiktoken for reproducible installs. |
neuralmind/web/index.html |
Adds an “Export PNG” button to the graph-view sidebar UI. |
neuralmind/web/app.js |
Implements PNG export by compositing the transparent canvas onto an opaque background and triggering a download. |
Lint/system.txt |
Removes accidentally committed GitHub Actions runner log output. |
Type Check/system.txt |
Removes accidentally committed GitHub Actions runner log output. |
Build Package/system.txt |
Removes accidentally committed GitHub Actions runner log output. |
Test (Python 3.10)/system.txt |
Removes accidentally committed GitHub Actions runner log output. |
Test (Python 3.11)/system.txt |
Removes accidentally committed GitHub Actions runner log output. |
Test (Python 3.12)/system.txt |
Removes accidentally committed GitHub Actions runner log output. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const out = document.createElement("canvas"); | ||
| out.width = canvas.width; | ||
| out.height = canvas.height; | ||
| const octx = out.getContext("2d"); | ||
| const bg = getComputedStyle(document.documentElement) | ||
| .getPropertyValue("--bg") | ||
| .trim(); | ||
| octx.fillStyle = bg || "#1a1b1e"; | ||
| octx.fillRect(0, 0, out.width, out.height); |
| const a = document.createElement("a"); | ||
| a.download = `neuralmind-${name}-${stamp}.png`; | ||
| a.href = out.toDataURL("image/png"); | ||
| a.click(); |
| # black bumped from 23.12.1 to 26.3.1 to fix ReDoS (CVE-2024-21503) and the | ||
| # arbitrary-file-write cache vuln (GHSA-3936-cmfr-pm3m). | ||
| pytest==9.0.3 | ||
| pytest-asyncio==1.3.0 | ||
| black==26.3.1 | ||
| ruff==0.15.12 | ||
| mypy==1.20.2 | ||
| black==26.5.0 | ||
| ruff==0.15.13 |
Summary
A consolidated pass over outstanding maintenance items. Four independent, low-risk changes:
fix(ci)—docker-publish.ymlnow sets the version tag onworkflow_dispatchruns.type=ref,event=tagonly fired onpush:tag, so manually dispatched builds produced an image with only:latestand novX.Y.Z. Switched totype=raw,value=${RELEASE_TAG}, which resolves for both triggers. (Supersedes the standalone fix in fix(ci): docker-publish version tag missing on workflow_dispatch #140.)chore(deps)— consolidates the four open dependabot pins inrequirements-pinned.txt: black 26.5.0, ruff 0.15.13, mypy 2.1.0, tiktoken 0.13.0.feat(graph-view)— adds an "Export PNG" sidebar button. The canvas is transparent, so the export composes it onto an opaque--bgfill beforetoDataURLand downloads asneuralmind-<project>-<timestamp>.png. (Graph-view backlog item from ROADMAP.)chore— removes six accidentally-committed CI runner-log directories (Lint,Type Check,Build Package,Test (Python 3.10/3.11/3.12)), each holding a singlesystem.txtof GitHub Actions runner logs.Test plan
ruff check .clean andblack --check .clean (the blocking CI gates) with the bumped tool versionspytestsuite green (only the expected graphify-fixture / S3-model skips)continue-on-error: trueso it does not gatedocker-publish.ymlvalidates as YAMLnode --check neuralmind/web/app.jspasses; PNG export logic verified against canvas DPR/transparency handling (no browser test harness available)https://claude.ai/code/session_01TbVzuy37bW5ENo1VgJT2iA
Generated by Claude Code