Commit f6037fb
v3.0.0.0 feat: branded HTML reports + per-course export folder (#28)
* feat(templates): branded HTML report skeleton + slug helper
Add the foundation for branded, self-contained HTML reports:
- templates/report.html.tmpl - per-skill report skeleton (visual contract)
- templates/index.html.tmpl - course dashboard skeleton (pipeline output)
- templates/assets/idstack.css - brand stylesheet (auto light/dark, print-
friendly, scholarly serif, severity + tier badges, matches idstack.org)
- bin/idstack-slugify - course_name -> filesystem-safe slug helper used by
every report-producing skill to land outputs under
.idstack/exports/<course-slug>/
These files are pure additions; nothing else references them yet. Skills
are wired in the next commit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* refactor(reports): switch human-facing reports to branded HTML
The human-facing report format moves from Markdown to HTML, and every per-
course artifact (per-skill reports, pipeline dashboard, LMS packages) lives
under one self-describing folder: .idstack/exports/<course-slug>/.
Spec changes:
- report-format.md becomes the content contract (what each field must
carry); the visual contract lives in templates/report.html.tmpl.
- manifest-schema.md documents the new report_path semantics
(.idstack/exports/<course-slug>/<skill>.html) and the slug derivation
rule.
- agent-context.md mirrors CLAUDE.md's dual-output description for Codex
sessions; AGENTS.md regenerated.
Skill changes (all 9 report-producing skills + pipeline orchestrator):
- needs-analysis, learning-objectives, assessment-design, course-builder,
course-quality-review, accessibility-review, red-team, course-export,
course-import: switch report write from .idstack/reports/<skill>.md to
.idstack/exports/<course-slug>/<skill>.html; each prep block computes
the slug via bin/idstack-slugify and copies templates/assets/idstack.css
into the course folder so the deliverable is self-contained.
- course-export additionally moves LMS artifacts (.imscc, scorm-export.zip)
into the same course folder, and now produces a course-export.html
report alongside the LMS package.
- pipeline orchestrator writes an index.html course dashboard at the
folder root with readiness scores, links to every per-skill report, and
a where-to-start pointer; replaces the old pipeline.md aggregate.
Both Claude and Codex flavors regenerated from the same templates via
bin/idstack-gen-skills.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore(cli): generator checks new templates; status reads new layout
- bin/idstack-gen-skills sanity-checks that templates/report.html.tmpl,
templates/index.html.tmpl, and templates/assets/idstack.css exist at
startup. Missing files would silently break every skill that produces a
report, so fail loud at the generator.
- bin/idstack-status surfaces reports from .idstack/exports/<course-slug>/
instead of the legacy .idstack/reports/. Auto-resolves the slug from
project_name; falls back to the only .idstack/exports/* subfolder when
exactly one exists (handles legacy folders left behind after rename).
Lists the course dashboard first, then per-skill HTML reports, then LMS
packages.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* test: smoke assertions for HTML pipeline + slug edge cases
Pin the new contract so regressions get caught:
- Every report-producing skill .tmpl must reference .idstack/exports/, call
idstack-slugify, and copy templates/assets/idstack.css.
- pipeline .tmpl must produce index.html under exports/<slug>/.
- bin/idstack-slugify must be installed and executable.
- Slug rule pinned with four cases: "Introduction to Biology 101" ->
introduction-to-biology-101; "Géographie I" -> geographie-i (NFKD-fold);
"" -> untitled-course; "!!!" -> untitled-course.
- Templates exist and carry expected placeholders.
Total: 255 checks (was 225).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* docs: sync README/CLAUDE/CONTRIBUTING/ROADMAP/landing for HTML reports
- README.md: skill table cites new HTML report paths; architecture diagram
shows the .idstack/exports/<course-slug>/ folder layout; "How idstack
reports back to you" leads with branded HTML and the self-contained
folder mental model; pipeline produces an index.html dashboard.
- CLAUDE.md: dual-output contract is now JSON + HTML; spells out the slug
derivation and the bundled CSS rule; report-write rules list the CSS
hooks skills must use.
- CONTRIBUTING.md: matching update to the dual-output contract.
- ROADMAP.md: new "Just shipped" entry for v3.0.0.0; preserves historical
v2.5.0.0 (Codex) and v2.4 (dual-output) entries.
- docs/index.html: the Output section on the landing page shows an HTML
report path and an index.html dashboard pointer; sample manifest JSON
uses the new report_path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore: bump version to 3.0.0.0 (vX.Y.Z.W)
Breaking: report_path semantics moved from .idstack/reports/<skill>.md to
.idstack/exports/<course-slug>/<skill>.html. LMS packages also move into
the same course folder. Manifest schema version unchanged (still 1.4) -
field shape is identical, only the path the field points to changed.
CHANGELOG: full entry for v3.0.0.0 covering the HTML report format, the
per-course exports folder, the brand stylesheet, the slug helper, and the
breaking-change list.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(test): portable grep alternation in pipeline check (BSD compat)
The pipeline orchestrator assertion used \| alternation inside grep without
-E. That's a GNU grep extension to basic regex; under BSD grep (macOS
default before /usr/local) it matches the literal pipe character instead
of acting as alternation, silently making the check unable to distinguish
the two valid patterns.
Switch to grep -qE and unescape the |. Per gemini-code-assist review on
PR #28.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* docs(landing): promote v3.0.0 in hero strip + What's new section
The landing page still pointed at v2.5.0. Update the hero meta strip
("v3.0.0 — Branded HTML reports") and rewrite the "What's new" release
card so the latest-shipped feature matches CHANGELOG/VERSION/plugin.json
(all already at 3.0.0.0).
Per /document-release Step 6 (cross-doc consistency).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 501eca4 commit f6037fb
49 files changed
Lines changed: 1892 additions & 2518 deletions
File tree
- .claude-plugin
- bin
- dist/codex/skills
- idstack-accessibility-review
- idstack-assessment-design
- idstack-course-builder
- idstack-course-export
- idstack-course-import
- idstack-course-quality-review
- idstack-learning-objectives
- idstack-needs-analysis
- idstack-pipeline
- idstack-red-team
- docs
- skills
- accessibility-review
- assessment-design
- course-builder
- course-export
- course-import
- course-quality-review
- learning-objectives
- needs-analysis
- pipeline
- red-team
- templates
- assets
- test
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
58 | 67 | | |
59 | 68 | | |
60 | 69 | | |
| |||
68 | 77 | | |
69 | 78 | | |
70 | 79 | | |
71 | | - | |
| 80 | + | |
| 81 | + | |
72 | 82 | | |
73 | | - | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
74 | 89 | | |
75 | 90 | | |
76 | 91 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
3 | 36 | | |
4 | 37 | | |
5 | 38 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
59 | | - | |
| 59 | + | |
60 | 60 | | |
61 | | - | |
| 61 | + | |
62 | 62 | | |
63 | | - | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
64 | 66 | | |
65 | 67 | | |
66 | 68 | | |
| |||
71 | 73 | | |
72 | 74 | | |
73 | 75 | | |
74 | | - | |
| 76 | + | |
| 77 | + | |
75 | 78 | | |
76 | 79 | | |
77 | 80 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
68 | | - | |
| 68 | + | |
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
| |||
0 commit comments