[codex] add advanced project and personnel visualizations#19
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a production visualization boundary and integrates Plotly-based charts into project and personnel pages, while keeping the existing tabular views authoritative and improving E2E portability (notably for Windows/base-path execution).
Changes:
- Introduces
agiladmin.visualization(Tablecloth/Tableplot → Plotly spec) plus tests and a dev-only Clay notebook under:viz. - Serves Plotly.js as a local asset and initializes charts in
app.json page load andhtmx:load, including resizing on tab activation. - Extends project/personnel views with hours-focused charts and updates Playwright harness/scripts for deterministic, base-path friendly runs.
Reviewed changes
Copilot reviewed 23 out of 28 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| test/e2e/project-access.spec.js | Extends manager project E2E checks for Plotly presence, cost omission, mobile viewport, and console errors. |
| test/e2e/personnel-visibility.spec.js | Adds Plotly initialization assertions, mobile viewport checks, and console error collection. |
| test/agiladmin/visualization_test.clj | New Midje tests covering month parsing, safe JSON escaping, chart markup, and key chart model behaviors. |
| test/agiladmin/view_timesheet_test.clj | Makes temp directory usage deterministic by writing under target/test-tmp. |
| test/agiladmin/version_test.clj | Writes temp version fixture under target/test-tmp for determinism. |
| test/agiladmin/test_runner.clj | Explicitly requires the full Midje namespace set, including the new visualization tests. |
| test/agiladmin/config_test.clj | Normalizes path separators for Windows and switches tests to explicit YAML file paths. |
| src/agiladmin/webpage.clj | Includes the local plotly.min.js asset in the page head. |
| src/agiladmin/visualization.clj | New visualization boundary: month helpers, JSON escaping, chart wrappers, and reusable chart specs. |
| src/agiladmin/view_timesheet.clj | Replaces fs/base-name with .getName when building destination filenames. |
| src/agiladmin/view_project.clj | Adds project charts above detail tabs and refactors tab definitions into a helper. |
| src/agiladmin/view_person.clj | Adds yearly activity summary + Plotly charts above existing monthly detail sections. |
| scripts/sync-frontend-assets.mjs | Copies Plotly’s minified distribution into resources/public/static/js/. |
| scripts/e2e/start-agiladmin.mjs | Improves Windows portability (repo-root resolution, temp dirs under .tmp, configurable Clojure command). |
| scripts/e2e/run-playwright.mjs | Runs Playwright via Node, sets deterministic TEMP/TMP, adds process-tree cleanup. |
| scripts/e2e/run-base-path.mjs | New helper script to run the base-path E2E suite portably (Windows-friendly env handling). |
| resources/public/static/js/app.js | Adds Plotly chart init/fallback/resize logic and switches HTMX hook to htmx:load. |
| resources/public/static/css/app.css | Updated compiled Tailwind/DaisyUI CSS to support new chart/layout classes. |
| README.md | Documents visualization architecture, local Plotly asset syncing, and Clay report generation. |
| playwright.config.mjs | Forces workers: 1 to reduce E2E flakiness/non-determinism. |
| package.json | Adds plotly.js-dist-min and replaces base-path E2E script with a Node wrapper. |
| package-lock.json | Locks Plotly dependency resolution. |
| dev/agiladmin/visualization_notebook.clj | New Clay notebook for fixture-based chart review under :viz. |
| deps.edn | Adds Tablecloth/Tableplot to prod deps; isolates Clay under :viz alias. |
| AGENTS.md | Documents visualization ownership boundaries and role/capability constraints. |
| .gitignore | Ignores .clj-config/ and .gestalt artifacts. |
| .gestalt/plans/advanced-data-visualization.org | Adds implementation plan and acceptance criteria record. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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.
What changed
:vizalias.Why
Managers and personnel need to interpret activity patterns, contributors, task utilization, and plan progress without reading every detail table. The implementation keeps existing tables authoritative, preserves role boundaries, and avoids implying daily precision from monthly timesheet totals.
Impact
Validation
clj -M:test: 531 checks passednpm run build:frontend: passednpm run test:e2e: 30 passed, 1 expected skip outside base-path modenpm run test:e2e:base-path: 1 passedclj -M:viz -m agiladmin.visualization-notebook: static report generated successfully undertarget/visualization/Limitation
The available application facts are monthly assignment totals. These charts do not claim daily, weekly, or within-month activity precision.