187 Commits

Author SHA1 Message Date
843620fc2f ci: retrigger after runner-image registry fix
Some checks failed
CI / ci (push) Successful in 1m19s
Deploy / deploy (push) Failing after 56s
2026-05-02 14:14:30 +02:00
93fdc7d0f9 chore: gitignore .wave/state.db (Wave runtime sqlite)
Some checks failed
CI / ci (push) Successful in 1m5s
Deploy / deploy (push) Failing after 40s
2026-04-30 12:21:20 +02:00
ab6dabd542 fix(ci): correct image digest separator
Some checks failed
CI / ci (push) Has been cancelled
Deploy / deploy (push) Has been cancelled
2026-04-30 12:20:26 +02:00
ba4d3fc89d ci: digest-pin runner-image v0.1.0
Some checks failed
CI / ci (push) Failing after 0s
Deploy / deploy (push) Failing after 0s
2026-04-30 12:17:45 +02:00
bf20e9d39e ci: update runner-image + repo path to public/ namespace
Some checks failed
CI / ci (push) Failing after 1s
Deploy / deploy (push) Failing after 1s
Repos moved to public/ on Gitea: public/runner-image (CI image)
and public/code-crispies (this repo). Updates workflow image refs,
spec hyperlinks, README, and compose tags.
2026-04-30 11:54:06 +02:00
967069a65c ci: kick first Gitea Actions run after enabling actions
All checks were successful
Deploy / deploy (push) Successful in 1m28s
CI / ci (push) Successful in 1m59s
2026-04-29 17:41:54 +02:00
4762952822 ci(deploy): Gitea-driven build/push/deploy for netcup (#14)
Replaces the GitHub Pages workflow with a Gitea Actions pipeline that publishes the cc image to `git.librete.ch/libretech/code-crispies` and ssh-deploys it to `/srv/cc` on netcup.

## Changes
- `.gitea/workflows/ci.yml` — npm test + sanity build (with placeholder VITE_*) on every push / PR.
- `.gitea/workflows/deploy.yml` — single-job build → push → ssh-deploy → /healthz check, gated on `vars.DEPLOY_ENABLED`. Tag push → `:vX.Y.Z` + `:latest`; main push → `:main` + `:sha-<7>`.
- `compose.yaml` — adds `image: ${CC_IMAGE:-cc:local}` so production pulls the published tag while dev still builds locally.
- Both workflows pin `git.librete.ch/libretech/runner-image:v1` (no third-party Docker Hub images, no `--user root`).

## Operator follow-up (before merging into hot deploy)
- Set repo secrets at `https://git.librete.ch/libretech/code-crispies/settings/actions/secrets`:
  - `REGISTRY=git.librete.ch`
  - `REGISTRY_USER=libretech` (user-namespace packages — bot can't push)
  - `REGISTRY_PASS=<libretech package PAT>` (same PAT used for `libretech/runner-image`)
  - `DEPLOY_HOST=root@cloud.librete.ch`
  - `DEPLOY_KEY=<bot deploy private key>` (same key as librenotes deploy)
  - `DEPLOY_PATH=/srv/cc`
  - `HEALTH_URL=https://cc.cloud.librete.ch/`
  - `VITE_SUPABASE_URL=https://yretixuyfuiresnrjkbs.supabase.co`
  - `VITE_SUPABASE_ANON_KEY=<the anon key>` (public-by-design supabase key)
- Set repo variable `DEPLOY_ENABLED=true` once the secrets are in.
- Add `CC_IMAGE=git.librete.ch/libretech/code-crispies:main` to `/srv/cc/.env` on netcup (no rebuild on host).

## Verification
- `yq -e .` parses both workflow YAMLs.
- `docker compose config` resolves cleanly in both build mode (no `CC_IMAGE`) and image-pull mode (`CC_IMAGE=test:1`).
- `npm test` is the same script the previous github-pages workflow ran.

Reviewed-on: libretech/code-crispies#14
Co-authored-by: Michael Czechowski <mail@dailysh.it>
Co-committed-by: Michael Czechowski <mail@dailysh.it>
2026-04-29 17:28:18 +02:00
1e4b4430ee feat(wave): add pedagogy-auditor persona 2026-04-28 22:00:28 +02:00
f216db8953 chore(deps): refresh package-lock 2026-04-28 22:00:27 +02:00
be99f9e4f7 feat: add umami tracking via umami.cloud.librete.ch 2026-04-28 20:31:27 +02:00
d0dbd3c257 feat(deploy): docker compose + nginx static for netcup VPS 2026-04-28 18:58:32 +02:00
45fc2a43f0 Merge pull request 'fix: rewrite CSS Filters tasks to describe visual outcomes' (#13) from 012-filters-tasks into main 2026-03-29 23:33:11 +02:00
8c96d6aa64 fix: implement #12 — rewrite CSS Filters tasks to describe visual outcomes 2026-03-29 23:27:43 +02:00
b25e6a4e20 docs: add spec, plan, and tasks for filters task wording fix (#12) 2026-03-29 23:24:32 +02:00
c5641a8364 fix: revert primary and section colors back to original lilac/purple
The impl-feature pipeline changed the default color scheme from
lilac/purple (#5e4b8b, #9163b8) to pink (#c9507a, #d95a8a).
This was unintentional — lilac was the chosen brand color.

Reverted: primary, section defaults, bg tints, success colors,
gradients, nav highlights, and all hardcoded rgba values back to
the original purple palette.
2026-03-29 22:22:23 +02:00
00e9bd18e5 Merge pull request 'fix: rewrite colors and box-model tasks to describe outcomes instead of answers' (#10) from 009-colors-boxmodel-tasks into main 2026-03-29 00:01:08 +01:00
1baff9075c feat: implement #9 — rewrite colors and box-model task descriptions
Rewrite task text in Colors (4 lessons) and Box Model (8 lessons x 6
locales) to describe visual outcomes instead of giving copy-paste CSS
answers. Colors validations changed from property_value to regex
accepting multiple valid named colors per lesson.
2026-03-28 23:56:55 +01:00
3d6ff645fe docs: add spec, plan, and tasks for colors and box-model task wording fix (#9) 2026-03-28 23:51:13 +01:00
dc048eba4e Merge pull request 'feat: add JavaScript learning section with starter lessons and sidebar section headers' (#8) from feat/impl-feature-20260328-200101-ecae into main 2026-03-28 21:32:38 +01:00
05a683388b Merge pull request 'fix: rewrite validation messages to guide learning instead of revealing answers' (#7) from 004-validation-messages into main 2026-03-28 21:32:31 +01:00
ae8f9fef45 feat: add JavaScript learning section with starter lessons and sidebar section headers
Implementation following plan:
- S01: Foundation: schema, section config, and router
- S02: Install CodeMirror JavaScript language support
- S03: Create JavaScript lesson JSON files (variables, DOM, events)
- S04: Register JavaScript lessons in module stores
- S05: Add JavaScript validation logic
- S06: Add JavaScript mode to LessonEngine preview rendering
- S07: Add JavaScript mode to CodeEditor
- S08: Update app.js for JavaScript mode support
- S09: Update navigation HTML and CSS theming for JavaScript section
- S10: Add section grouping headers in sidebar navigation
- S11: Update and write tests
2026-03-28 20:22:50 +01:00
8d567390e5 fix: rewrite validation messages to guide learning instead of revealing answers (#4) 2026-03-28 20:10:04 +01:00
372320b807 Merge pull request 'fix: rewrite flexbox tasks to describe outcomes instead of answers' (#5) from 003-flexbox-task-wording into main 2026-03-28 19:59:24 +01:00
61acd692f4 fix: rewrite flexbox task descriptions to describe outcomes instead of answers (#3)
Replace copy-pasteable CSS declarations in all 6 flexbox lesson tasks with
outcome-oriented descriptions. Update validation error messages to hint at
properties without revealing exact declarations. Add regex validation for
flexbox-6 to accept both flex: 1 and flex-grow: 1.
2026-03-28 19:25:32 +01:00
672a2d28cb docs: add spec, plan, and tasks for flexbox task wording fix (#3) 2026-03-28 19:17:48 +01:00
433379155b fix(security): add Content-Security-Policy meta tag
Restricts script sources to self and known CDNs, connect sources to
self and Supabase, blocks unauthorized resource loading. Allows
unsafe-inline for styles (CodeMirror requirement) and blob: for
sandboxed preview iframes.

Addresses SEC-5 (HIGH) from security audit.
2026-03-28 17:01:32 +01:00
756841f8c2 fix(security): sandbox preview iframes to prevent XSS
Add sandbox='allow-scripts' to all preview iframes. This isolates
user-executed code from the parent page's localStorage (auth tokens),
cookies, and DOM. Switch from document.write() to srcdoc attribute
since sandboxed iframes can't use document.write().

Addresses SEC-1 (critical) from security audit.
2026-03-28 16:38:56 +01:00
c97fce1f29 fix: replace github personas with gitea, add ontology telos 2026-03-28 16:19:15 +01:00
8b6a88ad59 test: add 182 new tests for router, sections, renderer, and validator
Generated by wave test-gen pipeline. Coverage:
- router.js: 0% → ~85% (33 tests, all 7 exports)
- sections.js: 0% → ~90% (29 tests, all 5 exports)
- renderer.js: partial → extended (36 tests, difficulty, feedback, sidebar)
- validator.js: partial → extended (84 tests, all types + edge cases)

Total: 43 → 225 tests
2026-03-28 16:14:52 +01:00
4476d26140 chore: update wave.yaml to latest wave version with corrected project config 2026-03-28 15:58:46 +01:00
f28531fb4c ignore auto claude files 2026-01-27 16:53:47 +01:00
7ab095718b chore(nix): add flake with claude-code in devShell 2026-01-25 21:28:16 +01:00
5a243f332a chore: temporarily disable Tailwind CSS section
- Comment out Tailwind nav links in header and sidebar
- Comment out Tailwind card on landing page
- Remove tailwind from router SECTIONS array
- Remove tailwind from landing page progress tracking

Tailwind content and styles remain in codebase for easy re-enabling.
2026-01-25 15:40:53 +01:00
739470e045 feat: add Markdown learning module with 8 beginner lessons
- Add markdown-basics module with lessons for headings, text formatting,
  lists, links, and inline code
- Integrate markdown section with blue color theme (#5b8dd9)
- Add markdown mode support in CodeEditor and LessonEngine
- Add markdown preview rendering using marked library
- Add section overview page with educational content
- Add markdown reference page with syntax guide
- Add i18n translations for 6 languages (EN, DE, PL, ES, AR, UK)
- Update router to recognize #markdown as section route
- Add all section-specific CSS styles for markdown theme
2026-01-25 11:27:07 +01:00
07aafa0d89 feat(app): pass codePrefix/codeSuffix to editor on lesson load
- Update loadCurrentLesson() to pass prefix/suffix to editor
- Use getEditableValue() in runCode() to get only user code
2026-01-25 02:00:07 +01:00
eb82eed826 style: add styling for read-only editor zones
Dimmed appearance with subtle background for codePrefix/codeSuffix regions.
2026-01-25 01:59:59 +01:00
82f6e46d3c feat(editor): add read-only zones support for codePrefix/codeSuffix
- Add initWithContext() method for prefix/suffix initialization
- Implement changeFilter to prevent edits in read-only zones
- Add transactionFilter to constrain cursor to editable area
- Add visual decorations with cm-readonly-zone class
- Update getValue/setValue to handle editable portions correctly
2026-01-25 00:39:09 +01:00
847b261f16 fix: restore gradient scaling and distribute milestone colors evenly 2026-01-16 23:45:19 +01:00
2ce88f9cb7 fix: milestone colors now correctly reflect position in 0-100 gradient 2026-01-16 23:40:38 +01:00
a8ef3d3c5c fix: progress bar now shows milestone progress instead of overall progress 2026-01-16 23:21:41 +01:00
0f5ac81fe8 fix: shorten German reset progress label to 'Fortschritt' 2026-01-16 22:01:15 +01:00
cf0d2cba51 feat: add lesson difficulty indicators and improve mobile sidebar
- Add computeLessonDifficulty function to determine lesson difficulty
  based on selector complexity (easy/medium/hard)
- Display difficulty badge with bar indicator in lesson title row
- Add mobile navigation links (CSS, HTML, Tailwind) to sidebar
- Add mobile auth trigger button in sidebar
- Redesign settings section with card layout and native toggles
- Add difficulty translations for all 6 languages
- Fix module pill overflow on narrow screens
2026-01-16 21:47:47 +01:00
d5bd23615f fix: update German CTA to 'Jetzt gleich anfangen' 2026-01-16 16:53:38 +01:00
fcc6748aae fix: update German landing hero text to 'Lerne Web Entwicklung mit CODE CRISPIES' 2026-01-16 16:41:17 +01:00
5c16a8a767 feat: redesign sidebar progress to show milestone progress and total lessons 2026-01-16 16:37:23 +01:00
17b3d5380d fix: show Next button disabled in playground instead of hiding it 2026-01-16 15:32:21 +01:00
f9311d83f7 fix: remove centered class toggle - grid layout handles positioning 2026-01-16 15:31:17 +01:00
f4ce61ba64 fix: add gap between game controls grid items 2026-01-16 15:29:44 +01:00
813d669302 fix: use CSS grid for game controls to keep pill centered when next is hidden 2026-01-16 15:28:45 +01:00
9328399dcb fix: change 'Crispy Code' to 'Code Crispy' in landing page title 2026-01-16 15:27:14 +01:00
857ae9c3ef fix: move device notice under section cards on landing page 2026-01-16 15:26:10 +01:00
c91e8d6f32 fix: make copyright year dynamic in footer 2026-01-16 15:25:04 +01:00
Michael Czechowski
9821e014c5 Merge pull request #2 from nextlevelshit/feature/new-lessons
Feature/new lessons
2026-01-16 15:20:31 +01:00
e0cee41482 feat: add more Umami tracking events
New events:
- run_code (with module, lesson, playground flag)
- logo_click
- privacy_open
- imprint_open
- setting_change (with setting name and value)
2026-01-16 15:18:23 +01:00
11877e8e7a feat: add Umami analytics tracking for auth events
Track the following events:
- auth_login (with method: email, github, google)
- auth_signup (with method: email)
- auth_logout
- auth_delete_account
2026-01-16 15:15:50 +01:00
d78f0ac0b4 feat: keep preview glow permanently after animation completes 2026-01-16 15:14:43 +01:00
0b22263a68 fix: keep preview glow visible after animation ends 2026-01-16 15:11:39 +01:00
baaf05dda4 feat: improve progress display with gradient milestones
- Progress text now says "X of Y lessons completed" in all languages
- Each milestone badge shows a portion of the gradient based on position
- Progress bar shows full gradient, cropped to current progress percentage

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 15:08:57 +01:00
2aa35cea2d fix: remove border-left from nav-link-ref, use margin instead 2026-01-16 15:05:46 +01:00
f0e2072ac7 feat: add section color coding to overview first paragraphs
The strong and code elements in .section-overview now use
section-specific colors (purple/pink/teal) instead of default purple.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 15:05:12 +01:00
072859459f fix: clean up OAuth debug logging
Remove temporary console.log statements used during OAuth debugging.
2026-01-16 15:04:24 +01:00
062659fa30 fix: simplify playground navigation - just hide Next button
Previous button stays "Previous" and works the same everywhere.
Only difference in playground: Next button is hidden.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 15:01:44 +01:00
a7dcb3ec6f fix: playground back button goes to previous lesson
The Back button in playground now works the same as Previous button
on other pages - it navigates to the previous lesson.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 15:00:13 +01:00
28d41344d1 fix: use same button position/style for playground back button
Instead of a separate back button, the Previous button is repurposed
as "Back" in playground mode - same position (left), same style.
Only the Next button is hidden in playground mode.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 14:58:25 +01:00
fb5fbe4107 feat: add back button to playground and fix dice icon color
- Add back button to game-controls (shown only in playground mode)
- Replace dice img with inline SVG using currentColor for consistent styling
- Add SVG sizing rule to .btn-icon
- Add "back" translation to all 6 languages

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 14:55:11 +01:00
7ecc115c55 feat: add section color coding to overview page elements
Topic headings (h2, h3) and inline code now use section-specific colors:
- CSS: purple
- HTML: pink
- Tailwind: teal

Uses CSS custom properties (--section-color-dark, --section-color-rgb)
that are already set per section.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 14:45:30 +01:00
d802172e5b feat: add section color coding to lesson title h2
The lesson title now uses section-specific colors:
- CSS: purple (#9163b8)
- HTML: pink (#d45aa0)
- Tailwind: teal (#1aafb8)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 14:44:10 +01:00
73a0c59722 fix: show total lessons instead of next milestone in progress text
The progress text was showing "0 of 1" (next milestone) which was confusing.
Now shows "0 of 101" (total lessons) while milestone dots show the milestone progression.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 14:27:12 +01:00
630a0a6a21 docs: update roadmap with completed milestones and lesson counts 2026-01-16 14:17:51 +01:00
be9c753a0e feat: add new lesson modules and reach 101 total lessons
New CSS Modules:
- Gradients (3 lessons): linear-gradient, radial-gradient, direction
- Filters (4 lessons): blur, grayscale, brightness, drop-shadow
- Positioning (4 lessons): relative, absolute, offset properties
- Pseudo-elements (4 lessons): ::before, ::after, content, decorative

New HTML Module:
- Semantic HTML (3 lessons): article, section, aside

Expanded Existing Modules:
- Typography: +2 lessons (text-decoration, text-shadow)
- Tables: +2 lessons (thead/tbody/tfoot, colspan)

Total lessons: 101 (up from ~66)
- Enables full milestone system (1, 5, 10, 20, 30, 50, 75, 100)
- All modules added to all 6 language stores with EN fallback
2026-01-16 14:17:13 +01:00
a7e765cb80 fix: add DROP statements to supabase-setup.sql for clean reinstalls
TODO: Configure OAuth providers in Supabase dashboard:
- Google: Add Client ID and Secret from Google Cloud Console
- GitHub: Add Client ID and Secret from GitHub Developer Settings
- Set redirect URLs in Authentication → URL Configuration
2026-01-16 14:06:14 +01:00
d2fbe0e085 feat: implement milestone-based progress system and activate new lessons
Progress System:
- Replace percentage-based progress with milestone markers (1, 5, 10, 20, 30, 50, 75, 100)
- Add visual milestone indicators with reached/current/next states
- Add celebration animation when milestones are reached
- Update progress bar to show progress toward next milestone
- Add progressTextMilestone i18n key for all 6 languages

New Lessons Activated:
- HTML Dialog (native modal dialogs)
- HTML Progress & Meter (indicator elements)
- HTML Fieldset (form grouping)
- HTML Datalist (autocomplete inputs)

This adds 10 new lessons across all 6 languages, bringing total from ~66 to ~76.
2026-01-16 13:56:29 +01:00
b051974957 docs: add comprehensive roadmap for lessons and milestone system
- Analyze MDN HTML/CSS documentation for new lesson ideas
- Design milestone-based progress system (1, 5, 10, 20, 30, 50, 75, 100)
- Document 13 inactive lesson files ready to activate
- Plan 34 new lessons to reach 100 total
- Include technical implementation notes
2026-01-16 13:47:42 +01:00
68407fe12b feat: add authentication, cloud sync, and GDPR compliance
Authentication & Cloud Sync:
- Add Supabase integration for auth (email/password, Google, GitHub OAuth)
- Add cloud progress sync for logged-in users
- Add account deletion feature with confirmation dialog
- Auth is optional - anonymous users can still use localStorage

UI Improvements:
- Add dark-themed account section in sidebar
- Show user email in header when logged in
- Add signup success feedback message
- Update landing page: remove cloud sync from Coming Soon, add Code Challenges
- Update benefit text to mention optional cloud sync

GDPR Compliance:
- Add Privacy Policy dialog with full GDPR-compliant content
- Add Imprint dialog with legal contact information
- Add footer links for Privacy and Imprint
- All legal content translated to 6 languages (en, de, pl, es, ar, uk)

Files added:
- src/supabase.js - Supabase client with auth and progress sync helpers
- src/auth.js - Authentication logic and form handlers
- supabase-setup.sql - Database schema and RLS policies
2026-01-16 12:37:22 +01:00
ea57ce6d28 fix: change tracking logs to console.debug 2026-01-16 11:19:14 +01:00
0fb352c027 fix: add tracking debug logs for success and blocked states 2026-01-16 11:16:49 +01:00
9f9dc73b11 fix: add console.log to debug newsletter tracking 2026-01-16 11:16:26 +01:00
0748b23d4c feat: add newsletter signup with email field and Umami tracking
- Add email input field to newsletter signup form
- Add disclaimer about max frequency and unsubscribe option
- Add newsletter translations for all 6 languages (en, de, pl, es, ar, uk)
- Update hero highlight to "Crispy Code"
- Update CTA button to "Let's get crispy!"
- Add Umami tracking for newsletter submissions
- Style newsletter form without white background
2026-01-16 11:06:42 +01:00
1b3c2b42dc feat: add coming soon section and device notice to landing page
- Add "Coming Soon" section with Cloud Sync, Achievements, JavaScript, Frameworks
- Add device notice recommending desktop/tablet for best experience
- Add translations for all 6 languages (en, de, pl, es, ar, uk)
- Add CSS styling with responsive grid layout

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 10:46:12 +01:00
efbadbfb76 fix: hide expected result button in playground mode
🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 05:06:17 +01:00
547840c3fd fix: center game controls in playground mode
🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 05:05:29 +01:00
55379c14f0 fix: remove duplicate isPlayground declaration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 05:03:55 +01:00
c59736c0e2 fix: hide lesson counter in playground mode
- Hide level indicator (1/1) in playground mode
- Show only module title in header pill for playground
- Keep nav buttons hidden in playground

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 05:02:40 +01:00
c0e1dab0d9 fix: hide prev/next buttons in playground mode
🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 05:01:15 +01:00
469f6a81a5 refactor: make CSS purple the default section color
- Update :root section colors to CSS purple (#9163b8)
- Remove redundant [data-section="css"] overrides
- CSS section now uses fallback colors automatically

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 05:00:00 +01:00
cb87adb249 fix: update all section color references to balanced colors
Update all rgba and hex values for hover/active states:
- CSS: rgba(145, 99, 184), #724a95
- HTML: rgba(212, 90, 160), #b24485
- Tailwind: rgba(26, 175, 184), #0d8f96

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 04:59:01 +01:00
96b71079d8 style: balance section colors between muted and vibrant
Find middle ground between old muted and badge colors:
- CSS: #9163b8 (balanced purple)
- HTML: #d45aa0 (balanced pink)
- Tailwind: #1aafb8 (balanced teal)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 04:57:20 +01:00
8513189efe style: update section colors to match completed badge
Use colors from the completed badge gradient:
- CSS: #9b59b6 (purple)
- HTML: #e040fb (pink/magenta)
- Tailwind: #00bcd4 (cyan)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 04:56:32 +01:00
e65fdb0abc feat: add interactive UI component templates
Add 10 new templates showcasing native HTML features:
- Accordion FAQ: using <details> and <summary>
- Form Validation: HTML5 validation attributes
- Toggle Switch: styled checkbox as iOS toggle
- CSS Tabs: pure CSS tabs with radio buttons
- Modal Dialog: native <dialog> element
- Tooltip: CSS-only hover tooltips
- Progress Steps: checkout wizard indicator
- Dropdown Menu: CSS :hover/:focus-within
- Star Rating: interactive CSS-only stars
- Search Box: styled search with suggestions

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 04:52:33 +01:00
30635a9e69 fix: footer links on all pages and scroll behavior
- Render footer lesson links in initializeModules() for all pages
- Fix scroll to top using requestAnimationFrame for proper timing
- Move dice button to left of editor tools

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 04:50:47 +01:00
d408c49e45 feat: add real Unsplash images to playground templates
Replace CSS gradient placeholders with actual photos:
- Card Component: mountain landscape
- Profile Card: woman portrait
- Social Post: avatar + nature photo
- Story Highlights: 5 different portrait photos
- Comment Section: 2 avatar photos
- Bio Section: woman portrait with gradient ring
- Status Update: man portrait

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 04:50:29 +01:00
817dc09a58 feat: add social media playground templates and use EUR currency
- Add 10 new social media templates: Social Post, Story Highlights,
  Like Button, Comment Section, Notification Badge, Emoji Reactions,
  Bio Section, Status Update, Chat Bubble
- Change pricing from $ to € (€9, €29, €99)
- Fix Story Highlights with shorter names for better rendering
- Fix Bio Section avatar overflow issue

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 04:48:03 +01:00
4c56342cb7 feat: add comprehensive analytics tracking and enhance practice links
- Add tracking for: coming_soon_click, external_link, header_nav_click,
  footer_link, practice_link, expected_toggle
- Enhance practice links (.ref-see-also) with gradient background and
  button-like styling to encourage learning
- Simplify reference nav (remove sticky positioning)
2026-01-16 04:38:13 +01:00
0a03d51e63 feat: complete section color coding with logo, hints, editor themes, and footers
- Add section-specific CodeMirror syntax highlighting (purple selectors for CSS)
- Logo now uses section colors (CSS purple as default, changes per section)
- Add section color coding for hints
- Add full footer to section and reference pages
- Fix nav highlight updates for sidebar and prev/next navigation
- Change welcome module mode to CSS for purple theme on first lesson
- Rebrand "Code Crispies" to "CODE CRISPIES" across all translations
- Fix scroll to top on section page navigation
- Change HTML section color to raspberry (#c75b7a)
2026-01-16 04:32:55 +01:00
5ebb007568 fix: balance section colors - more vibrant but still readable 2026-01-16 03:59:34 +01:00
f4cdfa1e57 fix: desaturate section colors for better readability and add section progress bars 2026-01-16 03:58:31 +01:00
0fe618f551 fix: use completed color gradient for progress bar 2026-01-16 03:55:10 +01:00
f2a5156d01 fix: add section color coding for reset code button 2026-01-16 03:54:35 +01:00
848881f243 fix: add section color coding for module pill between nav buttons 2026-01-16 03:53:55 +01:00
03212da9af fix: add section color coding for code blocks on section pages 2026-01-16 03:53:12 +01:00
af74a7024d fix: improve color coding for nav buttons, CodeMirror theme, and prev/next navigation 2026-01-16 03:51:25 +01:00
8790d3c19e feat: implement section-based color coding
- Add CSS variables for section colors (CSS violet, HTML raspberry, Tailwind cyan)
- Set data-section attribute on body based on current route
- Color code header nav links, logo, reference nav, topic links
- Color code CodeMirror editor cursor/selection
- Color code task instruction bubble
- Add reference page footer
- Section pages, lessons, and references all use matching colors
2026-01-16 03:50:01 +01:00
f475d84b39 feat: add 4th benefit card (Free & Open Source) with translations 2026-01-16 03:44:53 +01:00
9753c7066c fix: purple-gray Coming Soon badge, raspberry HTML color 2026-01-16 03:40:05 +01:00
cb8852f64b feat: update section card colors to match completion badge theme 2026-01-16 03:39:21 +01:00
410833e91e fix: darken Coming Soon badge background 2026-01-16 03:37:13 +01:00
d428f394c5 fix: restore clickable Tailwind card on landing page 2026-01-16 03:36:50 +01:00
072b2ad210 feat: add Coming Soon badge to Tailwind section
- Show Coming Soon badge on Tailwind landing card
- Disable Tailwind topic links with Coming Soon badges
- Add i18n translations for Coming Soon in all 6 languages
- Add CSS for disabled states and badge styling

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 03:36:15 +01:00
1368f1c079 feat: add landing footer with donation support, change license to Unlicense
- Add extended landing footer with module links grouped by section
- Integrate Liberapay donation widget with Umami tracking
- Add support section to help dialog and goodbye lesson
- Change license from MIT to Unlicense (public domain)
- Disable Tailwind section (not yet activated)
- Update German CTA copy
- Update all 6 language translations for license text

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 03:33:41 +01:00
f1496e7232 feat: improve playground UX and fix undo/redo across lessons
- Add dice SVG icon for random template button
- Reset button now restores last loaded template in playground
- Clear editor history when switching lessons (prevents cross-lesson undo)
- Add playground link to goodbye lesson
- Center icon buttons with flexbox

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 02:28:12 +01:00
3a2027e825 feat: add custom CodeMirror theme with purple accent colors
Replace oneDark theme with custom crispyEditorTheme featuring:
- Purple accent (#c9a6eb) for keywords and HTML tags
- Matching dark background (#262630)
- Applied consistently across editor and reference code blocks

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 02:08:16 +01:00
d0d8c5a2c0 copy(de): update German landing page headline 2026-01-16 01:53:41 +01:00
b9d13d064f fix: improve UX and tracking
- Change landing page progress to positive wording ('X lessons to explore')
- Add scroll to top when navigating between pages
- Fix section pill highlighting for welcome/playground modules
- Add Umami tracking for language URL switch and landing page clicks
2026-01-16 01:47:49 +01:00
5b6b283470 fix: clear current module/lesson when reloading modules for language switch
When setModules is called (e.g., during language switch), clear currentModule
and currentLesson to force fresh lookup from the new modules array. This
prevents stale module objects from the old language being used.
2026-01-15 23:26:16 +01:00
9733ce4d56 fix: sync language dropdown when switching via URL hash 2026-01-15 22:37:42 +01:00
f2e1ae17e9 fix: fully apply language when switching via URL hash
- Reload lesson modules in new language
- Re-render sidebar module list
- Update progress display
- Now #de, #pl etc. properly translate entire UI
2026-01-15 20:57:08 +01:00
8cbf0b0f26 feat: add URL-based language switching (#de, #pl, #es, #ar, #uk)
- Visit #de to switch to German and go to home
- Visit #pl for Polish, #es for Spanish, #ar for Arabic, #uk for Ukrainian
- Language is persisted to localStorage
- URL is cleaned up after switching (hash removed)
2026-01-15 17:47:20 +01:00
42c4c5d586 feat: add collapsible reference tables for sections with >5 rows
- Tables with more than 5 rows now show first 5 with 'Show N more...' toggle
- Uses native <details>/<summary> for expand/collapse
- Keeps reference pages cleaner by reducing visual noise from long sections
- Box Model, Typography, Transitions now collapsed by default
2026-01-15 17:42:03 +01:00
3010b1a902 feat(i18n): add landing page localization for 6 languages
- Add translation keys for landing page (hero, benefits, learning paths, CTA)
- Support EN, DE, PL, ES, AR, UK languages
- Add data-i18n attributes to landing page HTML elements
2026-01-15 17:33:58 +01:00
7093a36694 copy: change hero CTA to 'Start Learning NOW' 2026-01-15 17:30:08 +01:00
11a57cb39b fix: move CTA subtitle below button 2026-01-15 17:27:08 +01:00
85205f836e feat: redesign landing page with SEO enhancements
- Add comprehensive SEO meta tags (Open Graph, Twitter Cards, JSON-LD)
- Restructure landing page with Khan Academy-style "Why It Works" section
- Replace "How It Works" + "Features" with 3 benefit cards:
  - Learn by Doing (code icon)
  - Practice at Your Pace (progress icon)
  - Master Real Skills (tools icon)
- Add "Explore Learning Paths" section with learning tracks
- Implement dynamic meta tag updates for route-based SEO
- Update page title and descriptions based on current route
- Add new CSS styles for benefit cards, learning paths, and enhanced CTA

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 17:26:02 +01:00
6639a70070 feat: complete reference coverage and UX improvements
Reference pages:
- Add min-width, min-height, border-collapse to Box Model
- Add blockquote to Text Content
- Add new Semantic Inline section (time, mark, small, abbr, kbd, sub, sup, ins, del)

UX improvements:
- Rename "Free Coding" to "HTML & CSS Editor" in Playground
- Keep Welcome and Playground modules always expanded in sidebar

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 16:26:20 +01:00
3b6639b401 rename: Playground → HTML & CSS Editor, Hello! → Getting started! 2026-01-15 16:18:17 +01:00
357f6dc57c feat: extend references and enhance analytics tracking
Reference pages:
- Add Transitions & Animations section (transition-*, animation-*)
- Add CSS Variables section (--*, var(), :root)
- Add Interactive Elements section (<details>, <summary>, <dialog>, <progress>, <meter>, <datalist>)

Analytics tracking (Umami v2):
- Add lesson_nav tracking for next/prev navigation
- Add lesson_select tracking for sidebar lesson clicks
- Add reset_code tracking for code resets
- Add help_open tracking for help dialog
- Add sidebar_open tracking for menu opens
- Add share_open and share_copy tracking for sharing

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 16:13:31 +01:00
79ff72635e fix: add missing --spacing-xl CSS variable for reference section spacing 2026-01-15 16:06:36 +01:00
b04688734d feat: add cross-reference links throughout the website
- Add "See also" links to all 5 reference pages connecting related content
- Add reference links to section content (Selectors, Flexbox, Grid, HTML)
- Add inline links to landing page features section
- Add quick navigation links to help dialog
- Add CSS styling for .ref-see-also, .topic-ref, .section-see-also, .help-nav-links
- Fix spacing between reference sections (add margin-top)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 16:03:18 +01:00
c6f33194e8 feat: add Reference link to main navigation
- Add Reference nav link with subtle separator styling
- Update nav highlight to show active state on reference pages

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 15:54:43 +01:00
0340a4d4bc feat: implement reference/cheatsheet pages
- Add reference page container to index.html with tab navigation
- Create comprehensive cheatsheets for CSS properties, selectors,
  flexbox, grid, and HTML elements
- Add showReferencePage function with CodeMirror syntax highlighting
- Add reference_view analytics tracking
- Style reference tables, lists, and navigation with responsive design

Routes: #reference/css, #reference/selectors, #reference/flexbox,
        #reference/grid, #reference/html

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 15:53:05 +01:00
aa5292b653 feat: add Umami analytics tracking
- Add Umami v2.13.2 script to index.html
- Track key events: lesson_complete, module_start, section_view,
  language_change, playground_template, reset_progress

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 15:45:03 +01:00
6f9091ceb4 fix: clear completed status when resetting a lesson
- Remove completion badge and reset Run button text in resetSuccessIndicators()
- Remove lesson from completed array in LessonEngine.reset()
- Update sidebar to remove completed class from lesson item
- Update progress display after reset

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 12:37:50 +01:00
a2f998195c fix: handle playground mode as HTML mode in preview rendering
Playground mode was falling through to the CSS branch, wrapping user code
in a <style> tag. This prevented HTML elements and font styles from rendering
correctly. Now playground mode is treated like HTML mode, allowing templates
with <style> blocks and HTML content to work properly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 12:26:44 +01:00
50605e6939 fix: improve playground templates layout and typography
- Add font-family: system-ui, sans-serif to all template bodies
- Wrap pricing cards in .pricing flex container
- Wrap animation boxes in .animation-demo flex container
- Wrap flexbox layout in .layout container
- Simplify navigation (fewer links to fit preview)
- Reduce sizes to better fit preview area

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 12:21:43 +01:00
8f4a53f1d9 feat: add random template button to playground
- Create 10 boilerplate templates (cards, nav, forms, animations, etc.)
- Add dice button (🎲) visible only in playground mode
- Load random template and apply to preview on click
- Templates include: Card, Navigation, Profile, Buttons, Pricing,
  Form, Features Grid, Badges, CSS Animation, Flexbox Layout

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 12:10:17 +01:00
6d5d727ad6 refactor: simplify onboarding/offboarding and move playground to end
- Reduce welcome module from 3 lessons to 1 concise intro
- Reduce goodbye module from 3 lessons to 1 concise outro
- Create standalone playground module at end of module list
- Update all translated welcome files (de, pl, es, ar, uk)
- Playground now appears after goodbye, less prominent

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 12:02:58 +01:00
301200abc2 feat: add CodeMirror syntax highlighting to section page code blocks
- Use CodeMirror in read-only mode for code examples
- Auto-detect CSS vs HTML based on content
- Clean up views when navigating between sections
- Add transparent background to blend with code-block container

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 11:54:50 +01:00
a8410df42a feat: improve section pages with GitBook-style layout and landing page
- Add side-by-side layout for section pages (text left, code right)
- Include educational content with code examples for CSS, HTML, Tailwind
- Add section overviews explaining each technology
- Make header level pill clickable to return to last lesson
- Update landing page with "How It Works" steps and features section
- Improve code block readability with GitHub-dark color scheme
- Add prominent topic links with SEO-friendly accessible text
- Add responsive grid layout that stacks on mobile

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-15 11:52:26 +01:00
512f716054 fix: move main nav to header-actions (right side) 2026-01-14 23:21:39 +01:00
7125b7adc9 feat: add landing pages and section navigation
- Add home landing page with section cards (CSS, HTML, Tailwind)
- Add section landing pages with module grid and progress tracking
- Implement extended URL routing for pages, sections, and lessons
- Create sections.js configuration for module categorization
- Exclude welcome/goodbye modules from progress stats
- Add main navigation links in header (desktop only)
- Update logo click to navigate to home landing

Routes:
- # → Home landing
- #css, #html, #tailwind → Section landing pages
- #module/index → Lesson (unchanged)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-14 23:15:34 +01:00
0f14568d2c feat: add shareable lesson links with URL routing
- Add share button with SVG link icon in lesson title row
- Create share dialog with copy URL functionality
- Implement URL hash-based routing for lesson navigation
- Support browser back/forward navigation
- Add i18n translations for share dialog in all languages
- Position share button between title and completion badge
- Add RTL support for title row layout

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-14 21:35:49 +01:00
a4563638a0 cleanup: remove commented out and duplicate RTL code 2026-01-14 20:25:41 +01:00
99380cb9ce replace: remove hex complete message due to not so funny and replace with +1 2026-01-14 19:20:37 +01:00
aebb3f267b fix(rtl): orientation and direction of elements in the sidebar 2026-01-14 19:17:36 +01:00
96f2ec1970 fix(rtl): sidebar chevron and titles right-aligned using order property 2026-01-14 18:37:04 +01:00
daf5aa1134 fix(rtl): let natural RTL flex flow position burger on right edge 2026-01-14 18:36:20 +01:00
ac83bb2faa fix(rtl): header layout, completion badge spacing, sidebar alignment, list bullets, code blocks 2026-01-14 18:12:24 +01:00
6da748fe66 fix: use native details/summary marker instead of custom chevrons 2026-01-14 17:59:07 +01:00
af2ded5381 fix: use clip-path for sidebar chevrons (better cross-browser support) 2026-01-14 17:56:50 +01:00
468163a2ec fix: header pill shows module name + level, fix RTL checkmark spacing 2026-01-14 17:53:29 +01:00
64caaeb049 feat: add header level pill on desktop, use native details/summary for sidebar
- Add lesson indicator pill to header (visible on desktop only)
- Logo stays centered, pill on left with burger menu
- Replace emoji arrows with CSS triangles for iOS compatibility
- Use native <details>/<summary> for expand/collapse
- Update tests for new implementation
2026-01-14 17:51:34 +01:00
be9bc7bd2f fix(animation): sync disappear timing (bowl 3s, bubble 2.7s + 0.3s delay) 2026-01-14 17:45:25 +01:00
2d376f4fe2 fix(animation): offset speech bubble timing for bounce effect 2026-01-14 17:27:35 +01:00
6e2fce813f fix: change +1 message from binary to hex (0x2B 0x31) 2026-01-14 17:26:20 +01:00
22c49ae713 fix(animation): position speech bubble above the bowl 2026-01-14 17:24:45 +01:00
275f2d75c3 fix(animation): speech bubble now animates like bowl with scale 2026-01-14 17:23:53 +01:00
46d8f7d282 feat(animation): proper SVG speech bubble with tail using mask-image 2026-01-14 17:15:49 +01:00
249becc756 feat(animation): speech bubble shape with tail pointing to bowl 2026-01-14 17:03:51 +01:00
5986e83237 fix(animation): bowl size to 50% of wrapper 2026-01-14 17:01:50 +01:00
bfd2d6943f fix(animation): responsive bowl size - min 200px or 1/3 wrapper width 2026-01-14 17:01:21 +01:00
4643477bf5 fix(animation): center bowl peek horizontally 2026-01-14 16:59:39 +01:00
f7b4962255 fix(animation): simplify text scale to 4 smooth keyframes 2026-01-14 15:53:19 +01:00
7fa67daac8 fix(animation): more dramatic text scale on entrance 2026-01-14 15:51:05 +01:00
1d0c2426dc fix(animation): sync bowl peek timing with text animation 2026-01-14 15:50:29 +01:00
cc1b972132 fix(animation): smoother bowl peek with gentle settle motion 2026-01-14 15:49:46 +01:00
047de757f7 fix(animation): move bowl inside preview-frame with overflow hidden 2026-01-14 15:48:53 +01:00
ef8bbe7730 fix(animation): move bowl to preview-wrapper and increase size 2026-01-14 15:47:40 +01:00
1613175112 feat(animation): add bowl smiley peek animation on success
Bowl mascot now peeks up from bottom right corner when a lesson
is completed, synced with the existing "Crispyyyyyy!" animation.
2026-01-14 15:44:58 +01:00
1a5c09b750 fix(i18n): sync all lesson translations with English source
Synchronizes 72 lesson files across 5 languages (de, pl, es, ar, uk) to match
the English source. This ensures code, solutions, and validations are identical
while only title, description, task, and message fields are translated.

Changes include:
- Box model lessons (01-box-model.json)
- Units and variables (05-units-variables.json)
- Transitions and animations (06-transitions-animations.json)
- Responsive design (08-responsive.json)
- HTML elements (20-html-elements.json)
- HTML forms basic and validation (21, 22)
- HTML details/summary, progress/meter (23, 24)
- HTML datalist, dialog, fieldset (25, 27, 28)
- HTML tables and SVG (30, 32)
- HTML marquee (31)
- Welcome module (00-welcome.json)

Fixes validation inconsistencies and removes extra content that exceeded
English source. German translations were largely correct; Polish, Spanish,
Arabic, and Ukrainian required full translations.
2026-01-14 15:39:22 +01:00
617906acb9 feat: sync all flexbox translations to match English version
- Updated de, pl, es, ar, uk flexbox lessons to use identical structure
- All 6 lessons now match English: previewHTML, validations, solutions
- Only title, description, task, and message fields are translated
- Real-world examples: nav menus, headers, cards, toolbars

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-14 12:07:35 +01:00
0c2abe376b fix(lessons): clarify task instructions when codePrefix provides selector
Task text now says "Add property: value" instead of "Set property on selector"
since the selector is already shown in the editor via codePrefix.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-14 12:00:33 +01:00
74ccf32e76 feat: sync all language files to match English CSS Basics lessons
- Updated de, pl, es, ar, uk translations to have identical structure
- All 10 lessons now match English: code, solutions, validations
- Only title, description, task, and message fields are translated
- Removed obsolete lessons not present in English version

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-14 11:55:30 +01:00
3fed861a77 fix: clear animation timeout on navigation to prevent border flash 2026-01-14 11:40:29 +01:00
23e83f0791 refactor: keep only +1 ASCII binary quote 2026-01-14 03:18:49 +01:00
1fec205782 feat: add binary-themed quotes (00000001, 0b00000001, +1 in ASCII) 2026-01-14 03:17:40 +01:00
18f6b6d8ab fix: sync gradient border with completion badge state 2026-01-14 03:14:10 +01:00
9d786b5cf4 feat: enhance success animation with scale, random quotes, and persistent border
- Add scale transition (50% → 100%) to crispy badge animation
- Rotate through random encouraging quotes on completion
- Keep gradient border visible after completing a lesson
- Match completion badge gradient colors to glow effect
- Improve bounce animation with elastic bezier curve
2026-01-14 03:13:44 +01:00
ab056c42c3 refactor(lessons): improve CSS Basics and Typography with real-world examples
CSS Basics:
- Rewrite lessons 3-10 with real UI components (coffee shop, dashboard, buttons)
- Remove artificial examples with dashed borders
- Students write full selectors when learning selector syntax
- Use codePrefix only when focus is on property concepts

Typography:
- Replace Georgia font with universal monospace for code examples
- Use system-ui throughout for consistent rendering
- Replace text-shadow with text-transform and letter-spacing
- Add rich descriptions explaining the "why" behind each property
2026-01-14 02:43:27 +01:00
2cd94caafb feat: reorder learning path for design students and improve animations
Learning path changes:
- Reorder modules: CSS visual (selectors, colors, typography) first,
  then layout (flexbox, grid), then HTML structure last
- Add intro lessons on CSS property syntax before selectors
- Add Figure module (images with captions)
- Remove Progress/Meter module (too niche)
- Reduce Tables from 3 to 1 lesson
- Reduce Form Validation from 3 to 1 lesson
- Rename "CSS Selectors" module to "CSS Basics"

Animation improvements:
- Change success text to "Your CODE looks CRISPY!"
- Increase animation duration to 3s
- Fix Firefox glow: use linear-gradient pulse instead of conic rotation
- Fix expected result toggle: match padding to prevent layout jump

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-14 01:30:19 +01:00
2a96ba9d00 feat: bigger border (6px), colorful conic glow, reduced padding
- Border increased from 4px to 6px
- Glow layer uses same conic-gradient with 20px blur
- Reduced preview-frame padding to compensate
- Higher glow opacity (0.8) for more vibrant effect
2026-01-13 21:29:19 +01:00
8b3b9ddde5 fix: thicker border (4px) and add transparent border by default
- preview-wrapper now has 4px transparent border by default
- No layout jump when animation activates
- Larger glow layer for better effect
2026-01-13 21:27:59 +01:00
1ec3f34eac feat: implement rotating gradient border using @property technique
Based on https://codetv.dev/blog/animated-css-gradient-border
- Uses @property for smooth angle interpolation
- Two backgrounds: padding-box + border-box approach
- Blurred glow layer synced with border rotation
- Works in Chrome, Safari, Edge (not Firefox)
2026-01-13 21:26:18 +01:00
83e6c12b9a fix: simplify rotating border with proper z-index and drop-shadow glow 2026-01-13 21:23:04 +01:00
1507bfc8eb fix: make gradient rotate anti-clockwise around border
Use transform: rotate(-360deg) to physically spin the conic-gradient
around the preview border. Two layers:
- Blurred glow layer (z-index: -2)
- Crisp border using mask-composite (z-index: -1)

The gradient colors (purple/magenta/cyan/violet) now visually travel
anti-clockwise around the border like Gemini's UI.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-13 21:17:52 +01:00
532faecc0a fix: use box-shadow animation for cross-browser compatibility
Previous implementation used CSS @property which isn't supported in
Firefox. New approach uses animated box-shadow with three layers:
- 3px solid border cycling through colors
- 15px inner glow
- 30px outer glow

Colors cycle: purple → magenta → cyan → violet → purple, then fade out.
Works in all modern browsers.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-13 21:15:50 +01:00
1d299eac43 feat: replace completion animation with Gemini-style rotating gradient glow
- Remove bouncing "CRISPY" text animation (dvd-bounce)
- Add rotating conic-gradient border with glow effect
- Colors: purple (#9b59b6), magenta (#e040fb), cyan (#00bcd4), violet (#7c4dff)
- Animation plays once (2.5s) then fades out so students can continue
- Update success colors from green to purple theme:
  - success-color: #9b6dd4
  - success-color-dark: #7c4dff
  - success-color-light: #c9b8e8
- Uses CSS @property for animating conic-gradient angle
- Two layers: blurred glow + crisp border using mask-composite

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-13 21:13:54 +01:00
98d4362706 refactor: rewrite CSS lessons with realistic real-world examples
- Box Model: profile cards, alerts, buttons instead of generic boxes
- Flexbox: navigation bars, headers, toolbars, card layouts
- Grid: photo gallery with SVG images, product cards, dashboard layout
- Colors: notification alerts, buttons, badges with visible changes
- Units/Variables: article width, brand variables, sidebar calc, hero vh
- Responsive: feature cards grid instead of numbered divs
- Added missing solutions to enable "Show Expected" feature
- Fixed barely visible border color change in colors lesson

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-13 21:11:41 +01:00
fb33930328 feat: restructure learning path with new modules and enhanced explanations
- Add CSS Colors, Typography, Advanced Selectors, and Grid modules
- Remove deprecated HTML Marquee module from all languages
- Remove redundant div & span lesson from HTML Block & Inline
- Move SVG module from HTML to CSS section
- Enhance first lessons with comprehensive explanations:
  - Flexbox: historical context, axes concept
  - Colors: named colors, background-color explained
  - Grid: comparison to Flexbox, key properties
- Swap header logo highlight (CRISPIES instead of CODE)
- Use English fallbacks for new modules in non-EN languages
- Fix test to include 'playground' mode

New path: 19 modules (~78 lessons) vs previous 16 modules (62 lessons)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-13 20:32:45 +01:00
391 changed files with 43089 additions and 7473 deletions

37
.claude/commands/wave.md Normal file
View File

@@ -0,0 +1,37 @@
---
description: Run Wave multi-agent pipelines
---
## User Input
```text
$ARGUMENTS
```
## Instructions
You are invoking the Wave multi-agent pipeline orchestrator. Parse the user's arguments to determine which subcommand to run.
### Subcommand Routing
Based on the arguments provided:
**If arguments start with "run"** (e.g., `/wave run impl-issue -- "fix bug"`):
- Execute: `wave run <remaining arguments>`
- Example: `wave run -v impl-issue -- "implement feature X"`
**If arguments start with "status"** (e.g., `/wave status`):
- Execute: `wave list runs --limit 10`
- Show the output to the user in a readable format
**If arguments start with "list"** (e.g., `/wave list`):
- Execute: `wave list pipelines`
- Show available pipelines to the user
**If arguments start with "logs"** (e.g., `/wave logs <run-id>`):
- Execute: `wave logs <run-id>`
- Show the pipeline run logs
**If no arguments or "help"**:
- Show available subcommands: run, status, list, logs
- Example usage for each subcommand

View File

@@ -1,15 +1,6 @@
{
"permissions": {
"allow": [
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git push:*)",
"Bash(npm run build:*)",
"Bash(grep:*)",
"Bash(npm run format.lessons:*)",
"Bash(xargs:*)",
"Bash(cat:*)",
"Bash(prettier --write:*)"
],
"deny": ["Read(./.env)", "Read(./.env.*)", "Read(./secrets/**)"]
},

95
.claude/wave-agent.md Normal file
View File

@@ -0,0 +1,95 @@
---
model: claude-haiku-4-5
disallowedTools:
- TodoWrite
permissionMode: bypassPermissions
---
# Wave Agent Protocol
You are operating within a Wave pipeline step.
## Operational Context
- **Fresh context**: You have no memory of prior steps. Each step starts clean.
- **Artifact I/O**: Read inputs from injected artifacts. Write outputs to artifact files.
- **Workspace isolation**: You are in an ephemeral worktree. Changes here do not affect the source repository directly.
- **Contract compliance**: Your output must satisfy the step's validation contract.
- **Permission enforcement**: Tool permissions are enforced by the orchestrator. Do not attempt to bypass restrictions listed below.
- **Real execution only**: Always use actual tool calls to execute commands. Never generate simulated or fabricated output.
- **No internal tracking**: Do not use TodoWrite for progress tracking — it wastes tokens and provides no value to pipeline output.
## Artifact Conventions
When reading artifacts from previous steps:
- Artifacts are injected into `.wave/artifacts/` with the name specified in the pipeline
- Read the artifact content to understand what the previous step produced
- Do not assume artifact structure — read and verify
- **Error handling**: If a required artifact is missing or empty, fail immediately with
a clear error message (e.g., "Required artifact 'findings' not found at .wave/artifacts/findings").
If a JSON artifact fails to parse, report the parse error and do not proceed with stale assumptions
When writing output artifacts:
- Write to the path specified in the step's `output_artifacts` configuration
- JSON artifacts must be valid JSON matching the contract schema if specified
- Markdown artifacts should be well-structured with clear sections
- Always write output before the step completes — missing artifacts fail the contract
Path conventions:
- `.wave/artifacts/` — injected artifacts from prior steps (read-only input)
- `.wave/output/` or the path from `output_artifacts` — your step's output files that contract validation checks
## Tool Usage
- Use the Edit tool for file modifications. Do NOT use perl, sed, or awk
- Use the Write tool for new files. Do NOT use cat heredocs or echo redirection
- Use the Read tool for reading files. Do NOT use cat, head, or tail
- Use the Grep tool for searching. Do NOT use grep or rg via Bash
- Do NOT push to remote — that happens in the create-pr step
- Do NOT include Co-Authored-By or AI attribution in commits
- Do NOT use GitHub closing keywords (`Closes #N`, `Fixes #N`, `Resolves #N`) in commit messages or PR bodies — use `Related to #N` instead. Closing keywords auto-close issues on merge, which causes false-positive closures when PRs only partially address an issue
These rules apply to both the main context AND any Task subagents you spawn.
## Template Variables Reference
Pipeline prompts may contain template variables that are resolved at runtime.
These are the available variables:
| Variable | Type | Description |
|----------|------|-------------|
| `{{ input }}` | string | CLI input passed to the pipeline via `wave run <pipeline> -- "<input>"` |
| `{{ pipeline_id }}` | string | Unique identifier for the current pipeline run |
| `{{ forge.cli_tool }}` | string | Git forge CLI tool name (`gh`, `glab`, `tea`, `bb`) |
| `{{ forge.pr_command }}` | string | Forge-specific PR subcommand (`pr`, `mr`, `pulls`) |
| `{{ project.test_command }}` | string | Project's test command (e.g., `go test ./...`) |
| `{{ project.build_command }}` | string | Project's build command (e.g., `go build ./...`) |
| `{{ project.skill }}` | string | Project's primary skill identifier |
Variables are resolved before the prompt is passed to the persona. Unresolved
variables (e.g., typos) are detected by contract validation and cause step failure.
## Inter-Step Communication
- Each step receives only the artifacts explicitly injected via `inject_artifacts`
- You cannot access outputs from steps that are not listed as dependencies
- Your output artifacts will be available to downstream steps that depend on you
- Keep artifact content focused and machine-parseable where possible
---
#
You are operating as the persona.
---
## Restrictions
The following restrictions are enforced by the pipeline orchestrator.
### Denied Tools
- `TodoWrite`

15
.dockerignore Normal file
View File

@@ -0,0 +1,15 @@
node_modules
dist
coverage
.env
.env.*
!.env.example
.git
.github
.idea
.vscode
.direnv
.wave
.claude
.navi
*.log

5
.env.example Normal file
View File

@@ -0,0 +1,5 @@
# Build-time secrets for Vite (baked into static bundle).
# Copy to .env (gitignored). Used by docker compose build via args.
VITE_SUPABASE_URL=https://<your-project>.supabase.co
VITE_SUPABASE_ANON_KEY=<anon-key>

37
.gitea/workflows/ci.yml Normal file
View File

@@ -0,0 +1,37 @@
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
ci:
runs-on: ubuntu-latest
container:
image: git.librete.ch/public/runner-image:v0.1.0@sha256:9d1e204fe8e06b7d16cdc8da0c7077fa4171daef62099cc8c09993834e576ca5
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- name: Cache npm
uses: actions/cache@v4
with:
path: ~/.npm
key: npm-${{ hashFiles('package-lock.json') }}
restore-keys: npm-
- name: Install
run: npm ci --no-audit --no-fund
- name: Test
run: npm test
- name: Build (sanity)
env:
# Build needs VITE_* injected at compile time. Use placeholders
# for CI sanity build — real values are passed at deploy time.
VITE_SUPABASE_URL: https://example.invalid
VITE_SUPABASE_ANON_KEY: ci-placeholder
run: npm run build

View File

@@ -0,0 +1,89 @@
name: Deploy
on:
push:
branches: [main]
tags: ["v*"]
# Required repository secrets:
# REGISTRY git.librete.ch
# REGISTRY_USER libretech (user-namespace packages — bot can't push)
# REGISTRY_PASS libretech-user PAT scoped write:package
# DEPLOY_HOST root@cloud.librete.ch
# DEPLOY_KEY passphrase-less private key on netcup root authorized_keys
# DEPLOY_PATH /srv/cc
# HEALTH_URL https://cc.cloud.librete.ch/
# VITE_SUPABASE_URL public; baked at build time
# VITE_SUPABASE_ANON_KEY public-by-design supabase anon key; baked at build time
#
# Required repository variable:
# DEPLOY_ENABLED "true" to enable
#
# Image: git.librete.ch/public/code-crispies
# main pushes → :main + :sha-<short>
# tag pushes → :<tag> + :latest
jobs:
deploy:
runs-on: ubuntu-latest
container:
image: git.librete.ch/public/runner-image:v0.1.0@sha256:9d1e204fe8e06b7d16cdc8da0c7077fa4171daef62099cc8c09993834e576ca5
timeout-minutes: 20
if: ${{ vars.DEPLOY_ENABLED == 'true' }}
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ${{ secrets.REGISTRY }}
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_PASS }}
- id: meta
uses: docker/metadata-action@v5
with:
images: ${{ secrets.REGISTRY }}/public/code-crispies
tags: |
type=ref,event=branch
type=ref,event=tag
type=sha,format=short
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}
- uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
VITE_SUPABASE_URL=${{ secrets.VITE_SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY=${{ secrets.VITE_SUPABASE_ANON_KEY }}
- name: Deploy to host
env:
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }}
HEALTH_URL: ${{ secrets.HEALTH_URL }}
run: |
mkdir -p ~/.ssh && chmod 700 ~/.ssh
printf '%s\n' "$DEPLOY_KEY" > ~/.ssh/id_deploy
chmod 600 ~/.ssh/id_deploy
ssh -i ~/.ssh/id_deploy \
-o StrictHostKeyChecking=accept-new \
"$DEPLOY_HOST" \
"set -e
cd '$DEPLOY_PATH'
git pull --ff-only
docker compose pull
docker compose up -d --remove-orphans"
# Wait up to 60s for the cc vhost to return a 200.
for i in $(seq 1 12); do
curl -fsS "$HEALTH_URL" >/dev/null && exit 0
sleep 5
done
echo "deploy health check failed"; exit 1

16
.gitignore vendored
View File

@@ -3,6 +3,20 @@
node_modules
dist
coverage
.env
.env.local
# Claude Code local settings (user-specific)
.claude/settings.local.json
.claude/settings.local.json
.claude_settings.json
# Auto-Claude
.auto-claude
.worktrees
# Wave ephemeral data
.wave/workspaces
.wave/traces
.wave/artifacts
.wave/output
.wave/state.db

5
.wave/.onboarded Normal file
View File

@@ -0,0 +1,5 @@
{
"completed": true,
"completed_at": "2026-03-28T12:38:49.56259042+01:00",
"version": 1
}

0
.wave/.ontology-stale Normal file
View File

View File

@@ -0,0 +1,44 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ADR Context",
"description": "Contextual information gathered for an Architecture Decision Record",
"type": "object",
"required": ["decision_topic", "current_state", "constraints", "timestamp"],
"properties": {
"decision_topic": { "type": "string", "minLength": 5 },
"current_state": {
"type": "object",
"required": ["description"],
"properties": {
"description": { "type": "string", "minLength": 10 },
"affected_files": { "type": "array", "items": { "type": "string" } },
"affected_components": { "type": "array", "items": { "type": "string" } }
}
},
"constraints": {
"type": "array",
"items": {
"type": "object",
"required": ["type", "description"],
"properties": {
"type": { "type": "string", "enum": ["technical", "organizational", "timeline"] },
"description": { "type": "string", "minLength": 5 }
}
}
},
"precedents": {
"type": "array",
"items": {
"type": "object",
"required": ["description"],
"properties": {
"description": { "type": "string" },
"location": { "type": "string" },
"outcome": { "type": "string" }
}
}
},
"stakeholders": { "type": "array", "items": { "type": "string" } },
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,38 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ADR Options Analysis",
"description": "Analysis of options for an architectural decision",
"type": "object",
"required": ["decision_topic", "options", "recommendation", "timestamp"],
"properties": {
"decision_topic": { "type": "string", "minLength": 5 },
"options": {
"type": "array",
"minItems": 2,
"items": {
"type": "object",
"required": ["name", "description", "pros", "cons"],
"properties": {
"name": { "type": "string", "minLength": 1 },
"description": { "type": "string", "minLength": 10 },
"pros": { "type": "array", "items": { "type": "string" } },
"cons": { "type": "array", "items": { "type": "string" } },
"effort": { "type": "string", "enum": ["trivial", "small", "medium", "large", "epic"] },
"risk": { "type": "string", "enum": ["low", "medium", "high"] },
"reversibility": { "type": "string", "enum": ["easy", "moderate", "difficult", "irreversible"] },
"compatibility": { "type": "string", "enum": ["high", "medium", "low"] }
}
}
},
"recommendation": {
"type": "object",
"required": ["option", "rationale", "confidence"],
"properties": {
"option": { "type": "string", "minLength": 1 },
"rationale": { "type": "string", "minLength": 20 },
"confidence": { "type": "string", "enum": ["high", "medium", "low"] }
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,60 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Speckit Analysis Report",
"description": "Cross-artifact consistency and quality analysis report before implementation.",
"type": "object",
"required": ["total_requirements", "total_tasks", "coverage_percent", "can_proceed", "feature_dir", "summary"],
"properties": {
"total_requirements": {
"type": "integer",
"description": "Total number of requirements extracted from spec"
},
"total_tasks": {
"type": "integer",
"description": "Total number of tasks in the task breakdown"
},
"coverage_percent": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Percentage of requirements covered by tasks (0-100)"
},
"can_proceed": {
"type": "boolean",
"description": "Whether the feature is ready for implementation"
},
"feature_dir": {
"type": "string",
"minLength": 1,
"description": "Path to the feature directory"
},
"summary": {
"type": "string",
"minLength": 1,
"description": "Brief summary of the analysis findings"
},
"issues": {
"type": "object",
"properties": {
"critical": {
"type": "integer",
"description": "Number of critical severity issues"
},
"high": {
"type": "integer",
"description": "Number of high severity issues"
},
"medium": {
"type": "integer",
"description": "Number of medium severity issues"
},
"low": {
"type": "integer",
"description": "Number of low severity issues"
}
},
"description": "Issue counts grouped by severity level"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,84 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Audit Findings",
"description": "Output from the audit-items step: per-item fidelity classification with evidence",
"type": "object",
"required": ["findings", "summary", "timestamp"],
"properties": {
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["item_number", "item_type", "item_url", "title", "category", "evidence"],
"properties": {
"item_number": {
"type": "integer",
"minimum": 1,
"description": "Source issue or PR number"
},
"item_type": {
"type": "string",
"enum": ["issue", "pr"],
"description": "Whether the source item is an issue or PR"
},
"item_url": {
"type": "string",
"description": "Full GitHub URL for reference"
},
"title": {
"type": "string",
"minLength": 1,
"description": "Item title for readability"
},
"category": {
"type": "string",
"enum": ["verified", "partial", "regressed", "obsolete", "unverifiable"],
"description": "Fidelity classification"
},
"evidence": {
"type": "array",
"items": { "type": "string" },
"description": "File paths, code references, and commit SHAs supporting the classification"
},
"unmet_criteria": {
"type": "array",
"items": { "type": "string" },
"description": "Specific acceptance criteria not satisfied (for partial/regressed)"
},
"remediation": {
"type": "string",
"description": "Actionable description of what needs to change (empty for verified/obsolete)"
}
}
},
"description": "Per-item audit findings"
},
"summary": {
"type": "object",
"required": ["total_audited"],
"properties": {
"total_audited": {
"type": "integer",
"minimum": 0,
"description": "Total number of items audited"
},
"by_category": {
"type": "object",
"properties": {
"verified": { "type": "integer", "minimum": 0 },
"partial": { "type": "integer", "minimum": 0 },
"regressed": { "type": "integer", "minimum": 0 },
"obsolete": { "type": "integer", "minimum": 0 },
"unverifiable": { "type": "integer", "minimum": 0 }
},
"description": "Count of findings per fidelity category"
}
}
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When the audit was performed"
}
}
}

View File

@@ -0,0 +1,116 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Audit Inventory",
"description": "Output from the collect-inventory step: all closed issues and merged PRs with extracted metadata",
"type": "object",
"required": ["scope", "items", "timestamp"],
"properties": {
"scope": {
"type": "object",
"required": ["mode"],
"properties": {
"mode": {
"type": "string",
"enum": ["full", "time_range", "label"],
"description": "How the inventory was scoped"
},
"filter": {
"type": "string",
"description": "The filter expression applied (e.g., 'last 30 days', 'label:enhancement')"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Repository full name (owner/repo)"
}
}
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": ["number", "type", "title", "url", "close_reason", "closed_at"],
"properties": {
"number": {
"type": "integer",
"minimum": 1,
"description": "GitHub issue or PR number"
},
"type": {
"type": "string",
"enum": ["issue", "pr"],
"description": "Whether this is an issue or pull request"
},
"title": {
"type": "string",
"minLength": 1,
"description": "Issue or PR title"
},
"url": {
"type": "string",
"description": "Full GitHub URL"
},
"body": {
"type": "string",
"description": "Full issue/PR body text"
},
"labels": {
"type": "array",
"items": { "type": "string" },
"description": "Associated labels"
},
"close_reason": {
"type": "string",
"description": "Why the item was closed (completed, merged, not_planned)"
},
"closed_at": {
"type": "string",
"format": "date-time",
"description": "When the item was closed"
},
"linked_prs": {
"type": "array",
"items": { "type": "integer" },
"description": "PR numbers linked to this issue"
},
"linked_commits": {
"type": "array",
"items": { "type": "string" },
"description": "Commit SHAs associated with this item"
},
"acceptance_criteria": {
"type": "array",
"items": { "type": "string" },
"description": "Extracted acceptance criteria from the body"
}
}
},
"description": "All inventory items to audit"
},
"summary": {
"type": "object",
"properties": {
"total_issues": {
"type": "integer",
"minimum": 0,
"description": "Number of closed issues in inventory"
},
"total_prs": {
"type": "integer",
"minimum": 0,
"description": "Number of merged PRs in inventory"
},
"excluded_not_planned": {
"type": "integer",
"minimum": 0,
"description": "Number of issues excluded due to not_planned close reason"
}
}
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When the inventory was collected"
}
}
}

View File

@@ -0,0 +1,80 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Audit Publish Result",
"description": "Output from the publish step: GitHub issue creation results for actionable findings",
"type": "object",
"required": ["success", "repository", "timestamp"],
"properties": {
"success": {
"type": "boolean",
"description": "Whether the publish operation completed successfully"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Repository full name (owner/repo)"
},
"issues_created": {
"type": "array",
"items": {
"type": "object",
"required": ["number", "url", "source_item", "category"],
"properties": {
"number": {
"type": "integer",
"minimum": 1,
"description": "Created GitHub issue number"
},
"url": {
"type": "string",
"description": "URL to the created issue"
},
"source_item": {
"type": "integer",
"minimum": 1,
"description": "Original issue/PR number that this finding references"
},
"category": {
"type": "string",
"enum": ["partial", "regressed"],
"description": "Fidelity category of the finding"
}
}
},
"description": "List of GitHub issues created for fixable gaps"
},
"issues_skipped": {
"type": "integer",
"minimum": 0,
"description": "Number of findings skipped (verified, obsolete, unverifiable, or no remediation)"
},
"skipped": {
"type": "boolean",
"description": "True if no issues were created because all findings are verified/obsolete"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": ["authentication_failed", "rate_limit_exceeded", "permission_denied", "network_error", "api_error", "unknown_error"],
"description": "Error code"
},
"message": {
"type": "string",
"description": "Human-readable error message"
},
"retryable": {
"type": "boolean",
"description": "Whether the operation can be retried"
}
},
"description": "Error details (only present if success=false)"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "Operation timestamp"
}
}
}

View File

@@ -0,0 +1,133 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Audit Triage Report",
"description": "Output from the compose-triage step: aggregated findings with prioritized action list",
"type": "object",
"required": ["metadata", "summary", "findings", "prioritized_actions"],
"properties": {
"metadata": {
"type": "object",
"required": ["scope", "timestamp", "repository", "total_items_audited"],
"properties": {
"scope": {
"type": "string",
"description": "Audit scope description (e.g., 'full', 'last 30 days', 'label:enhancement')"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When the triage report was composed"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Repository full name (owner/repo)"
},
"total_items_audited": {
"type": "integer",
"minimum": 0,
"description": "Total number of items that were audited"
}
}
},
"summary": {
"type": "object",
"required": ["verified", "partial", "regressed", "obsolete", "unverifiable"],
"properties": {
"verified": {
"type": "integer",
"minimum": 0,
"description": "Items fully implemented and intact"
},
"partial": {
"type": "integer",
"minimum": 0,
"description": "Items with some acceptance criteria unmet"
},
"regressed": {
"type": "integer",
"minimum": 0,
"description": "Items that were implemented but later broken"
},
"obsolete": {
"type": "integer",
"minimum": 0,
"description": "Items no longer applicable to current codebase"
},
"unverifiable": {
"type": "integer",
"minimum": 0,
"description": "Items with no traceable implementation artifacts"
}
}
},
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["item_number", "item_type", "item_url", "title", "category", "evidence"],
"properties": {
"item_number": {
"type": "integer",
"minimum": 1,
"description": "Source issue or PR number"
},
"item_type": {
"type": "string",
"enum": ["issue", "pr"],
"description": "Whether the source item is an issue or PR"
},
"item_url": {
"type": "string",
"description": "Full GitHub URL"
},
"title": {
"type": "string",
"minLength": 1,
"description": "Item title"
},
"category": {
"type": "string",
"enum": ["verified", "partial", "regressed", "obsolete", "unverifiable"],
"description": "Fidelity classification"
},
"evidence": {
"type": "array",
"items": { "type": "string" },
"description": "Supporting evidence (file paths, code refs, commit SHAs)"
},
"remediation": {
"type": "string",
"description": "Actionable fix description"
}
}
},
"description": "All findings grouped by category (regressed first, then partial, then unverifiable, then obsolete, then verified)"
},
"prioritized_actions": {
"type": "array",
"items": {
"type": "object",
"required": ["priority", "item_number", "action_description"],
"properties": {
"priority": {
"type": "integer",
"minimum": 1,
"description": "Priority rank (1 = highest)"
},
"item_number": {
"type": "integer",
"minimum": 1,
"description": "Source issue or PR number"
},
"action_description": {
"type": "string",
"minLength": 1,
"description": "What needs to be done to resolve this finding"
}
}
},
"description": "Prioritized list of remediation actions (regressed first, then partial)"
}
}
}

View File

@@ -0,0 +1,69 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Bootstrap Project Assessment",
"type": "object",
"required": ["flavour", "project_intent", "existing_files", "scaffold_recommendations"],
"properties": {
"flavour": {
"type": "string",
"description": "Detected or configured project language/framework (e.g. go, rust, node, bun, python, csharp)"
},
"project_intent": {
"type": "string",
"description": "Description of the project's purpose derived from user input, README, or design docs"
},
"existing_files": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of files already present in the project directory"
},
"scaffold_recommendations": {
"type": "object",
"required": ["files_to_create", "build_system", "ci_provider"],
"properties": {
"files_to_create": {
"type": "array",
"items": {
"type": "string"
},
"description": "Recommended files to scaffold for this flavour"
},
"build_system": {
"type": "string",
"description": "Recommended build system (e.g. cargo, go, npm, bun, pip, dotnet)"
},
"ci_provider": {
"type": "string",
"description": "CI provider to generate config for (e.g. github-actions)"
},
"gitignore_patterns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Patterns to include in .gitignore"
}
}
},
"wave_config": {
"type": "object",
"properties": {
"language": {
"type": "string",
"description": "Value of project.language from wave.yaml if set"
},
"build_command": {
"type": "string",
"description": "Value of project.build_command from wave.yaml if set"
},
"test_command": {
"type": "string",
"description": "Value of project.test_command from wave.yaml if set"
}
},
"description": "Relevant configuration from wave.yaml"
}
}
}

View File

@@ -0,0 +1,55 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Categorized Changelog Changes",
"description": "Categorized and described changes for changelog generation",
"type": "object",
"required": ["version_label", "sections", "timestamp"],
"properties": {
"version_label": { "type": "string", "minLength": 1 },
"breaking_changes": {
"type": "array",
"items": {
"type": "object",
"required": ["description"],
"properties": {
"description": { "type": "string" },
"migration": { "type": "string" },
"related_commits": { "type": "array", "items": { "type": "string" } }
}
}
},
"sections": {
"type": "array",
"items": {
"type": "object",
"required": ["title", "type", "entries"],
"properties": {
"title": { "type": "string" },
"type": { "type": "string" },
"entries": {
"type": "array",
"items": {
"type": "object",
"required": ["description"],
"properties": {
"description": { "type": "string" },
"scope": { "type": "string" },
"commits": { "type": "array", "items": { "type": "string" } },
"notable": { "type": "boolean" }
}
}
}
}
}
},
"contributors": { "type": "array", "items": { "type": "string" } },
"stats": {
"type": "object",
"properties": {
"total_entries": { "type": "integer" },
"notable_entries": { "type": "integer" }
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,36 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Speckit Checklist Status",
"description": "Status report from the checklist step: quality checklist generation for requirement validation.",
"type": "object",
"required": ["checklist_files", "total_items", "feature_dir", "summary"],
"properties": {
"checklist_files": {
"type": "array",
"items": {
"type": "string"
},
"description": "Paths to generated checklist files"
},
"total_items": {
"type": "integer",
"minimum": 0,
"description": "Total number of checklist items across all files"
},
"feature_dir": {
"type": "string",
"minLength": 1,
"description": "Path to the feature directory"
},
"summary": {
"type": "string",
"minLength": 1,
"description": "Brief description of the checklists generated"
},
"critical_gaps": {
"type": "integer",
"description": "Number of critical quality gaps identified"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,30 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Speckit Clarify Status",
"description": "Status report from the clarify step: ambiguity resolution and spec refinement.",
"type": "object",
"required": ["questions_asked", "answers_encoded", "feature_dir", "summary"],
"properties": {
"questions_asked": {
"type": "integer",
"minimum": 0,
"description": "Number of clarification questions identified"
},
"answers_encoded": {
"type": "integer",
"minimum": 0,
"description": "Number of clarifications resolved and encoded into the spec"
},
"feature_dir": {
"type": "string",
"minLength": 1,
"description": "Path to the feature directory"
},
"summary": {
"type": "string",
"minLength": 1,
"description": "Brief description of clarifications made"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,84 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub Comment Result",
"description": "Result of posting research report as a GitHub issue comment",
"type": "object",
"required": ["success", "issue_reference", "timestamp"],
"properties": {
"success": {
"type": "boolean",
"description": "Whether the comment was successfully posted"
},
"issue_reference": {
"type": "object",
"required": ["issue_number", "repository"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1,
"description": "Issue number that was commented on"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Repository full name"
},
"issue_url": {
"type": "string",
"format": "uri",
"description": "URL to the issue"
}
}
},
"comment": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1,
"description": "GitHub comment ID"
},
"url": {
"type": "string",
"format": "uri",
"description": "Direct URL to the posted comment"
},
"body_length": {
"type": "integer",
"minimum": 0,
"description": "Length of the posted comment body in characters"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the comment was created"
}
},
"description": "Details of the posted comment (only present if success=true)"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": ["authentication_failed", "rate_limit_exceeded", "issue_not_found", "issue_locked", "permission_denied", "comment_too_long", "network_error", "api_error", "unknown_error"],
"description": "Error code"
},
"message": {
"type": "string",
"description": "Human-readable error message"
},
"retryable": {
"type": "boolean",
"description": "Whether the operation can be retried"
}
},
"description": "Error details (only present if success=false)"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "Operation timestamp"
}
}
}

View File

@@ -0,0 +1,53 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Commit Analysis",
"description": "Structured analysis of git commits for changelog generation",
"type": "object",
"required": ["range", "commits", "summary", "timestamp"],
"properties": {
"range": {
"type": "object",
"required": ["from", "to", "total_commits"],
"properties": {
"from": { "type": "string", "minLength": 1 },
"to": { "type": "string", "minLength": 1 },
"total_commits": { "type": "integer", "minimum": 0 },
"date_range": {
"type": "object",
"properties": {
"start": { "type": "string" },
"end": { "type": "string" }
}
}
}
},
"commits": {
"type": "array",
"items": {
"type": "object",
"required": ["hash", "date", "type", "subject"],
"properties": {
"hash": { "type": "string", "minLength": 4 },
"author": { "type": "string" },
"date": { "type": "string" },
"type": { "type": "string", "enum": ["feat", "fix", "docs", "refactor", "test", "chore", "perf", "ci", "other"] },
"scope": { "type": ["string", "null"] },
"subject": { "type": "string", "minLength": 1 },
"breaking": { "type": "boolean" },
"breaking_note": { "type": "string" }
}
}
},
"summary": {
"type": "object",
"required": ["by_type"],
"properties": {
"by_type": { "type": "object" },
"breaking_changes": { "type": "integer", "minimum": 0 },
"contributors": { "type": "array", "items": { "type": "string" } },
"most_changed_scopes": { "type": "array", "items": { "type": "string" } }
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,81 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Convergent Proposals",
"description": "Prioritized simplification proposals from convergent thinking phase",
"type": "object",
"required": ["source_findings", "validation_summary", "proposals", "timestamp"],
"properties": {
"source_findings": {
"type": "object",
"required": ["total_reviewed", "confirmed", "partially_confirmed", "rejected"],
"properties": {
"total_reviewed": { "type": "integer" },
"confirmed": { "type": "integer" },
"partially_confirmed": { "type": "integer" },
"rejected": { "type": "integer" },
"rejection_reasons": {
"type": "array",
"items": {
"type": "object",
"required": ["finding_id", "reason"],
"properties": {
"finding_id": { "type": "string" },
"reason": { "type": "string" }
}
}
}
}
},
"validation_summary": {
"type": "string",
"description": "Narrative summary of the converge→diverge→converge validation process"
},
"proposals": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "title", "description", "source_findings", "impact", "effort", "risk", "tier", "files"],
"properties": {
"id": { "type": "string", "pattern": "^SMP-\\d{3}$" },
"title": { "type": "string" },
"description": { "type": "string" },
"source_findings": {
"type": "array",
"items": { "type": "string" },
"description": "DVG-xxx IDs this proposal addresses"
},
"impact": { "type": "string", "enum": ["high", "medium", "low"] },
"effort": { "type": "string", "enum": ["small", "medium", "large"] },
"risk": { "type": "string", "enum": ["low", "medium", "high"] },
"tier": {
"type": "integer",
"minimum": 1,
"maximum": 3,
"description": "Priority tier: 1=do now, 2=do next, 3=consider later"
},
"files": {
"type": "array",
"items": { "type": "string" },
"description": "Files that would be modified"
},
"dependencies": {
"type": "array",
"items": { "type": "string" },
"description": "SMP-xxx IDs that must be applied first"
},
"lines_removed_estimate": { "type": "integer" },
"second_order_effects": {
"type": "array",
"items": { "type": "string" },
"description": "Insights discovered during deeper probing"
}
}
}
},
"eighty_twenty_analysis": {
"type": "string",
"description": "Which 20% of proposals yield 80% of the simplification benefit"
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,24 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["current_coverage", "uncovered_functions", "uncovered_branches", "edge_cases", "mock_requirements"],
"properties": {
"current_coverage": { "type": "string" },
"uncovered_functions": {
"type": "array",
"items": { "type": "string" }
},
"uncovered_branches": {
"type": "array",
"items": { "type": "string" }
},
"edge_cases": {
"type": "array",
"items": { "type": "string" }
},
"mock_requirements": {
"type": "array",
"items": { "type": "string" }
}
}
}

View File

@@ -0,0 +1,71 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Dead Code Issue Result",
"description": "Output from the create-issue step: GitHub issue creation result for dead code findings",
"type": "object",
"required": ["success", "repository", "timestamp"],
"properties": {
"success": {
"type": "boolean",
"description": "Whether the issue was successfully created"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Repository full name (owner/repo)"
},
"issue": {
"type": "object",
"properties": {
"number": {
"type": "integer",
"minimum": 1,
"description": "GitHub issue number"
},
"url": {
"type": "string",
"format": "uri",
"description": "URL to the created issue"
},
"title": {
"type": "string",
"description": "Issue title"
},
"finding_count": {
"type": "integer",
"minimum": 0,
"description": "Number of dead code findings reported in the issue"
}
},
"description": "Details of the created issue (only present if success=true)"
},
"skipped": {
"type": "boolean",
"description": "True if no issue was created because no findings were found"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": ["authentication_failed", "rate_limit_exceeded", "permission_denied", "network_error", "api_error", "unknown_error"],
"description": "Error code"
},
"message": {
"type": "string",
"description": "Human-readable error message"
},
"retryable": {
"type": "boolean",
"description": "Whether the operation can be retried"
}
},
"description": "Error details (only present if success=false)"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "Operation timestamp"
}
}
}

View File

@@ -0,0 +1,47 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Dead Code Scan",
"description": "Scan results for dead or redundant code",
"type": "object",
"required": ["target", "findings", "summary", "timestamp"],
"properties": {
"target": { "type": "string", "minLength": 1 },
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "type", "location", "description", "confidence", "safe_to_remove"],
"properties": {
"id": { "type": "string", "pattern": "^DC-[0-9]{1,4}$" },
"type": {
"type": "string",
"enum": ["unused_export", "unreachable", "orphaned_file", "redundant", "stale_test", "unused_import", "commented_code", "duplicate_signature"]
},
"location": { "type": "string", "minLength": 1 },
"symbol": { "type": "string" },
"description": { "type": "string", "minLength": 5 },
"evidence": { "type": "string" },
"confidence": { "type": "string", "enum": ["high", "medium", "low"] },
"safe_to_remove": { "type": "boolean" },
"removal_note": { "type": "string" },
"suggested_action": {
"type": "string",
"enum": ["remove", "consolidate", "investigate"],
"description": "Recommended action for this finding"
}
}
}
},
"summary": {
"type": "object",
"required": ["total_findings"],
"properties": {
"total_findings": { "type": "integer", "minimum": 0 },
"by_type": { "type": "object" },
"high_confidence_count": { "type": "integer", "minimum": 0 },
"estimated_lines_removable": { "type": "integer", "minimum": 0 }
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,48 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["verdict", "items_removed", "items_skipped", "lines_removed", "test_status", "summary"],
"properties": {
"verdict": {
"type": "string",
"const": "CLEAN",
"description": "Must be CLEAN for the pipeline to proceed. Output NEEDS_REVIEW to intentionally fail contract validation and halt the pipeline."
},
"items_removed": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "description", "justification"],
"properties": {
"id": { "type": "string" },
"description": { "type": "string" },
"justification": { "type": "string" }
}
}
},
"items_skipped": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "description", "reason"],
"properties": {
"id": { "type": "string" },
"description": { "type": "string" },
"reason": { "type": "string" }
}
}
},
"lines_removed": {
"type": "integer",
"minimum": 0
},
"test_status": {
"type": "string",
"enum": ["passing", "failing", "not_run"]
},
"summary": {
"type": "string",
"description": "Human-readable summary of the verification"
}
}
}

View File

@@ -0,0 +1,22 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["hypotheses"],
"properties": {
"hypotheses": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["id", "description", "likelihood", "test_approach"],
"properties": {
"id": { "type": "integer" },
"description": { "type": "string", "minLength": 1 },
"likelihood": { "type": "string", "enum": ["high", "medium", "low"] },
"test_approach": { "type": "string", "minLength": 1 },
"expected_result_if_true": { "type": "string" }
}
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["expected_behavior", "actual_behavior", "reproduction_steps", "relevant_files"],
"properties": {
"expected_behavior": { "type": "string", "minLength": 1 },
"actual_behavior": { "type": "string", "minLength": 1 },
"reproduction_steps": {
"type": "array",
"items": { "type": "string" }
},
"relevant_files": {
"type": "array",
"items": { "type": "string" }
},
"environmental_factors": {
"type": "array",
"items": { "type": "string" }
}
}
}

View File

@@ -0,0 +1,41 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["pr_metadata", "files_changed", "modules_affected", "related_tests", "breaking_changes"],
"properties": {
"pr_metadata": {
"type": "object",
"required": ["number", "url", "head_branch", "base_branch"],
"properties": {
"number": { "type": "integer", "description": "PR number" },
"url": { "type": "string", "description": "Full PR URL" },
"head_branch": { "type": "string", "description": "Source branch name" },
"base_branch": { "type": "string", "description": "Target branch name" }
}
},
"files_changed": {
"type": "array",
"items": {
"type": "object",
"required": ["path", "change_type", "purpose"],
"properties": {
"path": { "type": "string" },
"change_type": { "type": "string", "enum": ["added", "modified", "deleted"] },
"purpose": { "type": "string" }
}
}
},
"modules_affected": {
"type": "array",
"items": { "type": "string" }
},
"related_tests": {
"type": "array",
"items": { "type": "string" }
},
"breaking_changes": {
"type": "array",
"items": { "type": "string" }
}
}
}

View File

@@ -0,0 +1,82 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Divergent Findings",
"description": "Broad-net findings from divergent thinking phase of the recinq pipeline",
"type": "object",
"required": ["scope", "findings", "metrics_summary", "timestamp"],
"properties": {
"scope": {
"type": "object",
"required": ["target", "files_scanned", "total_lines"],
"properties": {
"target": { "type": "string", "description": "What was analyzed (path, module, or 'whole-project')" },
"files_scanned": { "type": "integer" },
"total_lines": { "type": "integer" }
}
},
"findings": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["id", "category", "title", "description", "evidence", "severity"],
"properties": {
"id": { "type": "string", "pattern": "^DVG-\\d{3}$" },
"category": {
"type": "string",
"enum": [
"premature_abstraction",
"unnecessary_indirection",
"overengineering",
"yagni_violation",
"accidental_complexity",
"copy_paste_drift",
"dead_weight",
"naming_lie",
"dependency_gravity",
"missing_abstraction",
"other"
]
},
"title": { "type": "string" },
"description": { "type": "string" },
"evidence": {
"type": "object",
"required": ["files"],
"properties": {
"files": { "type": "array", "items": { "type": "string" } },
"line_count": { "type": "integer" },
"reference_count": { "type": "integer" },
"change_frequency": { "type": "integer" },
"metrics": { "type": "string" }
}
},
"severity": {
"type": "string",
"enum": ["critical", "high", "medium", "low"]
},
"confidence": {
"type": "string",
"enum": ["high", "medium", "low"],
"description": "How confident the provocateur is in this finding"
}
}
}
},
"metrics_summary": {
"type": "object",
"required": ["total_findings"],
"properties": {
"total_findings": { "type": "integer" },
"by_category": { "type": "object", "additionalProperties": { "type": "integer" } },
"by_severity": { "type": "object", "additionalProperties": { "type": "integer" } },
"hotspot_files": {
"type": "array",
"items": { "type": "string" },
"description": "Files appearing in multiple findings"
}
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,87 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Documentation Consistency Report",
"description": "Output from the analyze-consistency step: list of inconsistencies between code and documentation",
"type": "object",
"required": ["summary", "inconsistencies", "timestamp"],
"properties": {
"summary": {
"type": "object",
"required": ["total_count", "by_severity"],
"properties": {
"total_count": {
"type": "integer",
"minimum": 0,
"description": "Total number of inconsistencies found"
},
"by_severity": {
"type": "object",
"properties": {
"critical": { "type": "integer", "minimum": 0 },
"high": { "type": "integer", "minimum": 0 },
"medium": { "type": "integer", "minimum": 0 },
"low": { "type": "integer", "minimum": 0 }
},
"description": "Count of inconsistencies by severity level"
},
"clean": {
"type": "boolean",
"description": "True if no inconsistencies were found"
}
}
},
"inconsistencies": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "severity", "category", "title", "description", "source_location", "doc_location"],
"properties": {
"id": {
"type": "string",
"pattern": "^DOC-[0-9]{1,4}$",
"description": "Unique inconsistency ID (DOC-001, DOC-002, etc.)"
},
"severity": {
"type": "string",
"enum": ["critical", "high", "medium", "low"],
"description": "Severity of the inconsistency"
},
"category": {
"type": "string",
"enum": ["cli_flags", "personas", "pipelines", "contracts", "env_vars", "api", "stale_reference", "missing_docs", "other"],
"description": "Category of the inconsistency"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Short title describing the inconsistency"
},
"description": {
"type": "string",
"minLength": 1,
"description": "Detailed description of the inconsistency and what needs to change"
},
"source_location": {
"type": "string",
"description": "File and line where the source of truth is (code, pipeline, etc.)"
},
"doc_location": {
"type": "string",
"description": "File and section where the documentation is stale or missing"
},
"fix_description": {
"type": "string",
"description": "What specifically needs to be updated"
}
}
},
"description": "List of documentation inconsistencies"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When the analysis was performed"
}
}
}

View File

@@ -0,0 +1,38 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Doc Fix Scan Results",
"description": "Documentation inconsistency scan for doc-fix pipeline",
"type": "object",
"required": ["scan_scope", "findings", "summary", "timestamp"],
"properties": {
"scan_scope": { "type": "string", "minLength": 1 },
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "type", "severity", "title", "description"],
"properties": {
"id": { "type": "string", "pattern": "^DOC-[0-9]{1,4}$" },
"type": { "type": "string", "enum": ["MISSING_DOCS", "STALE_DOCS", "INACCURATE", "INCOMPLETE"] },
"severity": { "type": "string", "enum": ["CRITICAL", "HIGH", "MEDIUM", "LOW"] },
"title": { "type": "string", "minLength": 3 },
"doc_location": { "type": "string" },
"code_location": { "type": "string" },
"description": { "type": "string", "minLength": 10 },
"suggested_fix": { "type": "string" }
}
}
},
"summary": {
"type": "object",
"required": ["total_findings"],
"properties": {
"total_findings": { "type": "integer", "minimum": 0 },
"by_type": { "type": "object" },
"by_severity": { "type": "object" },
"fixable_count": { "type": "integer", "minimum": 0 }
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,71 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Documentation Issue Result",
"description": "Output from the create-issue step: GitHub issue creation result",
"type": "object",
"required": ["success", "repository", "timestamp"],
"properties": {
"success": {
"type": "boolean",
"description": "Whether the issue was successfully created"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Repository full name (owner/repo)"
},
"issue": {
"type": "object",
"properties": {
"number": {
"type": "integer",
"minimum": 1,
"description": "GitHub issue number"
},
"url": {
"type": "string",
"format": "uri",
"description": "URL to the created issue"
},
"title": {
"type": "string",
"description": "Issue title"
},
"inconsistency_count": {
"type": "integer",
"minimum": 0,
"description": "Number of inconsistencies reported in the issue"
}
},
"description": "Details of the created issue (only present if success=true)"
},
"skipped": {
"type": "boolean",
"description": "True if no issue was created because no inconsistencies were found"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": ["authentication_failed", "rate_limit_exceeded", "permission_denied", "network_error", "api_error", "unknown_error"],
"description": "Error code"
},
"message": {
"type": "string",
"description": "Human-readable error message"
},
"retryable": {
"type": "boolean",
"description": "Whether the operation can be retried"
}
},
"description": "Error details (only present if success=false)"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "Operation timestamp"
}
}
}

View File

@@ -0,0 +1,112 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Documentation Scan Results",
"description": "Output from the scan-changes step: changed files and current documentation state snapshot",
"type": "object",
"required": ["scan_scope", "changed_files", "documentation_snapshot", "timestamp"],
"properties": {
"scan_scope": {
"type": "object",
"required": ["mode", "range"],
"properties": {
"mode": {
"type": "string",
"enum": ["diff", "full"],
"description": "Whether this was a diff-based or full scan"
},
"range": {
"type": "string",
"description": "Git range used for diff (e.g. 'main...HEAD') or 'full' for full scan"
},
"base_ref": {
"type": "string",
"description": "Base reference for comparison"
}
}
},
"changed_files": {
"type": "object",
"required": ["total_count", "categories"],
"properties": {
"total_count": {
"type": "integer",
"minimum": 0,
"description": "Total number of changed files"
},
"categories": {
"type": "object",
"properties": {
"go_code": {
"type": "array",
"items": { "type": "string" },
"description": "Changed Go source files"
},
"cli_commands": {
"type": "array",
"items": { "type": "string" },
"description": "Changed CLI command files (cmd/wave/commands/)"
},
"pipelines": {
"type": "array",
"items": { "type": "string" },
"description": "Changed pipeline definitions"
},
"personas": {
"type": "array",
"items": { "type": "string" },
"description": "Changed persona definitions"
},
"contracts": {
"type": "array",
"items": { "type": "string" },
"description": "Changed contract schemas"
},
"documentation": {
"type": "array",
"items": { "type": "string" },
"description": "Changed documentation files (docs/, README.md, CLAUDE.md, etc.)"
},
"other": {
"type": "array",
"items": { "type": "string" },
"description": "Other changed files"
}
}
}
}
},
"documentation_snapshot": {
"type": "object",
"required": ["files"],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": ["path", "exists"],
"properties": {
"path": {
"type": "string",
"description": "Path to the documentation file"
},
"exists": {
"type": "boolean",
"description": "Whether the file exists"
},
"summary": {
"type": "string",
"description": "Brief summary of the file's content and key sections"
}
}
},
"description": "Key documentation files and their current state"
}
}
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When the scan was performed"
}
}
}

View File

@@ -0,0 +1,112 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://schema.recinq.com/wave/docs-phase.schema.json",
"title": "Wave Docs Phase Output Contract",
"description": "Validates docs phase outputs for prototype-driven development pipeline",
"type": "object",
"properties": {
"phase": {
"type": "string",
"const": "docs",
"description": "Phase identifier"
},
"artifacts": {
"type": "object",
"properties": {
"feature_docs": {
"type": "object",
"properties": {
"path": {
"type": "string",
"pattern": "^.*feature-docs\\.md$",
"description": "Path to feature documentation file"
},
"exists": {
"type": "boolean",
"const": true,
"description": "Feature documentation file must exist"
},
"content_type": {
"type": "string",
"const": "markdown",
"description": "Documentation content format"
}
},
"required": ["path", "exists", "content_type"],
"additionalProperties": false
},
"stakeholder_summary": {
"type": "object",
"properties": {
"path": {
"type": "string",
"pattern": "^.*stakeholder-summary\\.md$",
"description": "Path to stakeholder summary file"
},
"exists": {
"type": "boolean",
"const": true,
"description": "Stakeholder summary file must exist"
},
"content_type": {
"type": "string",
"const": "markdown",
"description": "Summary content format"
}
},
"required": ["path", "exists", "content_type"],
"additionalProperties": false
}
},
"required": ["feature_docs", "stakeholder_summary"],
"additionalProperties": true
},
"validation": {
"type": "object",
"properties": {
"coverage_percentage": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Specification coverage in documentation"
},
"readability_score": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Documentation readability rating"
},
"documentation_quality": {
"type": "string",
"enum": ["poor", "fair", "good", "excellent"],
"description": "Overall documentation quality assessment"
}
},
"required": ["documentation_quality"],
"additionalProperties": false
},
"metadata": {
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When docs phase was completed"
},
"duration_seconds": {
"type": "number",
"minimum": 0,
"description": "Time taken for docs phase"
},
"source_spec_path": {
"type": "string",
"description": "Path to source specification file"
}
},
"required": ["timestamp", "source_spec_path"],
"additionalProperties": false
}
},
"required": ["phase", "artifacts", "validation", "metadata"],
"additionalProperties": false
}

View File

@@ -0,0 +1,110 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://schema.recinq.com/wave/dummy-phase.schema.json",
"title": "Wave Dummy Phase Output Contract",
"description": "Validates dummy phase outputs for prototype-driven development pipeline",
"type": "object",
"properties": {
"phase": {
"type": "string",
"const": "dummy",
"description": "Phase identifier"
},
"artifacts": {
"type": "object",
"properties": {
"prototype": {
"type": "object",
"properties": {
"path": {
"type": "string",
"pattern": "^.*prototype/?$",
"description": "Path to prototype directory"
},
"exists": {
"type": "boolean",
"const": true,
"description": "Prototype directory must exist"
},
"content_type": {
"type": "string",
"const": "code",
"description": "Prototype content type"
}
},
"required": ["path", "exists", "content_type"],
"additionalProperties": false
},
"interface_definitions": {
"type": "object",
"properties": {
"path": {
"type": "string",
"pattern": "^.*interfaces\\.md$",
"description": "Path to interface definitions file"
},
"exists": {
"type": "boolean",
"const": true,
"description": "Interface definitions file must exist"
},
"content_type": {
"type": "string",
"const": "markdown",
"description": "Interface definitions content format"
}
},
"required": ["path", "exists", "content_type"],
"additionalProperties": false
}
},
"required": ["prototype", "interface_definitions"],
"additionalProperties": true
},
"validation": {
"type": "object",
"properties": {
"runnable": {
"type": "boolean",
"description": "Whether the prototype can be executed"
},
"interface_completeness": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Percentage of interfaces stubbed"
},
"prototype_quality": {
"type": "string",
"enum": ["poor", "fair", "good", "excellent"],
"description": "Overall prototype quality assessment"
}
},
"required": ["runnable", "prototype_quality"],
"additionalProperties": false
},
"metadata": {
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When dummy phase was completed"
},
"duration_seconds": {
"type": "number",
"minimum": 0,
"description": "Time taken for dummy phase"
},
"source_docs_path": {
"type": "string",
"description": "Path to source documentation file"
}
},
"required": ["timestamp", "source_docs_path"],
"additionalProperties": false
}
},
"required": ["phase", "artifacts", "validation", "metadata"],
"additionalProperties": false
}

View File

@@ -0,0 +1,69 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub Issue Enhancement Plan",
"description": "Schema for GitHub issue enhancement recommendations",
"type": "object",
"required": ["repository", "issues_to_enhance"],
"properties": {
"repository": {
"type": "string",
"description": "Repository in owner/repo format"
},
"issues_to_enhance": {
"type": "array",
"items": {
"type": "object",
"required": ["issue_number", "enhancements"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"current_title": {
"type": "string"
},
"suggested_title": {
"type": "string"
},
"current_body": {
"type": "string"
},
"body_template": {
"type": ["string", "null"],
"description": "Enhanced body template preserving original content"
},
"suggested_labels": {
"type": "array",
"items": {
"type": "string"
}
},
"enhancements": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of specific enhancements to apply"
},
"rationale": {
"type": "string",
"description": "Why these enhancements are recommended"
},
"priority": {
"type": "string",
"enum": ["high", "medium", "low"]
}
}
}
},
"total_to_enhance": {
"type": "integer",
"minimum": 0
},
"enhancement_strategy": {
"type": "string",
"description": "Overall strategy for enhancements"
}
}
}

View File

@@ -0,0 +1,71 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub Issue Enhancement Results",
"description": "Schema for GitHub issue enhancement execution results",
"type": "object",
"required": ["enhanced_issues", "total_attempted", "total_successful"],
"properties": {
"enhanced_issues": {
"type": "array",
"items": {
"type": "object",
"required": ["issue_number", "success", "changes_made", "url"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"success": {
"type": "boolean"
},
"changes_made": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of changes successfully applied"
},
"title_updated": {
"type": "boolean"
},
"body_updated": {
"type": "boolean"
},
"labels_added": {
"type": "array",
"items": {
"type": "string"
}
},
"comment_added": {
"type": "boolean"
},
"error": {
"type": "string",
"description": "Error message if enhancement failed"
},
"url": {
"type": "string",
"format": "uri"
}
}
}
},
"total_attempted": {
"type": "integer",
"minimum": 0
},
"total_successful": {
"type": "integer",
"minimum": 0
},
"total_failed": {
"type": "integer",
"minimum": 0
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
}

View File

@@ -0,0 +1,87 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Epic Issue Assessment",
"description": "Schema for epic/umbrella issue analysis results",
"type": "object",
"required": ["is_epic", "issue", "analysis"],
"properties": {
"is_epic": {
"type": "boolean",
"const": true,
"description": "Must be true for the pipeline to proceed. Set to false if the issue is not an epic or umbrella issue."
},
"issue": {
"type": "object",
"required": ["number", "title", "body", "repository", "url"],
"properties": {
"number": {
"type": "integer",
"minimum": 1
},
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$"
},
"url": {
"type": "string",
"format": "uri"
},
"labels": {
"type": "array",
"items": { "type": "string" }
},
"existing_issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"number": { "type": "integer" },
"title": { "type": "string" },
"labels": { "type": "array", "items": { "type": "string" } }
}
},
"description": "Existing issues in the repo to avoid duplication"
}
}
},
"analysis": {
"type": "object",
"required": ["scope_summary", "proposed_issues_count", "complexity"],
"properties": {
"scope_summary": {
"type": "string",
"minLength": 1,
"description": "Brief summary of what the epic covers"
},
"proposed_issues_count": {
"type": "integer",
"minimum": 1,
"maximum": 15,
"description": "Number of sub-issues to create"
},
"complexity": {
"type": "string",
"enum": ["small", "medium", "large", "epic"],
"description": "Overall complexity of the work"
},
"key_themes": {
"type": "array",
"items": { "type": "string" },
"description": "Major themes or categories of work identified"
},
"risks": {
"type": "array",
"items": { "type": "string" },
"description": "Identified risks or concerns"
}
}
}
}
}

View File

@@ -0,0 +1,28 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Epic Children",
"description": "Schema for the list of open child issue URLs belonging to an epic",
"type": "object",
"required": ["parent_url", "repo", "child_urls"],
"properties": {
"parent_url": {
"type": "string",
"format": "uri",
"description": "URL of the parent epic issue"
},
"repo": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Repository in owner/repo format"
},
"child_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"minItems": 1,
"description": "URLs of open child issues to implement"
}
}
}

View File

@@ -0,0 +1,49 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Epic Implementation Report",
"description": "Output from the report step of ops-implement-epic: implementation status for each subissue",
"type": "object",
"required": ["parent_issue", "results", "summary"],
"properties": {
"parent_issue": {
"type": "object",
"required": ["owner", "repo", "number", "url"],
"properties": {
"owner": { "type": "string" },
"repo": { "type": "string" },
"number": { "type": "integer", "minimum": 1 },
"url": { "type": "string", "format": "uri" }
},
"additionalProperties": false
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": ["number", "title", "status"],
"properties": {
"number": { "type": "integer", "minimum": 1 },
"title": { "type": "string" },
"status": { "type": "string", "enum": ["implemented", "failed", "skipped"] },
"pr_url": { "type": "string" },
"pr_number": { "type": "integer" }
},
"additionalProperties": false
}
},
"summary": {
"type": "object",
"required": ["total_subissues", "implemented", "failed", "skipped"],
"properties": {
"total_subissues": { "type": "integer", "minimum": 0 },
"implemented": { "type": "integer", "minimum": 0 },
"failed": { "type": "integer", "minimum": 0 },
"skipped": { "type": "integer", "minimum": 0 },
"comment_posted": { "type": "boolean" },
"comment_url": { "type": "string" }
},
"additionalProperties": false
}
},
"additionalProperties": false
}

View File

@@ -0,0 +1,52 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Epic Scope Plan",
"description": "Output from the fetch-scope step of ops-implement-epic: parsed subissues with dependency graph",
"type": "object",
"required": ["parent_issue", "subissues", "total_subissues", "open_subissues"],
"properties": {
"parent_issue": {
"type": "object",
"required": ["owner", "repo", "number", "title", "url"],
"properties": {
"owner": { "type": "string" },
"repo": { "type": "string" },
"number": { "type": "integer", "minimum": 1 },
"title": { "type": "string", "minLength": 1 },
"url": { "type": "string", "format": "uri" }
},
"additionalProperties": false
},
"subissues": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["number", "repository", "title", "url", "state", "dependencies"],
"properties": {
"number": { "type": "integer", "minimum": 1 },
"repository": { "type": "string", "pattern": "^[^/]+/[^/]+$" },
"title": { "type": "string", "minLength": 1 },
"url": { "type": "string", "format": "uri" },
"state": { "type": "string", "enum": ["OPEN", "CLOSED"] },
"complexity": { "type": "string", "enum": ["S", "M", "L", "XL"] },
"dependencies": {
"type": "array",
"items": { "type": "integer", "minimum": 1 }
}
},
"additionalProperties": false
}
},
"total_subissues": { "type": "integer", "minimum": 1 },
"open_subissues": { "type": "integer", "minimum": 0 },
"dependency_tiers": {
"type": "array",
"items": {
"type": "array",
"items": { "type": "integer", "minimum": 1 }
}
}
},
"additionalProperties": false
}

View File

@@ -0,0 +1,76 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Code Architecture Analysis",
"description": "Architecture and design analysis of explored code",
"type": "object",
"required": ["topic", "patterns", "timestamp"],
"properties": {
"topic": { "type": "string", "minLength": 3 },
"patterns": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "where", "why"],
"properties": {
"name": { "type": "string" },
"where": { "type": "string" },
"why": { "type": "string" },
"quality": { "type": "string", "enum": ["well-implemented", "adequate", "needs-improvement"] }
}
}
},
"data_flow": {
"type": "array",
"items": {
"type": "object",
"required": ["name"],
"properties": {
"name": { "type": "string" },
"stages": { "type": "array", "items": { "type": "string" } },
"key_transformations": { "type": "array", "items": { "type": "string" } }
}
}
},
"error_handling": {
"type": "object",
"properties": {
"strategy": { "type": "string" },
"patterns": { "type": "array", "items": { "type": "string" } },
"gaps": { "type": "array", "items": { "type": "string" } }
}
},
"concurrency": {
"type": "object",
"properties": {
"model": { "type": "string" },
"primitives": { "type": "array", "items": { "type": "string" } },
"risks": { "type": "array", "items": { "type": "string" } }
}
},
"extension_points": {
"type": "array",
"items": {
"type": "object",
"required": ["interface", "file"],
"properties": {
"interface": { "type": "string" },
"file": { "type": "string" },
"purpose": { "type": "string" }
}
}
},
"design_decisions": {
"type": "array",
"items": {
"type": "object",
"required": ["decision"],
"properties": {
"decision": { "type": "string" },
"rationale": { "type": "string" },
"trade_offs": { "type": "string" }
}
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,62 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Explain Exploration Results",
"description": "Structured exploration of a codebase topic for explanation",
"type": "object",
"required": ["topic", "entry_points", "key_types", "timestamp"],
"properties": {
"topic": { "type": "string", "minLength": 1 },
"entry_points": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["file", "symbol", "role"],
"properties": {
"file": { "type": "string", "minLength": 1 },
"symbol": { "type": "string", "minLength": 1 },
"role": { "type": "string", "minLength": 1 },
"line": { "type": "integer", "minimum": 1 }
}
}
},
"key_types": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "file", "purpose"],
"properties": {
"name": { "type": "string", "minLength": 1 },
"file": { "type": "string", "minLength": 1 },
"purpose": { "type": "string", "minLength": 1 },
"methods": { "type": "array", "items": { "type": "string" } },
"relationships": { "type": "array", "items": { "type": "string" } }
}
}
},
"call_flows": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "steps"],
"properties": {
"name": { "type": "string" },
"steps": { "type": "array", "items": { "type": "string" } },
"description": { "type": "string" }
}
}
},
"dependencies": {
"type": "object",
"properties": {
"depends_on": { "type": "array", "items": { "type": "string" } },
"depended_by": { "type": "array", "items": { "type": "string" } },
"external": { "type": "array", "items": { "type": "string" } }
}
},
"test_files": { "type": "array", "items": { "type": "string" } },
"config_points": { "type": "array", "items": { "type": "string" } },
"file_count": { "type": "integer", "minimum": 0 },
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,52 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Feature Exploration",
"description": "Codebase exploration for feature implementation",
"type": "object",
"required": ["feature", "scope", "related_files", "timestamp"],
"properties": {
"feature": { "type": "string", "minLength": 1 },
"scope": { "type": "string", "enum": ["small", "medium", "large"] },
"related_files": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["path", "relevance", "reason"],
"properties": {
"path": { "type": "string", "minLength": 1 },
"relevance": { "type": "string", "enum": ["primary", "secondary"] },
"reason": { "type": "string", "minLength": 1 },
"key_symbols": { "type": "array", "items": { "type": "string" } }
}
}
},
"patterns_to_follow": {
"type": "array",
"items": {
"type": "object",
"required": ["name"],
"properties": {
"name": { "type": "string" },
"example_file": { "type": "string" },
"relevance": { "type": "string", "enum": ["must_follow", "should_follow"] }
}
}
},
"affected_modules": { "type": "array", "items": { "type": "string" } },
"test_files": { "type": "array", "items": { "type": "string" } },
"risks": {
"type": "array",
"items": {
"type": "object",
"required": ["description", "severity"],
"properties": {
"description": { "type": "string" },
"severity": { "type": "string", "enum": ["high", "medium", "low"] },
"mitigation": { "type": "string" }
}
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,33 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Feature Implementation Plan",
"description": "Ordered implementation plan for a feature",
"type": "object",
"required": ["feature", "steps", "total_complexity", "timestamp"],
"properties": {
"feature": { "type": "string", "minLength": 5 },
"steps": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["id", "title", "description"],
"properties": {
"id": { "type": "string", "pattern": "^S\\d{2}$" },
"title": { "type": "string" },
"description": { "type": "string" },
"files_to_modify": { "type": "array", "items": { "type": "string" } },
"files_to_create": { "type": "array", "items": { "type": "string" } },
"tests_to_write": { "type": "array", "items": { "type": "string" } },
"acceptance_criteria": { "type": "array", "items": { "type": "string" } },
"complexity": { "type": "string", "enum": ["S", "M", "L"] },
"dependencies": { "type": "array", "items": { "type": "string" } }
}
}
},
"total_complexity": { "type": "string", "enum": ["S", "M", "L", "XL"] },
"branch_name_suggestion": { "type": "string" },
"commit_message_suggestion": { "type": "string" },
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,38 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Investigation Findings",
"type": "object",
"required": [
"root_cause",
"affected_files",
"fix_approach"
],
"properties": {
"root_cause": {
"type": "string",
"description": "Description of the root cause"
},
"affected_files": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of affected file paths"
},
"recent_commits": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of relevant commit hashes"
},
"blast_radius": {
"type": "string",
"description": "Assessment of what else could be affected"
},
"fix_approach": {
"type": "string",
"description": "Recommended approach to fix the issue"
}
}
}

View File

@@ -0,0 +1,37 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Gap Analysis",
"description": "Ontology vs. code comparison identifying implementation gaps",
"type": "object",
"required": ["ontology_version", "gaps", "coverage"],
"properties": {
"ontology_version": {
"type": "string"
},
"gaps": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "type", "entity", "description", "severity"],
"properties": {
"id": { "type": "string", "pattern": "^GAP-[0-9]+$" },
"type": { "type": "string", "enum": ["missing_entity", "missing_relationship", "missing_invariant", "partial_implementation", "stale_code", "undocumented_behavior"] },
"entity": { "type": "string" },
"description": { "type": "string" },
"severity": { "type": "string", "enum": ["low", "medium", "high", "critical"] },
"code_locations": { "type": "array", "items": { "type": "string" } },
"recommendation": { "type": "string" }
}
}
},
"coverage": {
"type": "object",
"required": ["entities_covered", "entities_total", "percentage"],
"properties": {
"entities_covered": { "type": "integer", "minimum": 0 },
"entities_total": { "type": "integer", "minimum": 0 },
"percentage": { "type": "number", "minimum": 0, "maximum": 100 }
}
}
}
}

View File

@@ -0,0 +1,33 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Gate Result",
"description": "Gate step resolution metadata",
"type": "object",
"required": ["gate_type", "status", "resolved_at"],
"properties": {
"gate_type": {
"type": "string",
"enum": ["approval", "pr_merge", "ci_pass", "timer"]
},
"status": {
"type": "string",
"enum": ["approved", "rejected", "timed_out", "merged", "checks_passed", "checks_failed"]
},
"resolved_at": {
"type": "string",
"format": "date-time"
},
"resolved_by": {
"type": "string",
"description": "User or system that resolved the gate"
},
"wait_duration_seconds": {
"type": "number",
"minimum": 0
},
"metadata": {
"type": "object",
"description": "Gate-type-specific metadata (PR number, check suite ID, etc.)"
}
}
}

View File

@@ -0,0 +1,29 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub PR Comment Result",
"description": "Result of posting a code review comment on a GitHub pull request",
"type": "object",
"required": ["comment_url", "pr_number"],
"properties": {
"comment_url": {
"type": "string",
"format": "uri",
"description": "URL to the posted review comment"
},
"pr_number": {
"type": "integer",
"minimum": 1,
"description": "PR number that was reviewed"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Repository full name (owner/repo)"
},
"summary": {
"type": "string",
"description": "Brief summary of the review"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,65 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub Issue Enhancement Plan",
"description": "Schema for GitHub issue enhancement recommendations",
"type": "object",
"required": ["issues_to_enhance"],
"properties": {
"issues_to_enhance": {
"type": "array",
"items": {
"type": "object",
"required": ["issue_number", "enhancements"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"current_title": {
"type": "string"
},
"suggested_title": {
"type": "string"
},
"current_body": {
"type": "string"
},
"body_template": {
"type": ["string", "null"],
"description": "Enhanced body template preserving original content"
},
"suggested_labels": {
"type": "array",
"items": {
"type": "string"
}
},
"enhancements": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of specific enhancements to apply"
},
"rationale": {
"type": "string",
"description": "Why these enhancements are recommended"
},
"priority": {
"type": "string",
"enum": ["high", "medium", "low"]
}
}
}
},
"total_to_enhance": {
"type": "integer",
"minimum": 0
},
"enhancement_strategy": {
"type": "string",
"description": "Overall strategy for enhancements"
}
}
}

View File

@@ -0,0 +1,71 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub Issue Enhancement Results",
"description": "Schema for GitHub issue enhancement execution results",
"type": "object",
"required": ["enhanced_issues", "total_attempted", "total_successful"],
"properties": {
"enhanced_issues": {
"type": "array",
"items": {
"type": "object",
"required": ["issue_number", "success", "changes_made", "url"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"success": {
"type": "boolean"
},
"changes_made": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of changes successfully applied"
},
"title_updated": {
"type": "boolean"
},
"body_updated": {
"type": "boolean"
},
"labels_added": {
"type": "array",
"items": {
"type": "string"
}
},
"comment_added": {
"type": "boolean"
},
"error": {
"type": "string",
"description": "Error message if enhancement failed"
},
"url": {
"type": "string",
"format": "uri"
}
}
}
},
"total_attempted": {
"type": "integer",
"minimum": 0
},
"total_successful": {
"type": "integer",
"minimum": 0
},
"total_failed": {
"type": "integer",
"minimum": 0
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
}

View File

@@ -0,0 +1,86 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub Issue Analysis",
"description": "Schema for GitHub issue quality analysis results",
"type": "object",
"required": ["repository", "total_issues", "poor_quality_issues"],
"properties": {
"repository": {
"type": "object",
"required": ["owner", "name"],
"properties": {
"owner": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
}
}
},
"total_issues": {
"type": "integer",
"minimum": 0
},
"analyzed_count": {
"type": "integer",
"minimum": 0
},
"poor_quality_issues": {
"type": "array",
"items": {
"type": "object",
"required": ["number", "title", "quality_score", "problems"],
"properties": {
"number": {
"type": "integer",
"minimum": 1
},
"title": {
"type": "string"
},
"body": {
"type": "string"
},
"quality_score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"problems": {
"type": "array",
"items": {
"type": "string"
}
},
"recommendations": {
"type": "array",
"items": {
"type": "string"
}
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"url": {
"type": "string",
"format": "uri"
}
}
}
},
"quality_threshold": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
}

View File

@@ -0,0 +1,87 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub Enhancement Verification Report",
"description": "Schema for verifying GitHub issue enhancements were applied",
"type": "object",
"required": ["total_enhanced", "successful_enhancements", "failed_enhancements"],
"properties": {
"total_enhanced": {
"type": "integer",
"minimum": 0
},
"successful_enhancements": {
"type": "array",
"items": {
"type": "object",
"required": ["issue_number", "verified_changes"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"verified_changes": {
"type": "array",
"items": {
"type": "string"
}
},
"quality_score_before": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"quality_score_after": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"url": {
"type": "string",
"format": "uri"
}
}
}
},
"failed_enhancements": {
"type": "array",
"items": {
"type": "object",
"required": ["issue_number", "problems"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"problems": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"quality_improvement": {
"type": "object",
"properties": {
"average_score_before": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"average_score_after": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"improvement_percentage": {
"type": "number"
}
}
},
"summary": {
"type": "string",
"description": "Human-readable summary of verification results"
}
}
}

View File

@@ -0,0 +1,26 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Hello World Result",
"description": "Verification result from the hello-world verify step",
"type": "object",
"required": ["success", "message"],
"properties": {
"success": {
"type": "boolean",
"description": "Whether the hello-world pipeline completed successfully"
},
"message": {
"type": "string",
"description": "Human-readable verification result"
},
"checks": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Optional list of individual verification checks performed"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,138 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://schema.recinq.com/wave/implement-phase.schema.json",
"title": "Wave Implement Phase Output Contract",
"description": "Validates implementation phase outputs for prototype-driven development pipeline",
"type": "object",
"properties": {
"phase": {
"type": "string",
"const": "implement",
"description": "Phase identifier"
},
"artifacts": {
"type": "object",
"properties": {
"implementation_plan": {
"type": "object",
"properties": {
"path": {
"type": "string",
"pattern": "^.*implementation-plan\\.md$",
"description": "Path to implementation plan file"
},
"exists": {
"type": "boolean",
"const": true,
"description": "Implementation plan file must exist"
},
"content_type": {
"type": "string",
"const": "markdown",
"description": "Implementation plan content format"
}
},
"required": ["path", "exists", "content_type"],
"additionalProperties": false
},
"progress_checklist": {
"type": "object",
"properties": {
"path": {
"type": "string",
"pattern": "^.*implementation-checklist\\.md$",
"description": "Path to progress checklist file"
},
"exists": {
"type": "boolean",
"const": true,
"description": "Progress checklist file must exist"
},
"content_type": {
"type": "string",
"const": "markdown",
"description": "Checklist content format"
}
},
"required": ["path", "exists", "content_type"],
"additionalProperties": false
}
},
"required": ["implementation_plan", "progress_checklist"],
"additionalProperties": true
},
"validation": {
"type": "object",
"properties": {
"tests_executed": {
"type": "boolean",
"description": "Whether test suite was executed"
},
"test_results": {
"type": "object",
"properties": {
"total": {
"type": "integer",
"minimum": 0,
"description": "Total number of tests"
},
"passed": {
"type": "integer",
"minimum": 0,
"description": "Number of tests that passed"
},
"failed": {
"type": "integer",
"minimum": 0,
"description": "Number of tests that failed"
},
"coverage_percent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Test coverage percentage"
}
},
"required": ["total", "passed", "failed"],
"additionalProperties": false
},
"implementation_readiness": {
"type": "string",
"enum": ["ready", "partial", "needs_work"],
"description": "Assessment of implementation readiness"
}
},
"required": ["tests_executed", "implementation_readiness"],
"additionalProperties": false
},
"metadata": {
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When implementation phase was completed"
},
"duration_seconds": {
"type": "number",
"minimum": 0,
"description": "Time taken for implementation phase"
},
"previous_phases": {
"type": "array",
"items": {
"type": "string",
"enum": ["spec", "docs", "dummy"]
},
"minItems": 3,
"maxItems": 3,
"description": "Previous phases that fed into this implementation"
}
},
"required": ["timestamp", "previous_phases"],
"additionalProperties": false
}
},
"required": ["phase", "artifacts", "validation", "metadata"],
"additionalProperties": false
}

View File

@@ -0,0 +1,44 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Improvement Assessment",
"description": "Structured assessment of code improvement opportunities",
"type": "object",
"required": ["target", "findings", "summary", "timestamp"],
"properties": {
"target": { "type": "string", "minLength": 1 },
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "category", "title", "location", "description", "impact", "effort"],
"properties": {
"id": { "type": "string", "pattern": "^IMP-[0-9]{1,4}$" },
"category": {
"type": "string",
"enum": ["error_handling", "performance", "testability", "robustness", "maintainability", "code_quality"]
},
"title": { "type": "string", "minLength": 3 },
"location": { "type": "string", "minLength": 1 },
"description": { "type": "string", "minLength": 10 },
"current_code": { "type": "string", "description": "Optional: code snippet illustrating the issue" },
"suggested_fix": { "type": "string", "minLength": 5, "description": "Optional: recommended fix or improvement" },
"impact": { "type": "string", "enum": ["high", "medium", "low"] },
"effort": { "type": "string", "enum": ["trivial", "small", "medium", "large"] },
"risk": { "type": "string", "enum": ["none", "low", "medium", "high"] }
}
}
},
"summary": {
"type": "object",
"required": ["total_findings", "overall_quality"],
"properties": {
"total_findings": { "type": "integer", "minimum": 0 },
"by_category": { "type": "object" },
"quick_wins": { "type": "array", "items": { "type": "string" } },
"high_impact": { "type": "array", "items": { "type": "string" } },
"overall_quality": { "type": "string", "minLength": 10 }
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,36 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Interface Design",
"description": "Go interface definitions derived from ontology entities",
"type": "object",
"required": ["package_name", "interfaces"],
"properties": {
"package_name": {
"type": "string"
},
"interfaces": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "description", "methods"],
"properties": {
"name": { "type": "string" },
"description": { "type": "string" },
"source_entity": { "type": "string" },
"methods": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "signature"],
"properties": {
"name": { "type": "string" },
"signature": { "type": "string" },
"description": { "type": "string" }
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,91 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub Issue Implementation Assessment",
"type": "object",
"required": ["implementable", "issue", "assessment"],
"properties": {
"implementable": {
"type": "boolean",
"const": true,
"description": "Must be true for the pipeline to proceed. Set to false if the issue lacks sufficient detail."
},
"issue": {
"type": "object",
"required": ["number", "title", "body", "repository", "url"],
"properties": {
"number": {
"type": "integer",
"minimum": 1
},
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$"
},
"url": {
"type": "string",
"format": "uri"
},
"labels": {
"type": "array",
"items": { "type": "string" }
},
"state": {
"type": "string"
},
"author": {
"type": "string"
},
"comments": {
"type": "array",
"items": { "type": "object" }
}
}
},
"assessment": {
"type": "object",
"required": ["quality_score", "complexity", "skip_steps", "branch_name"],
"properties": {
"quality_score": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "How well-specified the issue is (0-100)"
},
"complexity": {
"type": "string",
"enum": ["trivial", "simple", "medium", "complex"],
"description": "Estimated implementation complexity"
},
"skip_steps": {
"type": "array",
"items": {
"type": "string",
"enum": ["specify", "clarify", "checklist", "analyze"]
},
"description": "Speckit steps that can be skipped because the issue provides sufficient detail"
},
"branch_name": {
"type": "string",
"minLength": 1,
"description": "Suggested branch name for the implementation"
},
"missing_info": {
"type": "array",
"items": { "type": "string" },
"description": "Information that would improve the issue but isn't blocking"
},
"summary": {
"type": "string",
"description": "Brief summary of the assessment"
}
}
}
}
}

View File

@@ -0,0 +1,96 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "GitHub Issue Content",
"description": "Parsed content from a GitHub issue for research pipeline processing",
"type": "object",
"required": ["issue_number", "title", "body", "author", "url", "repository"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1,
"description": "GitHub issue number"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Issue title"
},
"body": {
"type": "string",
"description": "Issue body/description text"
},
"author": {
"type": "object",
"required": ["login"],
"properties": {
"login": {
"type": "string",
"minLength": 1,
"description": "GitHub username of issue author"
}
}
},
"labels": {
"type": "array",
"items": {
"type": "object",
"required": ["name"],
"properties": {
"name": {
"type": "string",
"description": "Label name"
},
"color": {
"type": "string",
"description": "Label color hex code"
},
"description": {
"type": "string",
"description": "Label description"
}
}
},
"description": "Labels applied to the issue"
},
"url": {
"type": "string",
"format": "uri",
"description": "HTML URL to the GitHub issue"
},
"repository": {
"type": "object",
"required": ["owner", "name", "full_name"],
"properties": {
"owner": {
"type": "string",
"description": "Repository owner"
},
"name": {
"type": "string",
"description": "Repository name"
},
"full_name": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Full repository name (owner/repo)"
}
}
},
"state": {
"type": "string",
"enum": ["open", "closed"],
"description": "Issue state"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Issue creation timestamp"
},
"comments_count": {
"type": "integer",
"minimum": 0,
"description": "Number of comments on the issue"
}
}
}

View File

@@ -0,0 +1,72 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Issue Implementation Plan",
"type": "object",
"required": ["issue_number", "branch_name", "feature_dir", "tasks"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"branch_name": {
"type": "string",
"minLength": 1
},
"feature_dir": {
"type": "string",
"description": "Path to the feature directory under specs/"
},
"spec_file": {
"type": "string",
"description": "Path to the spec.md file"
},
"plan_file": {
"type": "string",
"description": "Path to the plan.md file"
},
"tasks_file": {
"type": "string",
"description": "Path to the tasks.md file"
},
"tasks": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["id", "title", "description"],
"properties": {
"id": {
"type": "string",
"description": "Task identifier"
},
"title": {
"type": "string",
"description": "Brief task title"
},
"description": {
"type": "string",
"description": "Detailed task description"
},
"file_changes": {
"type": "array",
"items": {
"type": "object",
"required": ["path", "action"],
"properties": {
"path": { "type": "string" },
"action": {
"type": "string",
"enum": ["create", "modify", "delete"]
}
}
}
}
}
}
},
"summary": {
"type": "string",
"description": "Brief summary of the implementation plan"
}
}
}

View File

@@ -0,0 +1,116 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Issue Update Context",
"description": "Schema for gathered context about a GitHub issue and recent codebase changes",
"type": "object",
"required": ["repository", "issue", "changes_since_creation", "referenced_files"],
"properties": {
"repository": {
"type": "object",
"required": ["owner", "name"],
"properties": {
"owner": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
}
}
},
"issue": {
"type": "object",
"required": ["number", "title", "body", "url", "created_at"],
"properties": {
"number": {
"type": "integer",
"minimum": 1
},
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"url": {
"type": "string",
"format": "uri"
},
"created_at": {
"type": "string"
},
"comments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"author": {
"type": "string"
},
"body": {
"type": "string"
},
"created_at": {
"type": "string"
}
}
}
}
}
},
"changes_since_creation": {
"type": "object",
"required": ["commits", "commit_count"],
"properties": {
"commits": {
"type": "array",
"items": {
"type": "string"
}
},
"commit_count": {
"type": "integer",
"minimum": 0
},
"releases": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"referenced_files": {
"type": "object",
"required": ["found", "missing"],
"properties": {
"found": {
"type": "array",
"items": {
"type": "string"
}
},
"missing": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"criticism": {
"type": "string"
},
"project_context": {
"type": "string"
}
}
}

View File

@@ -0,0 +1,73 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Issue Update Draft",
"description": "Schema for a drafted update to a GitHub issue",
"type": "object",
"required": ["issue_number", "original_title", "updated_title", "title_changed", "original_body", "updated_body", "staleness_assessment", "changes_made"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"original_title": {
"type": "string",
"minLength": 1
},
"updated_title": {
"type": "string",
"minLength": 1
},
"title_changed": {
"type": "boolean"
},
"original_body": {
"type": "string"
},
"updated_body": {
"type": "string",
"minLength": 1
},
"staleness_assessment": {
"type": "object",
"required": ["overall_staleness", "sections"],
"properties": {
"overall_staleness": {
"type": "string",
"enum": ["low", "medium", "high", "critical"]
},
"sections": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "status", "reason"],
"properties": {
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": ["STILL_VALID", "OUTDATED", "INCOMPLETE", "WRONG"]
},
"reason": {
"type": "string"
}
}
}
}
}
},
"changes_made": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1
},
"criticism_addressed": {
"type": "array",
"items": {
"type": "string"
}
}
}
}

View File

@@ -0,0 +1,57 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Issue Update Result",
"description": "Schema for the result of applying an issue update",
"type": "object",
"required": ["issue_number", "success", "changes_applied", "verification"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"url": {
"type": "string",
"format": "uri"
},
"success": {
"type": "boolean"
},
"title_updated": {
"type": "boolean"
},
"body_updated": {
"type": "boolean"
},
"changes_applied": {
"type": "array",
"items": {
"type": "string"
}
},
"verification": {
"type": "object",
"required": ["title_matches", "body_matches"],
"properties": {
"title_matches": {
"type": "boolean"
},
"body_matches": {
"type": "boolean"
},
"discrepancies": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"staleness_assessment": {
"type": "string",
"enum": ["low", "medium", "high", "critical"]
},
"error": {
"type": ["string", "null"]
}
}
}

View File

@@ -0,0 +1,36 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Iteration State",
"description": "Per-iteration status for resumability tracking",
"type": "object",
"required": ["step_id", "total_items", "items"],
"properties": {
"step_id": {
"type": "string"
},
"total_items": {
"type": "integer",
"minimum": 0
},
"completed_items": {
"type": "integer",
"minimum": 0
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": ["index", "status"],
"properties": {
"index": { "type": "integer", "minimum": 0 },
"status": { "type": "string", "enum": ["pending", "running", "completed", "failed", "skipped"] },
"input": { "type": "string" },
"error": { "type": "string" },
"pipeline_run_id": { "type": "string" },
"started_at": { "type": "string", "format": "date-time" },
"completed_at": { "type": "string", "format": "date-time" }
}
}
}
}
}

View File

@@ -0,0 +1,38 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Ontology Evolution",
"description": "Categorized ontology changes with effort and risk assessment",
"type": "object",
"required": ["base_version", "changes", "summary"],
"properties": {
"base_version": {
"type": "string",
"description": "Reference to the base ontology being evolved"
},
"changes": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "category", "description", "effort", "risk"],
"properties": {
"id": { "type": "string", "pattern": "^EVO-[0-9]+$" },
"category": { "type": "string", "enum": ["add_entity", "modify_entity", "remove_entity", "add_relationship", "modify_relationship", "remove_relationship", "add_invariant", "modify_boundary"] },
"description": { "type": "string" },
"effort": { "type": "string", "enum": ["trivial", "small", "medium", "large", "epic"] },
"risk": { "type": "string", "enum": ["low", "medium", "high", "critical"] },
"rationale": { "type": "string" },
"affected_entities": { "type": "array", "items": { "type": "string" } }
}
}
},
"summary": {
"type": "object",
"required": ["total_changes", "breaking_changes"],
"properties": {
"total_changes": { "type": "integer", "minimum": 0 },
"breaking_changes": { "type": "integer", "minimum": 0 },
"estimated_effort": { "type": "string" }
}
}
}
}

View File

@@ -0,0 +1,89 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Ontology Extraction",
"description": "Domain ontology with entities, relationships, invariants, behaviors, and boundaries",
"type": "object",
"required": ["domain", "entities", "relationships", "boundaries"],
"properties": {
"domain": {
"type": "string",
"description": "Domain name being modeled"
},
"entities": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "type", "description", "properties"],
"properties": {
"name": { "type": "string" },
"type": { "type": "string", "enum": ["aggregate", "entity", "value_object", "event", "service"] },
"description": { "type": "string" },
"properties": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "type"],
"properties": {
"name": { "type": "string" },
"type": { "type": "string" },
"required": { "type": "boolean" },
"description": { "type": "string" }
}
}
}
}
}
},
"relationships": {
"type": "array",
"items": {
"type": "object",
"required": ["from", "to", "type"],
"properties": {
"from": { "type": "string" },
"to": { "type": "string" },
"type": { "type": "string", "enum": ["has_many", "has_one", "belongs_to", "depends_on", "produces", "consumes"] },
"description": { "type": "string" }
}
}
},
"invariants": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "description", "scope"],
"properties": {
"name": { "type": "string" },
"description": { "type": "string" },
"scope": { "type": "string" }
}
}
},
"behaviors": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "actor", "description"],
"properties": {
"name": { "type": "string" },
"actor": { "type": "string" },
"description": { "type": "string" },
"triggers": { "type": "array", "items": { "type": "string" } },
"outcomes": { "type": "array", "items": { "type": "string" } }
}
}
},
"boundaries": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "entities"],
"properties": {
"name": { "type": "string" },
"description": { "type": "string" },
"entities": { "type": "array", "items": { "type": "string" } }
}
}
}
}
}

View File

@@ -0,0 +1,179 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Plan Exploration",
"description": "Structured codebase exploration output for feature planning",
"type": "object",
"required": ["feature_context", "related_files", "patterns", "affected_modules", "testing_landscape", "risks", "timestamp"],
"properties": {
"feature_context": {
"type": "object",
"required": ["input_summary", "scope_assessment"],
"properties": {
"input_summary": {
"type": "string",
"minLength": 10,
"description": "Brief summary of the feature or task being planned"
},
"scope_assessment": {
"type": "string",
"enum": ["small", "medium", "large", "epic"],
"description": "Estimated scope of the work"
}
}
},
"related_files": {
"type": "array",
"items": {
"type": "object",
"required": ["path", "relevance", "reason"],
"properties": {
"path": {
"type": "string",
"description": "File path relative to project root"
},
"relevance": {
"type": "string",
"enum": ["primary", "secondary", "reference"],
"description": "How relevant this file is to the feature"
},
"reason": {
"type": "string",
"description": "Why this file is relevant"
},
"key_symbols": {
"type": "array",
"items": {
"type": "string"
},
"description": "Important functions, types, or constants in this file"
}
}
},
"description": "Files related to the feature"
},
"patterns": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "name", "description", "relevance"],
"properties": {
"id": {
"type": "string",
"pattern": "^PAT-[0-9]{1,4}$",
"description": "Pattern identifier"
},
"name": {
"type": "string",
"description": "Short name for the pattern"
},
"description": {
"type": "string",
"description": "What the pattern is and how it works"
},
"example_file": {
"type": "string",
"description": "File that best demonstrates this pattern"
},
"relevance": {
"type": "string",
"enum": ["must_follow", "should_follow", "informational"],
"description": "How important it is to follow this pattern"
}
}
},
"description": "Codebase patterns and conventions discovered"
},
"affected_modules": {
"type": "array",
"items": {
"type": "object",
"required": ["path", "description", "impact_level"],
"properties": {
"path": {
"type": "string",
"description": "Module or package path"
},
"description": {
"type": "string",
"description": "What this module does"
},
"impact_level": {
"type": "string",
"enum": ["direct", "indirect", "none"],
"description": "Level of impact from the planned changes"
},
"dependencies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Modules this one depends on"
},
"dependents": {
"type": "array",
"items": {
"type": "string"
},
"description": "Modules that depend on this one"
}
}
},
"description": "Modules affected by the planned changes"
},
"testing_landscape": {
"type": "object",
"required": ["existing_test_files", "testing_patterns"],
"properties": {
"existing_test_files": {
"type": "array",
"items": {
"type": "string"
},
"description": "Test files relevant to the feature"
},
"testing_patterns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Testing patterns used in the codebase (e.g., table-driven, mocks)"
},
"coverage_gaps": {
"type": "array",
"items": {
"type": "string"
},
"description": "Areas lacking test coverage"
}
}
},
"risks": {
"type": "array",
"items": {
"type": "object",
"required": ["description", "severity"],
"properties": {
"description": {
"type": "string",
"description": "What the risk is"
},
"severity": {
"type": "string",
"enum": ["high", "medium", "low"],
"description": "Risk severity"
},
"mitigation": {
"type": "string",
"description": "How to mitigate this risk"
}
}
},
"description": "Risks identified during exploration"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When the exploration was completed"
}
}
}

View File

@@ -0,0 +1,235 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Plan Review",
"description": "Structured review of a task breakdown plan",
"type": "object",
"required": ["verdict", "summary", "task_reviews", "cross_cutting_concerns", "recommendations", "risk_assessment", "timestamp", "markdown_content"],
"properties": {
"verdict": {
"type": "object",
"required": ["decision", "confidence", "rationale"],
"properties": {
"decision": {
"type": "string",
"enum": ["approve", "approve_with_notes", "revise"],
"description": "Overall verdict on the plan"
},
"confidence": {
"type": "string",
"enum": ["high", "medium", "low"],
"description": "Confidence in the verdict"
},
"rationale": {
"type": "string",
"minLength": 20,
"description": "Explanation for the verdict"
}
}
},
"summary": {
"type": "object",
"required": ["total_tasks_reviewed", "issues_found", "issues_by_severity", "strengths"],
"properties": {
"total_tasks_reviewed": {
"type": "integer",
"minimum": 1,
"description": "Number of tasks reviewed"
},
"issues_found": {
"type": "integer",
"minimum": 0,
"description": "Total number of issues found"
},
"issues_by_severity": {
"type": "object",
"properties": {
"critical": {
"type": "integer",
"minimum": 0
},
"high": {
"type": "integer",
"minimum": 0
},
"medium": {
"type": "integer",
"minimum": 0
},
"low": {
"type": "integer",
"minimum": 0
}
},
"description": "Issues broken down by severity"
},
"strengths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Things the plan does well"
}
}
},
"task_reviews": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["task_id", "status"],
"properties": {
"task_id": {
"type": "string",
"pattern": "^T[0-9]{2}$",
"description": "ID of the reviewed task"
},
"status": {
"type": "string",
"enum": ["ok", "needs_refinement", "missing_details", "overcomplicated", "wrong_persona", "bad_dependencies"],
"description": "Review status for this task"
},
"issues": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "severity", "description", "suggestion"],
"properties": {
"id": {
"type": "string",
"pattern": "^REV-[0-9]{1,4}$",
"description": "Issue identifier"
},
"severity": {
"type": "string",
"enum": ["critical", "high", "medium", "low"],
"description": "Issue severity"
},
"description": {
"type": "string",
"description": "What the issue is"
},
"suggestion": {
"type": "string",
"description": "How to fix it"
}
}
},
"description": "Issues found in this task"
}
}
},
"description": "Per-task review results"
},
"cross_cutting_concerns": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "category", "description", "affected_tasks", "recommendation"],
"properties": {
"id": {
"type": "string",
"pattern": "^CC-[0-9]{1,4}$",
"description": "Concern identifier"
},
"category": {
"type": "string",
"description": "Category of concern (e.g., testing, security, performance)"
},
"description": {
"type": "string",
"description": "What the concern is"
},
"affected_tasks": {
"type": "array",
"items": {
"type": "string",
"pattern": "^T[0-9]{2}$"
},
"description": "Tasks affected by this concern"
},
"recommendation": {
"type": "string",
"description": "Recommended action"
}
}
},
"description": "Concerns that span multiple tasks"
},
"recommendations": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "priority", "description", "type"],
"properties": {
"id": {
"type": "string",
"pattern": "^REC-[0-9]{1,4}$",
"description": "Recommendation identifier"
},
"priority": {
"type": "string",
"enum": ["critical", "high", "medium", "low"],
"description": "Priority of the recommendation"
},
"description": {
"type": "string",
"description": "What should be done"
},
"type": {
"type": "string",
"enum": ["add_task", "modify_task", "remove_task", "reorder", "split_task", "merge_tasks", "change_persona", "add_dependency"],
"description": "Type of change recommended"
}
}
},
"description": "Actionable recommendations for improving the plan"
},
"risk_assessment": {
"type": "object",
"required": ["overall_risk", "key_risks"],
"properties": {
"overall_risk": {
"type": "string",
"enum": ["high", "medium", "low"],
"description": "Overall risk level of the plan"
},
"key_risks": {
"type": "array",
"items": {
"type": "object",
"required": ["description", "severity", "likelihood"],
"properties": {
"description": {
"type": "string",
"description": "Risk description"
},
"severity": {
"type": "string",
"enum": ["high", "medium", "low"]
},
"likelihood": {
"type": "string",
"enum": ["high", "medium", "low"]
},
"mitigation": {
"type": "string",
"description": "How to mitigate"
}
}
},
"description": "Key risks identified in the plan"
}
}
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When the review was completed"
},
"markdown_content": {
"type": "string",
"minLength": 50,
"description": "Pre-rendered human-readable review in markdown format"
}
}
}

View File

@@ -0,0 +1,40 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Speckit Plan Status",
"description": "Status report from the plan step: research, design, and implementation plan generation.",
"type": "object",
"required": ["plan_file", "feature_dir", "summary"],
"properties": {
"plan_file": {
"type": "string",
"minLength": 1,
"description": "Path to the generated implementation plan file"
},
"feature_dir": {
"type": "string",
"minLength": 1,
"description": "Path to the feature directory"
},
"summary": {
"type": "string",
"minLength": 1,
"description": "Brief description of the plan produced"
},
"research_file": {
"type": "string",
"description": "Path to research.md if generated"
},
"data_model_file": {
"type": "string",
"description": "Path to data-model.md if generated"
},
"constitution_issues": {
"type": "array",
"items": {
"type": "string"
},
"description": "Constitution compliance issues found during planning"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,142 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Plan Tasks",
"description": "Structured task breakdown for feature implementation",
"type": "object",
"required": ["feature_summary", "tasks", "execution_order", "metadata", "markdown_content"],
"properties": {
"feature_summary": {
"type": "object",
"required": ["title", "description", "total_tasks", "estimated_total_complexity"],
"properties": {
"title": {
"type": "string",
"minLength": 5,
"description": "Short title for the feature"
},
"description": {
"type": "string",
"minLength": 20,
"description": "Brief description of what the feature does"
},
"total_tasks": {
"type": "integer",
"minimum": 1,
"description": "Total number of tasks in the breakdown"
},
"estimated_total_complexity": {
"type": "string",
"enum": ["S", "M", "L", "XL"],
"description": "Overall complexity estimate"
}
}
},
"tasks": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["id", "title", "description", "persona", "complexity", "acceptance_criteria"],
"properties": {
"id": {
"type": "string",
"pattern": "^T[0-9]{2}$",
"description": "Task identifier (T01, T02, etc.)"
},
"title": {
"type": "string",
"minLength": 5,
"description": "Short task title"
},
"description": {
"type": "string",
"minLength": 20,
"description": "What needs to be done"
},
"persona": {
"type": "string",
"enum": ["navigator", "philosopher", "craftsman", "auditor", "planner", "implementer", "reviewer"],
"description": "Which persona should execute this task"
},
"complexity": {
"type": "string",
"enum": ["S", "M", "L", "XL"],
"description": "Task complexity estimate"
},
"dependencies": {
"type": "array",
"items": {
"type": "string",
"pattern": "^T[0-9]{2}$"
},
"description": "Task IDs that must complete before this one"
},
"acceptance_criteria": {
"type": "array",
"minItems": 1,
"items": {
"type": "string"
},
"description": "How to verify the task is complete"
},
"affected_files": {
"type": "array",
"items": {
"type": "string"
},
"description": "Files that will be created or modified"
},
"risks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Risks specific to this task"
}
}
},
"description": "Ordered list of tasks"
},
"execution_order": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["phase", "task_ids"],
"properties": {
"phase": {
"type": "integer",
"minimum": 1,
"description": "Execution phase number"
},
"task_ids": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"pattern": "^T[0-9]{2}$"
},
"description": "Tasks that can run in parallel in this phase"
}
}
},
"description": "Parallelization groups for task execution"
},
"metadata": {
"type": "object",
"required": ["generated_at"],
"properties": {
"generated_at": {
"type": "string",
"format": "date-time",
"description": "When the plan was generated"
}
}
},
"markdown_content": {
"type": "string",
"minLength": 50,
"description": "Pre-rendered human-readable plan in markdown format"
}
}
}

View File

@@ -0,0 +1,43 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Pull Request Result",
"description": "Result of creating a pull request. Used by pipeline steps that produce a PR as their final output.",
"type": "object",
"required": ["pr_url", "pr_number", "branch", "summary"],
"properties": {
"pr_url": {
"type": "string",
"format": "uri",
"description": "URL to the created pull request"
},
"pr_number": {
"type": "integer",
"minimum": 1,
"description": "Pull request number"
},
"branch": {
"type": "string",
"minLength": 1,
"description": "Branch name for the pull request"
},
"summary": {
"type": "string",
"minLength": 1,
"description": "Brief description of what the pull request does"
},
"copilot_review_requested": {
"type": "boolean",
"description": "Whether a Copilot review was requested for the PR"
},
"closes_issue": {
"type": "boolean",
"description": "Whether the PR closes a linked issue"
},
"issue_number": {
"type": "integer",
"minimum": 1,
"description": "Issue number that this PR addresses"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,42 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Probed Findings",
"description": "Deep-dive analysis from the recinq probe step",
"type": "object",
"required": ["target", "total_probed", "findings"],
"properties": {
"target": {
"type": "string",
"description": "What was analyzed (path, module, or 'whole-project')"
},
"total_probed": {
"type": "integer",
"description": "Total number of confirmed findings that were probed deeper"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "deeper_analysis", "files"],
"properties": {
"id": {
"type": "string",
"description": "Original finding ID (e.g. DVG-001)"
},
"deeper_analysis": {
"type": "string",
"description": "Extended analysis including dependency graph, second-order effects, and cross-finding patterns"
},
"files": {
"type": "array",
"items": { "type": "string" },
"description": "File paths involved in this finding and its connections"
}
},
"additionalProperties": true
},
"description": "Per-finding deep-dive results"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,119 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Project Survey",
"description": "Structured survey of a project for onboarding guide generation",
"type": "object",
"required": ["project", "build", "structure", "timestamp"],
"properties": {
"project": {
"type": "object",
"required": ["name", "language", "purpose"],
"properties": {
"name": { "type": "string", "minLength": 1 },
"language": { "type": "string", "minLength": 1 },
"framework": { "type": "string" },
"purpose": { "type": "string", "minLength": 5 },
"license": { "type": "string" }
}
},
"build": {
"type": "object",
"required": ["commands"],
"properties": {
"commands": {
"type": "object",
"properties": {
"build": { "type": "string" },
"test": { "type": "string" },
"run": { "type": "string" }
}
},
"prerequisites": { "type": "array", "items": { "type": "string" } },
"ci_system": { "type": "string" }
}
},
"structure": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["path", "purpose"],
"properties": {
"path": { "type": "string", "minLength": 1 },
"purpose": { "type": "string", "minLength": 1 },
"key_files": { "type": "array", "items": { "type": "string" } }
}
}
},
"architecture": {
"type": "object",
"properties": {
"entry_points": { "type": "array", "items": { "type": "string" } },
"components": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "role"],
"properties": {
"name": { "type": "string" },
"package": { "type": "string" },
"role": { "type": "string" }
}
}
},
"patterns": { "type": "array", "items": { "type": "string" } }
}
},
"dependencies": {
"type": "object",
"properties": {
"key_deps": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "purpose"],
"properties": {
"name": { "type": "string" },
"purpose": { "type": "string" },
"import": { "type": "string" }
}
}
},
"total_count": { "type": "integer", "minimum": 0 }
}
},
"configuration": {
"type": "object",
"properties": {
"env_vars": { "type": "array", "items": { "type": "string" } },
"config_files": { "type": "array", "items": { "type": "string" } },
"feature_flags": { "type": "array", "items": { "type": "string" } }
}
},
"testing": {
"type": "object",
"properties": {
"framework": { "type": "string" },
"patterns": { "type": "array", "items": { "type": "string" } },
"run_command": { "type": "string" },
"coverage_command": { "type": "string" }
}
},
"workflow": {
"type": "object",
"properties": {
"branch_strategy": { "type": "string" },
"commit_convention": { "type": "string" },
"pr_process": { "type": "string" }
}
},
"documentation": {
"type": "object",
"properties": {
"locations": { "type": "array", "items": { "type": "string" } },
"quality": { "type": "string", "enum": ["good", "adequate", "sparse", "missing"] }
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,43 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Recinq Context",
"description": "Parsed input context from the recinq gather step",
"type": "object",
"required": ["input_type", "original_input", "focus_hint"],
"properties": {
"input_type": {
"type": "string",
"enum": ["issue", "pr", "local"],
"description": "The kind of input: GitHub issue, GitHub PR, or local path/description"
},
"original_input": {
"type": "string",
"description": "The raw input string exactly as given by the user"
},
"focus_hint": {
"type": "string",
"description": "Summary of what should be simplified or focused on"
},
"url": {
"type": "string",
"description": "GitHub issue or PR URL (empty for local input)"
},
"repo": {
"type": "string",
"description": "GitHub owner/repo (empty for local input)"
},
"number": {
"type": "integer",
"description": "GitHub issue or PR number (0 for local input)"
},
"title": {
"type": "string",
"description": "GitHub issue or PR title (empty for local input)"
},
"body": {
"type": "string",
"description": "GitHub issue or PR body (empty for local input)"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,27 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["target_files", "affected_callers", "existing_tests", "integration_points", "risk_assessment"],
"properties": {
"target_files": {
"type": "array",
"items": { "type": "string" }
},
"affected_callers": {
"type": "array",
"items": { "type": "string" }
},
"existing_tests": {
"type": "array",
"items": { "type": "string" }
},
"integration_points": {
"type": "array",
"items": { "type": "string" }
},
"risk_assessment": {
"type": "string",
"enum": ["low", "medium", "high"]
}
}
}

View File

@@ -0,0 +1,178 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Research Findings",
"description": "Web research results organized by topic with sources and insights",
"type": "object",
"required": ["issue_reference", "findings_by_topic", "research_metadata"],
"properties": {
"issue_reference": {
"type": "object",
"required": ["issue_number", "repository"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$"
}
}
},
"findings_by_topic": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["topic_id", "topic_title", "findings", "confidence_level"],
"properties": {
"topic_id": {
"type": "string",
"pattern": "^TOPIC-[0-9]{1,4}$",
"description": "Reference to topic ID from research-topics"
},
"topic_title": {
"type": "string",
"description": "Topic title for readability"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "summary", "source", "relevance_score"],
"properties": {
"id": {
"type": "string",
"pattern": "^FINDING-[0-9]{1,4}$",
"description": "Unique finding identifier"
},
"summary": {
"type": "string",
"minLength": 20,
"maxLength": 2000,
"description": "Summarized finding content"
},
"key_points": {
"type": "array",
"items": {
"type": "string"
},
"description": "Bullet points of key insights"
},
"source": {
"type": "object",
"required": ["url", "title", "type"],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Source URL"
},
"title": {
"type": "string",
"description": "Source page/article title"
},
"type": {
"type": "string",
"enum": ["official_docs", "github_issue", "github_discussion", "stack_overflow", "blog_post", "tutorial", "api_reference", "academic_paper", "forum_post", "other"],
"description": "Type of source"
},
"author": {
"type": "string",
"description": "Author or organization name"
},
"credibility_score": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Source credibility assessment (0-1)"
}
}
},
"relevance_score": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Relevance to the topic (0-1)"
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"required": ["text"],
"properties": {
"text": {
"type": "string",
"description": "Direct quote from source"
},
"context": {
"type": "string",
"description": "Context for the quote"
}
}
},
"description": "Notable quotes from the source"
}
}
},
"description": "Individual research findings for this topic"
},
"confidence_level": {
"type": "string",
"enum": ["high", "medium", "low", "inconclusive"],
"description": "Overall confidence in findings for this topic"
},
"consensus": {
"type": "string",
"description": "Summary of consensus across sources"
},
"gaps": {
"type": "array",
"items": {
"type": "string"
},
"description": "Questions that couldn't be fully answered"
}
}
},
"description": "Research findings organized by topic"
},
"research_metadata": {
"type": "object",
"required": ["started_at", "completed_at"],
"properties": {
"started_at": {
"type": "string",
"format": "date-time",
"description": "Research start timestamp"
},
"completed_at": {
"type": "string",
"format": "date-time",
"description": "Research completion timestamp"
},
"persona": {
"type": "string",
"description": "Wave persona that conducted research"
},
"total_sources_consulted": {
"type": "integer",
"minimum": 0,
"description": "Total number of sources examined"
},
"sources_included": {
"type": "integer",
"minimum": 0,
"description": "Number of sources included in findings"
},
"search_queries_used": {
"type": "array",
"items": {
"type": "string"
},
"description": "Search queries that were used"
}
}
}
}
}

View File

@@ -0,0 +1,206 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Research Report",
"description": "Synthesized research report for GitHub issue comment",
"type": "object",
"required": ["issue_reference", "executive_summary", "detailed_findings", "recommendations", "sources", "markdown_content"],
"properties": {
"issue_reference": {
"type": "object",
"required": ["issue_number", "repository", "title"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$"
},
"title": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
}
},
"executive_summary": {
"type": "object",
"required": ["overview", "key_findings", "primary_recommendation"],
"properties": {
"overview": {
"type": "string",
"minLength": 50,
"maxLength": 1000,
"description": "Brief overview of research conducted and main conclusions"
},
"key_findings": {
"type": "array",
"minItems": 1,
"maxItems": 7,
"items": {
"type": "string"
},
"description": "Top findings as bullet points"
},
"primary_recommendation": {
"type": "string",
"minLength": 20,
"description": "Single most important recommendation"
},
"confidence_assessment": {
"type": "string",
"enum": ["high", "medium", "low"],
"description": "Overall confidence in the research conclusions"
}
}
},
"detailed_findings": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["section_title", "content", "relevance"],
"properties": {
"section_title": {
"type": "string",
"minLength": 3,
"description": "Section heading"
},
"topic_id": {
"type": "string",
"pattern": "^TOPIC-[0-9]{1,4}$",
"description": "Reference to original topic if applicable"
},
"content": {
"type": "string",
"minLength": 50,
"description": "Detailed markdown content for this section"
},
"relevance": {
"type": "string",
"enum": ["critical", "high", "medium", "supplementary"],
"description": "How relevant this section is to the issue"
},
"code_examples": {
"type": "array",
"items": {
"type": "object",
"required": ["code", "language"],
"properties": {
"code": {
"type": "string",
"description": "Code snippet"
},
"language": {
"type": "string",
"description": "Language for syntax highlighting"
},
"caption": {
"type": "string",
"description": "Explanation of the code"
}
}
},
"description": "Code examples for this section"
},
"related_sources": {
"type": "array",
"items": {
"type": "string",
"pattern": "^SRC-[0-9]{1,4}$"
},
"description": "References to sources list"
}
}
},
"description": "Detailed findings organized by section"
},
"recommendations": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "object",
"required": ["id", "title", "description", "priority"],
"properties": {
"id": {
"type": "string",
"pattern": "^REC-[0-9]{1,4}$",
"description": "Recommendation identifier"
},
"title": {
"type": "string",
"minLength": 5,
"maxLength": 100,
"description": "Concise recommendation title"
},
"description": {
"type": "string",
"minLength": 20,
"description": "Detailed recommendation explanation"
},
"priority": {
"type": "string",
"enum": ["critical", "high", "medium", "low"],
"description": "Recommendation priority"
},
"effort_estimate": {
"type": "string",
"enum": ["trivial", "small", "medium", "large", "unknown"],
"description": "Estimated implementation effort"
}
}
},
"description": "Actionable recommendations based on research"
},
"sources": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["id", "url", "title"],
"properties": {
"id": {
"type": "string",
"pattern": "^SRC-[0-9]{1,4}$",
"description": "Source identifier for cross-referencing"
},
"url": {
"type": "string",
"format": "uri",
"description": "Source URL"
},
"title": {
"type": "string",
"description": "Source title"
},
"type": {
"type": "string",
"enum": ["official_docs", "github_issue", "github_discussion", "stack_overflow", "blog_post", "tutorial", "api_reference", "academic_paper", "forum_post", "other"]
},
"reliability": {
"type": "string",
"enum": ["authoritative", "reputable", "community", "unverified"],
"description": "Source reliability assessment"
}
}
},
"description": "All sources cited in the report"
},
"markdown_content": {
"type": "string",
"minLength": 100,
"description": "Pre-rendered markdown content ready for GitHub comment"
},
"follow_up_questions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Questions that warrant further investigation"
}
}
}

View File

@@ -0,0 +1,106 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Research Topics",
"description": "Extracted research topics from GitHub issue analysis",
"type": "object",
"required": ["issue_reference", "topics"],
"properties": {
"issue_reference": {
"type": "object",
"required": ["issue_number", "repository"],
"properties": {
"issue_number": {
"type": "integer",
"minimum": 1,
"description": "Reference to source issue number"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$",
"description": "Repository full name (owner/repo)"
},
"title": {
"type": "string",
"description": "Issue title for context"
}
}
},
"topics": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "object",
"required": ["id", "title", "questions", "keywords", "priority"],
"properties": {
"id": {
"type": "string",
"pattern": "^TOPIC-[0-9]{1,4}$",
"description": "Unique topic identifier (e.g., TOPIC-001)"
},
"title": {
"type": "string",
"minLength": 5,
"maxLength": 200,
"description": "Concise topic title"
},
"description": {
"type": "string",
"description": "Detailed description of what needs to be researched"
},
"questions": {
"type": "array",
"minItems": 1,
"maxItems": 5,
"items": {
"type": "string",
"minLength": 10
},
"description": "Specific questions to answer through research"
},
"keywords": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "string",
"minLength": 2
},
"description": "Search keywords for web research"
},
"priority": {
"type": "string",
"enum": ["critical", "high", "medium", "low"],
"description": "Research priority level"
},
"category": {
"type": "string",
"enum": ["technical", "documentation", "best_practices", "security", "performance", "compatibility", "other"],
"description": "Topic category for organization"
}
}
},
"description": "List of research topics extracted from the issue"
},
"extraction_metadata": {
"type": "object",
"properties": {
"extracted_at": {
"type": "string",
"format": "date-time",
"description": "Timestamp when topics were extracted"
},
"persona": {
"type": "string",
"description": "Wave persona that performed the extraction"
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Confidence score for topic relevance (0-1)"
}
}
}
}
}

View File

@@ -0,0 +1,73 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Epic Scope Plan and Results",
"description": "Schema for epic decomposition plan with created sub-issues",
"type": "object",
"required": ["parent_issue", "created_issues", "total_created"],
"properties": {
"parent_issue": {
"type": "object",
"required": ["number", "url", "repository"],
"properties": {
"number": {
"type": "integer",
"minimum": 1
},
"url": {
"type": "string",
"format": "uri"
},
"repository": {
"type": "string",
"pattern": "^[^/]+/[^/]+$"
}
}
},
"created_issues": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["number", "title", "url", "success"],
"properties": {
"number": {
"type": "integer",
"minimum": 1
},
"title": {
"type": "string",
"minLength": 1
},
"url": {
"type": "string",
"format": "uri"
},
"labels": {
"type": "array",
"items": { "type": "string" }
},
"success": {
"type": "boolean"
},
"complexity": {
"type": "string",
"enum": ["S", "M", "L", "XL"]
},
"dependencies": {
"type": "array",
"items": { "type": "string" },
"description": "Titles or numbers of issues this depends on"
}
}
}
},
"total_created": {
"type": "integer",
"minimum": 0
},
"total_failed": {
"type": "integer",
"minimum": 0
}
}
}

View File

@@ -0,0 +1,78 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Epic Scope Verification Report",
"description": "Schema for verification of created sub-issues",
"type": "object",
"required": ["parent_issue", "verified_issues", "summary"],
"properties": {
"parent_issue": {
"type": "object",
"required": ["number", "url"],
"properties": {
"number": {
"type": "integer",
"minimum": 1
},
"url": {
"type": "string",
"format": "uri"
}
}
},
"verified_issues": {
"type": "array",
"items": {
"type": "object",
"required": ["number", "title", "exists"],
"properties": {
"number": {
"type": "integer",
"minimum": 1
},
"title": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
},
"exists": {
"type": "boolean"
},
"has_acceptance_criteria": {
"type": "boolean"
},
"references_parent": {
"type": "boolean"
}
}
}
},
"summary": {
"type": "object",
"required": ["total_verified", "total_valid", "total_issues_created"],
"properties": {
"total_verified": {
"type": "integer",
"minimum": 0
},
"total_valid": {
"type": "integer",
"minimum": 0
},
"total_issues_created": {
"type": "integer",
"minimum": 0
},
"comment_posted": {
"type": "boolean",
"description": "Whether a summary comment was posted on the epic"
},
"comment_url": {
"type": "string",
"description": "URL of the summary comment if posted"
}
}
}
}
}

View File

@@ -0,0 +1,73 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Security Scan Results",
"description": "Output from the security scan step",
"type": "object",
"required": ["target", "findings", "summary", "timestamp"],
"properties": {
"target": {
"type": "string",
"minLength": 1,
"description": "What was scanned"
},
"attack_surface": {
"type": "array",
"items": {
"type": "object",
"required": ["entry_point", "type", "description"],
"properties": {
"entry_point": { "type": "string", "minLength": 1 },
"type": {
"type": "string",
"enum": ["http_handler", "cli_input", "file_parser", "db_query", "api_call", "ipc", "other"]
},
"description": { "type": "string", "minLength": 1 },
"risk_level": { "type": "string", "enum": ["high", "medium", "low"] }
}
}
},
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "title", "severity", "category", "location", "description"],
"properties": {
"id": { "type": "string", "pattern": "^SEC-[0-9]{1,4}$" },
"title": { "type": "string", "minLength": 5 },
"severity": { "type": "string", "enum": ["CRITICAL", "HIGH", "MEDIUM", "LOW"] },
"category": { "type": "string", "minLength": 1 },
"location": { "type": "string", "minLength": 1 },
"description": { "type": "string", "minLength": 10 },
"evidence": { "type": "string" },
"exploitability": { "type": "string" }
}
}
},
"secrets_check": {
"type": "object",
"properties": {
"hardcoded_secrets": { "type": "array", "items": { "type": "string" } },
"insecure_configs": { "type": "array", "items": { "type": "string" } }
}
},
"summary": {
"type": "object",
"required": ["total_findings", "by_severity", "risk_assessment"],
"properties": {
"total_findings": { "type": "integer", "minimum": 0 },
"by_severity": {
"type": "object",
"required": ["CRITICAL", "HIGH", "MEDIUM", "LOW"],
"properties": {
"CRITICAL": { "type": "integer", "minimum": 0 },
"HIGH": { "type": "integer", "minimum": 0 },
"MEDIUM": { "type": "integer", "minimum": 0 },
"LOW": { "type": "integer", "minimum": 0 }
}
},
"risk_assessment": { "type": "string", "minLength": 10 }
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,119 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://schema.recinq.com/wave/spec-phase.schema.json",
"title": "Wave Spec Phase Output Contract",
"description": "Validates spec phase outputs for prototype-driven development pipeline",
"type": "object",
"properties": {
"phase": {
"type": "string",
"const": "spec",
"description": "Phase identifier"
},
"artifacts": {
"type": "object",
"properties": {
"spec": {
"type": "object",
"properties": {
"path": {
"type": "string",
"pattern": "^.*spec\\.md$",
"description": "Path to specification file"
},
"exists": {
"type": "boolean",
"const": true,
"description": "Specification file must exist"
},
"content_type": {
"type": "string",
"const": "markdown",
"description": "Specification content format"
}
},
"required": ["path", "exists", "content_type"],
"additionalProperties": false
},
"requirements": {
"type": "object",
"properties": {
"path": {
"type": "string",
"pattern": "^.*requirements\\.md$",
"description": "Path to requirements file"
},
"exists": {
"type": "boolean",
"const": true,
"description": "Requirements file must exist"
},
"content_type": {
"type": "string",
"const": "markdown",
"description": "Requirements content format"
}
},
"required": ["path", "exists", "content_type"],
"additionalProperties": false
}
},
"required": ["spec"],
"additionalProperties": true
},
"validation": {
"type": "object",
"properties": {
"completeness_score": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Specification completeness rating"
},
"clarity_score": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Specification clarity rating"
},
"testability_score": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Specification testability rating"
},
"specification_quality": {
"type": "string",
"enum": ["poor", "fair", "good", "excellent"],
"description": "Overall specification quality assessment"
}
},
"required": ["specification_quality"],
"additionalProperties": false
},
"metadata": {
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time",
"description": "When spec phase was completed"
},
"duration_seconds": {
"type": "number",
"minimum": 0,
"description": "Time taken for spec phase"
},
"input_description": {
"type": "string",
"minLength": 1,
"description": "Original project description input"
}
},
"required": ["timestamp", "input_description"],
"additionalProperties": false
}
},
"required": ["phase", "artifacts", "validation", "metadata"],
"additionalProperties": false
}

View File

@@ -0,0 +1,35 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Speckit Specify Status",
"description": "Status report from the specify step: feature branch creation and spec authoring.",
"type": "object",
"required": ["branch_name", "spec_file", "feature_dir", "summary"],
"properties": {
"branch_name": {
"type": "string",
"minLength": 1,
"description": "Git branch name created for the feature"
},
"spec_file": {
"type": "string",
"minLength": 1,
"description": "Path to the generated spec.md file"
},
"feature_dir": {
"type": "string",
"minLength": 1,
"description": "Path to the feature directory"
},
"summary": {
"type": "string",
"minLength": 1,
"description": "Brief description of what was created"
},
"checklist_status": {
"type": "string",
"enum": ["pass", "fail"],
"description": "Result of self-validation against the quality checklist"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,97 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Supervision Evaluation",
"description": "Quality evaluation of both output and process",
"type": "object",
"required": ["output_quality", "process_quality", "overall_score", "timestamp"],
"properties": {
"output_quality": {
"type": "object",
"required": ["correctness", "completeness", "test_coverage", "code_quality"],
"properties": {
"correctness": {
"type": "object",
"required": ["score", "findings"],
"properties": {
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
"findings": { "type": "array", "items": { "type": "string" } }
}
},
"completeness": {
"type": "object",
"required": ["score", "findings"],
"properties": {
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
"findings": { "type": "array", "items": { "type": "string" } }
}
},
"test_coverage": {
"type": "object",
"required": ["score", "findings"],
"properties": {
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
"findings": { "type": "array", "items": { "type": "string" } }
}
},
"code_quality": {
"type": "object",
"required": ["score", "findings"],
"properties": {
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
"findings": { "type": "array", "items": { "type": "string" } }
}
}
}
},
"process_quality": {
"type": "object",
"required": ["efficiency", "scope_discipline", "tool_usage"],
"properties": {
"efficiency": {
"type": "object",
"required": ["score", "findings"],
"properties": {
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
"findings": { "type": "array", "items": { "type": "string" } }
}
},
"scope_discipline": {
"type": "object",
"required": ["score", "findings"],
"properties": {
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
"findings": { "type": "array", "items": { "type": "string" } }
}
},
"tool_usage": {
"type": "object",
"required": ["score", "findings"],
"properties": {
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
"findings": { "type": "array", "items": { "type": "string" } }
}
},
"token_economy": {
"type": "object",
"properties": {
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
"findings": { "type": "array", "items": { "type": "string" } }
}
}
}
},
"overall_score": {
"type": "string",
"enum": ["excellent", "good", "adequate", "poor"]
},
"key_strengths": {
"type": "array",
"items": { "type": "string" }
},
"key_concerns": {
"type": "array",
"items": { "type": "string" }
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,83 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Supervision Evidence",
"description": "Evidence gathered for supervising completed work",
"type": "object",
"required": ["scope", "commits", "artifacts", "test_results", "timestamp"],
"properties": {
"scope": {
"type": "object",
"description": "What was inspected and how it was identified",
"required": ["description", "detection_method"],
"properties": {
"description": { "type": "string", "minLength": 5 },
"detection_method": {
"type": "string",
"enum": ["auto_detect", "pipeline_run", "branch", "pr", "freeform"]
},
"pipeline_name": { "type": "string" },
"branch_name": { "type": "string" },
"pr_number": { "type": "integer" }
}
},
"commits": {
"type": "array",
"items": {
"type": "object",
"required": ["hash", "message", "files_changed"],
"properties": {
"hash": { "type": "string" },
"message": { "type": "string" },
"author": { "type": "string" },
"files_changed": { "type": "integer" },
"insertions": { "type": "integer" },
"deletions": { "type": "integer" },
"has_session_transcript": { "type": "boolean" },
"transcript_summary": { "type": "string" }
}
}
},
"artifacts": {
"type": "array",
"description": "Pipeline workspace artifacts found",
"items": {
"type": "object",
"required": ["path", "type"],
"properties": {
"path": { "type": "string" },
"type": { "type": "string" },
"size_bytes": { "type": "integer" },
"summary": { "type": "string" }
}
}
},
"test_results": {
"type": "object",
"required": ["ran", "passed"],
"properties": {
"ran": { "type": "boolean" },
"passed": { "type": "boolean" },
"total_tests": { "type": "integer" },
"failed_tests": { "type": "integer" },
"coverage_percent": { "type": "number" },
"details": { "type": "string" }
}
},
"session_transcripts": {
"type": "array",
"description": "Claudit session transcripts from git notes",
"items": {
"type": "object",
"required": ["commit_hash", "summary"],
"properties": {
"commit_hash": { "type": "string" },
"summary": { "type": "string" },
"tool_calls_count": { "type": "integer" },
"notable_detours": { "type": "array", "items": { "type": "string" } },
"errors_encountered": { "type": "array", "items": { "type": "string" } }
}
}
},
"timestamp": { "type": "string", "format": "date-time" }
}
}

View File

@@ -0,0 +1,33 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Speckit Tasks Status",
"description": "Status report from the tasks step: dependency-ordered task breakdown generation.",
"type": "object",
"required": ["total_tasks", "feature_dir", "summary"],
"properties": {
"total_tasks": {
"type": "integer",
"minimum": 1,
"description": "Total number of tasks generated"
},
"feature_dir": {
"type": "string",
"minLength": 1,
"description": "Path to the feature directory"
},
"summary": {
"type": "string",
"minLength": 1,
"description": "Brief description of the task breakdown"
},
"tasks_per_story": {
"type": "object",
"description": "Mapping of user story identifiers to task counts"
},
"parallel_opportunities": {
"type": "integer",
"description": "Number of tasks that can be executed in parallel"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,50 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Validated Findings",
"description": "Convergent validation results from the recinq converge step",
"type": "object",
"required": ["target", "total_findings", "confirmed", "rejected", "findings"],
"properties": {
"target": {
"type": "string",
"description": "What was analyzed (path, module, or 'whole-project')"
},
"total_findings": {
"type": "integer",
"description": "Total number of divergent findings reviewed"
},
"confirmed": {
"type": "integer",
"description": "Number of findings classified as CONFIRMED or PARTIALLY_CONFIRMED"
},
"rejected": {
"type": "integer",
"description": "Number of findings classified as REJECTED"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "status", "rationale"],
"properties": {
"id": {
"type": "string",
"description": "Original finding ID (e.g. DVG-001)"
},
"status": {
"type": "string",
"enum": ["CONFIRMED", "PARTIALLY_CONFIRMED", "REJECTED"],
"description": "Validation classification"
},
"rationale": {
"type": "string",
"description": "Explanation of why the finding was classified this way"
}
},
"additionalProperties": true
},
"description": "Per-finding validation results"
}
},
"additionalProperties": true
}

View File

@@ -0,0 +1,106 @@
[17:38:38] → scan-changes (navigator) [claude-haiku via claude]
[17:38:38] scan-changes Executing agent
[17:39:00] scan-changes Bash → git log --oneline --name-status main...
[17:39:01] scan-changes Bash → git status --porcelain
[17:39:02] scan-changes Glob → **/*.md
[17:39:02] scan-changes Glob → docs/**/*
[17:39:09] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:11] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:12] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:12] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:14] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:14] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:15] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:22] scan-changes Glob → schemas/**/*
[17:39:23] scan-changes Glob → src/**/*.js
[17:39:25] scan-changes Bash → cat /home/mwc/Coding/code-crispies/....
[17:39:26] scan-changes Glob → lessons/**/*.json
[17:39:31] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:32] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:33] scan-changes Grep → @(param|returns|typedef|type|descrip...
[17:39:34] scan-changes Grep → ^\s*(export\s+)?(function|const|clas...
[17:39:52] scan-changes Bash → ls /home/mwc/Coding/code-crispies/.w...
[17:39:54] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:39:56] scan-changes Glob → CONTRIBUTING.md
[17:39:57] scan-changes Glob → CHANGELOG.md
[17:40:11] scan-changes Bash → ls /home/mwc/Coding/code-crispies/.w...
[17:40:12] scan-changes Bash → ls /home/mwc/Coding/code-crispies/.w...
[17:40:15] scan-changes Read → /home/mwc/Coding/code-crispies/.wave...
[17:40:57] scan-changes Write → /home/mwc/Coding/code-crispies/.wav...
[17:41:07] scan-changes Processing results
[17:41:07] scan-changes validating contract
[17:41:07] ✓ scan-changes completed (148.9s, 63.6k in / 7.6k out)
[17:41:07] ├─ artifact: .wave/output/scan-results.json (written)
[17:41:07] └─ contract: doc-scan-results.schema.json ✓ valid
[17:41:07] → analyze-consistency (reviewer)
[17:41:07] analyze-consistency Executing agent
[17:41:15] analyze-consistency Bash → ls -la /home/mwc/Coding/code-crispie...
[17:41:16] analyze-consistency Bash → ls -la /home/mwc/Coding/code-crispie...
[17:41:21] analyze-consistency Bash → file /home/mwc/Coding/code-crispies/...
[17:41:22] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:27] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:28] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:28] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:42] analyze-consistency Agent →
[17:41:44] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:45] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:46] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:46] analyze-consistency Glob → /home/mwc/Coding/code-crispies/.wave...
[17:41:48] analyze-consistency Glob → /home/mwc/Coding/code-crispies/.wave...
[17:41:48] analyze-consistency Glob → /home/mwc/Coding/code-crispies/.wave...
[17:41:51] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:52] analyze-consistency Grep → process\.env|import\.meta\.env
[17:41:52] analyze-consistency Grep → SUPABASE|supabase|auth|AUTH
[17:41:54] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:55] analyze-consistency Read → /home/mwc/Coding/code-crispies/.wave...
[17:41:58] analyze-consistency Grep → VITE_|process\.env
[17:42:22] analyze-consistency Bash → mkdir -p /home/mwc/Coding/code-crisp...
[17:43:07] analyze-consistency Write → /home/mwc/Coding/code-crispies/.wav...
[17:43:18] analyze-consistency Bash → node -e "
const report = require('./...
[17:43:25] analyze-consistency Processing results
[17:43:25] analyze-consistency validating contract
[17:43:25] ✓ analyze-consistency completed (138.1s, 27.3k in / 6.1k out)
[17:43:25] ├─ artifact: .wave/output/consistency-report.json (written)
[17:43:25] └─ contract: doc-consistency-report.schema.json ✓ valid
[17:43:25] → compose-report (navigator) [claude-haiku via claude]
[17:43:25] compose-report Executing agent
[17:43:32] compose-report Bash → ls .wave/artifacts/report
[17:43:36] compose-report Read → /home/mwc/Coding/code-crispies/.wave...
[17:43:40] compose-report Bash → ls .wave/output 2>/dev/null || mkdir...
[17:43:52] compose-report Write → /home/mwc/Coding/code-crispies/.wav...
[17:44:00] compose-report Processing results
[17:44:00] compose-report validating contract
[17:44:00] ✓ compose-report completed (34.9s, 8.0k in / 1.7k out)
[17:44:00] ├─ artifact: .wave/output/report.md (written)
[17:44:00] └─ contract: non_empty_file ✓ valid
[17:44:00] → publish (craftsman) [claude-opus via claude]
[17:44:00] publish Executing agent
[17:44:07] publish Read → /home/mwc/Coding/code-crispies/.wave...
[17:44:08] publish Bash → gh repo view --json nameWithOwner --...
[17:44:14] publish Bash → gh issue create \
--title "docs: d...
[17:44:22] publish Bash → ls /home/mwc/Coding/code-crispies/.w...
[17:44:26] publish Write → /home/mwc/Coding/code-crispies/.wav...
[17:44:29] publish Processing results
[17:44:29] publish validating contract
[17:44:29] ✓ publish completed (28.9s, 5.8k in / 1.0k out)
[17:44:29] ├─ artifact: .wave/output/issue-result.json (written)
[17:44:29] └─ contract: doc-issue-result.schema.json ✓ valid
[17:44:29] ⚠ publish [publish] outcome: .issue_url at .wave/output/issue-result.json: key "issue_url" not found
2026/03/28 17:44:29 [retro] quantitative retrospective saved for run audit-doc-20260328-173838-e10a
✓ Pipeline 'audit-doc' completed successfully (351.2s, 121.1k tokens)
Outcomes
✓ Branch: audit-doc-20260328-173838-e10a (local only)
! [publish] outcome: .issue_url at .wave/output/issue-result.json: key "issue_url" not found
4 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-doc-20260328-173838-e10a/__wt_audit-doc-20260328-173838-e10a/.wave/output/scan-results.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-doc-20260328-173838-e10a/__wt_audit-doc-20260328-173838-e10a/.wave/output/consistency-report.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-doc-20260328-173838-e10a/__wt_audit-doc-20260328-173838-e10a/.wave/output/report.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-doc-20260328-173838-e10a/__wt_audit-doc-20260328-173838-e10a/.wave/output/issue-result.json

View File

@@ -0,0 +1,101 @@
[13:59:48] → audit (navigator) [claude-haiku via claude]
[13:59:48] audit Executing agent
[14:00:04] audit Agent →
[14:00:10] audit Agent →
[14:00:16] audit Agent →
[14:00:21] audit Agent →
[14:00:24] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:24] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:25] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:25] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:26] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:27] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:27] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:28] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:29] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:29] audit Bash → ls /home/mwc/Coding/code-crispies/.w...
[14:00:30] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:30] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:31] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:31] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:32] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:33] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:33] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:34] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:36] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:36] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:36] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:38] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:38] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:39] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:40] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:41] audit Bash → wc -l /home/mwc/Coding/code-crispies...
[14:00:41] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:41] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:42] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:43] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:44] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:45] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:45] audit Bash → tree -L 2 /home/mwc/Coding/code-cris...
[14:00:46] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:47] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:47] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:48] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:50] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:50] audit Bash → wc -l /home/mwc/Coding/code-crispies...
[14:00:52] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:53] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:53] audit Bash → grep -n "validate\|Validate" /home/m...
[14:00:55] audit Bash → ls -la /home/mwc/Coding/code-crispie...
[14:00:56] audit Bash → head -2000 /home/mwc/Coding/code-cri...
[14:00:57] audit Bash → find /home/mwc/Coding/code-crispies/...
[14:00:58] audit Bash → ls /home/mwc/Coding/code-crispies/.w...
[14:00:58] audit Bash → wc -l /home/mwc/Coding/code-crispies...
[14:00:59] audit Grep → ^import |^export |^from "
[14:01:00] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:01:01] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:01:02] audit Bash → grep -n "^function \|^export functio...
[14:01:02] audit Bash → grep -n "loadModuleFromUrl\|addCusto...
[14:01:05] audit Bash → grep -n "TODO\|FIXME\|HACK\|BUG\|XXX...
[14:01:05] audit Bash → ls /home/mwc/Coding/code-crispies/.w...
[14:01:07] audit Bash → grep -n "loadModules\|setModules\|ad...
[14:01:07] audit Bash → grep -n "try \|catch \|if (!.*) \|if...
[14:01:09] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:01:10] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:01:12] audit Bash → cd /home/mwc/Coding/code-crispies/.w...
[14:01:14] audit Bash → grep -A 5 "case \"" /home/mwc/Coding...
[14:01:14] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:01:16] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:01:18] audit Bash → head -100 /home/mwc/Coding/code-cris...
[14:02:04] audit Bash → cd /home/mwc/Coding/code-crispies/.w...
[14:02:05] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:02:06] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:02:12] audit Bash → npm install 2>&1 | tail -5
[14:02:18] audit Bash → cd /home/mwc/Coding/code-crispies &&...
[14:02:21] audit Bash → cd /home/mwc/Coding/code-crispies &&...
[14:02:22] audit Bash → cd /home/mwc/Coding/code-crispies &&...
[14:02:42] audit Bash → cd /home/mwc/Coding/code-crispies &&...
[14:02:43] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:02:43] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:03:17] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:03:17] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:03:18] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:03:21] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:03:22] audit Read → /home/mwc/Coding/code-crispies/.wave...
[14:03:26] audit Bash → cd /home/mwc/Coding/code-crispies &&...
[14:03:28] audit Bash → cd /home/mwc/Coding/code-crispies &&...
[14:03:32] audit Bash → ls /home/mwc/Coding/code-crispies/.w...
[14:05:44] audit Write → /home/mwc/Coding/code-crispies/.wav...
[14:05:51] audit Processing results
[14:05:51] audit validating contract
[14:05:51] ✓ audit completed (362.6s, 52.1k in / 9.9k out)
[14:05:51] ├─ artifact: .wave/output/dx-audit-report.md (written)
[14:05:51] └─ contract: non_empty_file ✓ valid
2026/03/28 14:05:51 [retro] quantitative retrospective saved for run audit-dx-20260328-135948-267b
✓ Pipeline 'audit-dx' completed successfully (362.8s, 62.0k tokens)
1 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-dx-20260328-135948-267b/audit/.wave/output/dx-audit-report.md

View File

@@ -0,0 +1,144 @@
[17:53:13] → scan-lessons (navigator) [claude-haiku via claude]
[17:53:13] scan-lessons Executing agent
[17:53:19] scan-lessons Glob → lessons/**/*.json
[17:53:20] scan-lessons Bash → ls -la /home/mwc/Coding/code-crispie...
[17:53:23] scan-lessons Glob → **/*.json
[17:53:27] scan-lessons Glob → lessons/**/*.json
[17:53:32] scan-lessons Bash → ls -la /home/mwc/Coding/code-crispie...
[17:53:33] scan-lessons Glob → **/lessons/**/*.json
[17:53:53] scan-lessons Agent →
[17:53:57] scan-lessons Agent →
[17:54:03] scan-lessons Agent →
[17:54:07] scan-lessons Agent →
[17:54:11] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:11] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:12] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:13] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:13] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:14] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:14] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:15] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:17] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:18] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:18] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:18] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:19] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:21] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:21] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:26] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:26] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[17:54:27] scan-lessons Grep → "solution"
[18:04:37] scan-lessons Read → /home/mwc/.claude/projects/-home-mwc...
[18:04:39] scan-lessons Read → /home/mwc/.claude/projects/-home-mwc...
[18:04:40] scan-lessons Read → /home/mwc/.claude/projects/-home-mwc...
[18:09:51] scan-lessons Read → /home/mwc/.claude/projects/-home-mwc...
[18:09:59] scan-lessons Read → /home/mwc/.claude/projects/-home-mwc...
[18:10:08] scan-lessons Bash → cat /home/mwc/.claude/projects/-home...
[18:10:25] scan-lessons Bash → python3 << 'PYEOF'
import json, re, ...
[18:11:15] scan-lessons Bash → python3 << 'PYEOF'
import json, re, ...
[18:11:49] scan-lessons Bash → python3 << 'PYEOF'
import json
path...
[18:12:17] scan-lessons Bash → python3 << 'PYEOF'
import json, re
...
[18:12:31] scan-lessons Bash → python3 << 'PYEOF'
import json
path...
[18:12:37] scan-lessons Processing results
[18:12:37] scan-lessons validating contract
[18:12:37] ✓ scan-lessons completed (1164.0s, 122.1k in / 14.1k out)
[18:12:37] ├─ artifact: .wave/output/lesson-inventory.json (written)
[18:12:37] └─ contract: lesson-inventory.schema.json ⚠ soft failure
[18:12:37] → pedagogy-audit (pedagogy-auditor) [claude-opus via claude]
[18:12:37] pedagogy-audit Executing agent
[18:12:42] pedagogy-audit Bash → ls .wave/artifacts/lessons/
[18:12:42] pedagogy-audit Bash → ls .wave/output/ 2>/dev/null || echo...
[18:12:45] pedagogy-audit Bash → file .wave/artifacts/lessons && wc -...
[18:12:48] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[18:12:51] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[18:12:56] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[18:13:01] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[18:13:02] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[18:13:03] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[18:13:05] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[18:13:49] pedagogy-audit ToolSearch → select:TodoWrite
[18:13:54] pedagogy-audit TodoWrite → Write pedagogy-report.json with...
[18:18:19] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[18:18:31] pedagogy-audit TodoWrite → Write pedagogy-report.md with h...
[18:19:55] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[18:20:01] pedagogy-audit TodoWrite → 3/3 tasks
[18:20:20] pedagogy-audit Processing results
[18:20:20] ✓ pedagogy-audit completed (462.8s, 154.1k in / 26.7k out)
[18:20:20] ├─ artifact: .wave/output/pedagogy-report.md (written)
[18:20:20] └─ artifact: .wave/output/pedagogy-report.json (written)
[18:20:20] → improvement-plan (planner) [claude-haiku via claude]
[18:20:20] improvement-plan Executing agent
[18:20:30] improvement-plan Agent →
[18:20:35] improvement-plan Agent →
[18:20:38] improvement-plan Bash → find /home/mwc/Coding/code-crispies ...
[18:20:38] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[18:20:40] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[18:20:40] improvement-plan Glob → /home/mwc/Coding/code-crispies/lesso...
[18:20:41] improvement-plan Bash → pwd && ls -la
[18:20:42] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[18:20:42] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[18:20:44] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[18:20:46] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:46] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:47] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:48] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:48] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:49] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[18:20:52] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[18:20:53] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:53] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:53] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:54] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:58] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:58] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:59] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:20:59] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:21:00] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:21:03] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:21:03] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:21:04] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:21:26] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[18:21:55] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:21:55] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:21:56] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:22:02] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:22:03] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:22:04] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:22:09] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:22:10] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:22:10] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[18:22:17] improvement-plan Read → /home/mwc/Coding/code-crispies/src/h...
[18:22:19] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[18:22:24] improvement-plan ToolSearch → select:TodoWrite
[18:22:29] improvement-plan TodoWrite → Write improvement-plan.json wit...
[18:26:22] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[18:26:29] improvement-plan TodoWrite → Write improvement-plan.md as hu...
[18:27:51] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[18:27:58] improvement-plan TodoWrite → 4/4 tasks
[18:28:08] improvement-plan Processing results
[18:28:08] ✓ improvement-plan completed (468.6s, 125.0k in / 22.6k out)
[18:28:08] ├─ artifact: .wave/output/improvement-plan.md (written)
[18:28:08] └─ artifact: .wave/output/improvement-plan.json (written)
2026/03/28 18:28:08 [retro] quantitative retrospective saved for run audit-pedagogy-20260328-175313-79a5
✓ Pipeline 'audit-pedagogy' completed successfully (2095.6s, 464.5k tokens)
5 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-175313-79a5/scan-lessons/.wave/output/lesson-inventory.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-175313-79a5/pedagogy-audit/.wave/output/pedagogy-report.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-175313-79a5/pedagogy-audit/.wave/output/pedagogy-report.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-175313-79a5/improvement-plan/.wave/output/improvement-plan.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-175313-79a5/improvement-plan/.wave/output/improvement-plan.json

View File

@@ -0,0 +1,136 @@
[19:42:43] → scan-lessons (navigator) [claude-haiku via claude]
[19:42:43] scan-lessons Executing agent
[19:42:50] scan-lessons Glob → lessons/**/*.json
[19:42:50] scan-lessons ToolSearch → select:TodoWrite
[19:42:56] scan-lessons Bash → ls /home/mwc/Coding/code-crispies/le...
[19:42:56] scan-lessons Glob → **/lessons/**/*.json
[19:43:06] scan-lessons TodoWrite → Read all English lesson JSON files
[19:43:12] scan-lessons Agent →
[19:43:14] scan-lessons Agent →
[19:43:17] scan-lessons Agent →
[19:43:19] scan-lessons Agent →
[19:43:21] scan-lessons Agent →
[19:43:23] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:43:23] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:43:24] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:43:24] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:43:25] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:43:25] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:00] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:01] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:02] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:11] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:15] scan-lessons Read → /home/mwc/.claude/projects/-home-mwc...
[19:47:22] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:23] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:23] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:27] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:27] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:28] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[19:47:49] scan-lessons TodoWrite → Generate lesson inventory via s...
[19:47:54] scan-lessons Bash → mkdir -p /home/mwc/Coding/code-crisp...
[19:48:16] scan-lessons Write → /home/mwc/Coding/code-crispies/.wav...
[19:48:20] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[19:48:38] scan-lessons Bash → node -e "const d=JSON.parse(require(...
[19:48:59] scan-lessons TodoWrite → Verify output quality and compl...
[19:49:11] scan-lessons Bash → node -e "
const d=JSON.parse(require...
[19:49:20] scan-lessons Bash → wc -c /home/mwc/Coding/code-crispies...
[19:49:26] scan-lessons TodoWrite → 3/3 tasks
[19:49:37] scan-lessons Processing results
[19:49:37] scan-lessons validating contract
[19:49:37] ✓ scan-lessons completed (414.0s, 198.4k in / 8.1k out)
[19:49:37] ├─ artifact: .wave/output/lesson-inventory.json (written)
[19:49:37] └─ contract: lesson-inventory.schema.json ⚠ soft failure
[19:49:37] → pedagogy-audit (pedagogy-auditor) [claude-opus via claude]
[19:49:37] pedagogy-audit Executing agent
[19:49:43] pedagogy-audit Bash → ls .wave/artifacts/lessons/
[19:49:44] pedagogy-audit Bash → ls .wave/output/ 2>/dev/null || echo...
[19:49:48] pedagogy-audit Bash → file .wave/artifacts/lessons && wc -...
[19:49:51] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:49:55] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:01] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:02] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:04] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:04] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:05] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:06] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:07] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:08] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:09] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:50:09] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[19:51:25] pedagogy-audit ToolSearch → select:TodoWrite
[19:51:32] pedagogy-audit TodoWrite → Write JSON audit report to .wav...
[19:55:57] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[19:56:03] pedagogy-audit TodoWrite → Write markdown summary to .wave...
[19:57:30] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[19:57:36] pedagogy-audit TodoWrite → 3/3 tasks
[19:57:46] pedagogy-audit Processing results
[19:57:46] ✓ pedagogy-audit completed (488.8s, 223.6k in / 29.9k out)
[19:57:46] ├─ artifact: .wave/output/pedagogy-report.md (written)
[19:57:46] └─ artifact: .wave/output/pedagogy-report.json (written)
[19:57:46] → improvement-plan (planner) [claude-haiku via claude]
[19:57:46] improvement-plan Executing agent
[19:57:57] improvement-plan Agent →
[19:57:59] improvement-plan Agent →
[19:58:01] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[19:58:01] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[19:58:02] improvement-plan Glob → **/lessons/**/*.json
[19:58:04] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[19:58:04] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[19:58:05] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[19:58:06] improvement-plan Bash → pwd && ls -la
[19:58:07] improvement-plan Bash → ls -R /home/mwc/Coding/code-crispies...
[19:58:07] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[19:58:14] improvement-plan Bash → find /home/mwc/Coding/code-crispies ...
[19:58:16] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[19:58:17] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[19:58:17] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[19:58:18] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:19] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:20] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[19:58:22] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:22] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:23] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:28] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[19:58:29] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:30] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:30] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:34] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:34] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:58:35] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[19:59:49] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[20:00:09] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:09] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:09] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:15] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:16] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:23] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:23] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:24] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:24] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:32] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[20:00:33] improvement-plan Read → /home/mwc/Coding/code-crispies/schem...
[20:00:53] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[20:00:58] improvement-plan ToolSearch → select:TodoWrite
[20:01:04] improvement-plan TodoWrite → Write improvement-plan.json wit...
[20:04:22] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[20:04:28] improvement-plan TodoWrite → Write improvement-plan.md as hu...
[20:06:04] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[20:06:11] improvement-plan TodoWrite → 2/2 tasks
[20:06:22] improvement-plan Processing results
[20:06:22] ✓ improvement-plan completed (515.7s, 122.8k in / 21.3k out)
[20:06:22] ├─ artifact: .wave/output/improvement-plan.md (written)
[20:06:22] └─ artifact: .wave/output/improvement-plan.json (written)
2026/03/28 20:06:22 [retro] quantitative retrospective saved for run audit-pedagogy-20260328-194243-c189
✓ Pipeline 'audit-pedagogy' completed successfully (1418.7s, 604.1k tokens)
5 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-194243-c189/scan-lessons/.wave/output/lesson-inventory.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-194243-c189/pedagogy-audit/.wave/output/pedagogy-report.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-194243-c189/pedagogy-audit/.wave/output/pedagogy-report.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-194243-c189/improvement-plan/.wave/output/improvement-plan.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-194243-c189/improvement-plan/.wave/output/improvement-plan.json

View File

@@ -0,0 +1,231 @@
warning: input looks like free text — consider using: impl-feature, impl-hotfix, impl-improve
[21:33:12] → scan-lessons (navigator) [claude-haiku via claude]
[21:33:12] scan-lessons Executing agent
[21:33:22] scan-lessons Glob → lessons/**/*.json
[21:33:22] scan-lessons ToolSearch → select:TodoWrite
[21:33:29] scan-lessons Glob → **/lessons/**/*.json
[21:33:31] scan-lessons Bash → ls /home/mwc/Coding/code-crispies/le...
[21:33:39] scan-lessons TodoWrite → Read all English lesson JSON fi...
[21:33:45] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:33:45] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:33:46] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:33:47] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:33:47] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:33:48] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:33:48] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:33:57] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:33:58] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:33:59] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:00] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:00] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:01] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:01] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:10] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:11] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:12] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:13] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:21] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:21] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:22] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:23] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:24] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:24] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:33] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:33] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:34] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:35] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:36] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:49] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:34:57] scan-lessons TodoWrite → Analyze each exercise and write...
[21:35:05] scan-lessons Bash → ls -d /home/mwc/Coding/code-crispies...
[21:35:42] scan-lessons Bash → mkdir -p /home/mwc/Coding/code-crisp...
[21:36:00] scan-lessons Agent →
[21:36:07] scan-lessons Bash → ls /home/mwc/Coding/code-crispies/le...
[21:36:07] scan-lessons Bash → ls /home/mwc/Coding/code-crispies/le...
[21:36:12] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:12] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:13] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:14] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:15] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:15] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:26] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:26] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:27] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:27] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:28] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:29] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:45] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:46] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:47] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:47] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:48] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:48] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:49] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:54] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:54] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:55] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:56] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:36:57] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:37:03] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:37:03] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:37:04] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:37:05] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:37:05] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:37:06] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:37:12] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:37:17] scan-lessons Bash → mkdir -p /home/mwc/Coding/code-crisp...
[21:38:01] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[21:38:08] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[21:38:18] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[21:38:28] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[21:38:39] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[21:38:45] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[21:38:54] scan-lessons Bash → wc -l /home/mwc/Coding/code-crispies...
[21:39:10] scan-lessons Bash → python3 -c "import json; data = json...
[21:39:16] scan-lessons Bash → python3 -c "
import json
data = json...
[21:39:22] scan-lessons TodoWrite → 2/2 tasks
[21:39:28] scan-lessons Processing results
[21:39:28] scan-lessons validating contract
[21:39:28] ✓ scan-lessons completed (375.4s, 199.3k in / 5.1k out)
[21:39:28] ├─ artifact: .wave/output/lesson-inventory.json (written)
[21:39:28] └─ contract: lesson-inventory.schema.json ⚠ soft failure
[21:39:28] → pedagogy-audit (pedagogy-auditor) [claude-opus via claude]
[21:39:28] pedagogy-audit Executing agent
[21:39:34] pedagogy-audit Bash → ls .wave/artifacts/lessons/
[21:39:35] pedagogy-audit Bash → ls .wave/output/ 2>/dev/null || echo...
[21:39:39] pedagogy-audit Bash → file .wave/artifacts/lessons && wc -...
[21:39:43] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[21:39:47] pedagogy-audit Bash → ls .wave/output/
[21:39:50] pedagogy-audit Bash → ls .wave/artifacts/
[21:39:55] pedagogy-audit Glob → **/*.json
[21:39:55] pedagogy-audit Glob → lessons/**/*.json
[21:39:59] pedagogy-audit Glob → **/*.json
[21:40:03] pedagogy-audit Glob → lessons/*.json
[21:40:03] pedagogy-audit Glob → src/lessons/*.json
[21:40:09] pedagogy-audit Bash → find /home/mwc/Coding/code-crispies ...
[21:40:13] pedagogy-audit Bash → find /home/mwc/Coding/code-crispies/...
[21:40:19] pedagogy-audit ToolSearch → select:TodoWrite
[21:40:28] pedagogy-audit TodoWrite → Read all 41 lesson module JSON ...
[21:40:36] pedagogy-audit Agent →
[21:40:37] pedagogy-audit Agent →
[21:40:39] pedagogy-audit Agent →
[21:40:41] pedagogy-audit Agent →
[21:40:43] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:40:44] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:40:44] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:40:44] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:40:45] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:40:46] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:40:46] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:40:47] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:40:50] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:40:50] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:47:51] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:47:52] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:47:53] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:47:54] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:47:54] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:02] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:03] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:03] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:04] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:04] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:17] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:18] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:19] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:19] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:19] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:26] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:27] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:27] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:27] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:48:28] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:49:54] pedagogy-audit TodoWrite → Analyze each module for Bloom's...
[21:49:58] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:49:59] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:50:00] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:50:00] pedagogy-audit Read → /home/mwc/Coding/code-crispies/lesso...
[21:50:09] pedagogy-audit TodoWrite → Write pedagogy-report.json
[21:54:18] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[21:54:25] pedagogy-audit TodoWrite → Write pedagogy-report.md
[21:55:59] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[21:56:06] pedagogy-audit TodoWrite → 4/4 tasks
[21:56:16] pedagogy-audit Processing results
[21:56:16] ✓ pedagogy-audit completed (1008.3s, 258.9k in / 32.5k out)
[21:56:16] ├─ artifact: .wave/output/pedagogy-report.md (written)
[21:56:16] └─ artifact: .wave/output/pedagogy-report.json (written)
[21:56:16] → improvement-plan (planner) [claude-haiku via claude]
[21:56:16] improvement-plan Executing agent
[21:56:24] improvement-plan Agent →
[21:56:26] improvement-plan Agent →
[21:56:28] improvement-plan Glob → lessons/**/*.json
[21:56:28] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[21:56:29] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[21:56:30] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[21:56:30] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[21:56:31] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[21:56:32] improvement-plan Bash → find /home/mwc/Coding/code-crispies ...
[21:56:33] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[21:56:35] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[21:56:36] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[21:56:37] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:56:38] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:56:38] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:39] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:39] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:42] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:43] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:43] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:46] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:47] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:50] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:50] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:51] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:53] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:54] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:55] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:57] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:58] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:56:58] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:57:02] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:57:02] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:57:03] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:57:44] improvement-plan Glob → .wave/artifacts/audit/**/*
[21:57:47] improvement-plan Glob → **/.wave/artifacts/audit/**/*
[21:57:52] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[21:57:56] improvement-plan Bash → find /home/mwc/Coding/code-crispies/...
[21:57:59] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:58:00] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:58:06] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:58:07] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:58:08] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:58:13] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:58:14] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:58:15] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:58:15] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:58:21] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[21:58:27] improvement-plan Bash → ls /home/mwc/Coding/code-crispies/.w...
[21:58:31] improvement-plan ToolSearch → select:TodoWrite
[21:58:36] improvement-plan TodoWrite → Write improvement-plan.json wit...
[22:01:46] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[22:01:52] improvement-plan TodoWrite → Write improvement-plan.md as hu...
[22:03:42] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[22:03:48] improvement-plan TodoWrite → 2/2 tasks
[22:03:59] improvement-plan Processing results
[22:03:59] ✓ improvement-plan completed (463.2s, 121.1k in / 20.5k out)
[22:03:59] ├─ artifact: .wave/output/improvement-plan.md (written)
[22:03:59] └─ artifact: .wave/output/improvement-plan.json (written)
2026/03/28 22:03:59 [retro] quantitative retrospective saved for run audit-pedagogy-20260328-213312-b6f8
✓ Pipeline 'audit-pedagogy' completed successfully (1847.1s, 637.3k tokens)
5 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-213312-b6f8/scan-lessons/.wave/output/lesson-inventory.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-213312-b6f8/pedagogy-audit/.wave/output/pedagogy-report.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-213312-b6f8/pedagogy-audit/.wave/output/pedagogy-report.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-213312-b6f8/improvement-plan/.wave/output/improvement-plan.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260328-213312-b6f8/improvement-plan/.wave/output/improvement-plan.json

View File

@@ -0,0 +1,115 @@
warning: input looks like free text — consider using: impl-feature, impl-hotfix, impl-improve
[00:17:52] → scan-lessons (navigator) [claude-haiku via claude]
[00:17:52] scan-lessons Executing agent
[00:17:58] scan-lessons Glob → lessons/**/*.json
[00:17:59] scan-lessons ToolSearch → select:TodoWrite
[00:18:03] scan-lessons Bash → ls /home/mwc/Coding/code-crispies/le...
[00:18:04] scan-lessons Glob → **/*.json
[00:18:22] scan-lessons TodoWrite → Read sample lesson file to unde...
[00:18:22] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[00:18:53] scan-lessons TodoWrite → Read and analyze all 41 English...
[00:19:10] scan-lessons Agent →
[00:19:15] scan-lessons Agent →
[00:19:20] scan-lessons Agent →
[00:19:25] scan-lessons Agent →
[00:19:31] scan-lessons Agent →
[00:19:34] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[00:19:35] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[00:19:35] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[00:19:36] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[00:19:36] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[00:19:37] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[00:19:37] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[00:19:38] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[00:24:06] scan-lessons Read → /home/mwc/.claude/projects/-home-mwc...
[00:24:35] scan-lessons TodoWrite → Compile results and write lesso...
[00:24:37] scan-lessons Bash → mkdir -p /home/mwc/Coding/code-crisp...
[00:25:20] scan-lessons Write → /home/mwc/Coding/code-crispies/.wav...
[00:25:26] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:25:33] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:25:43] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:26:27] scan-lessons Read → /home/mwc/Coding/code-crispies/.wave...
[00:26:53] scan-lessons Edit → /home/mwc/Coding/code-crispies/.wave...
[00:27:21] scan-lessons Edit → /home/mwc/Coding/code-crispies/.wave...
[00:27:27] scan-lessons Edit → /home/mwc/Coding/code-crispies/.wave...
[00:28:24] scan-lessons Edit → /home/mwc/Coding/code-crispies/.wave...
[00:28:34] scan-lessons Edit → /home/mwc/Coding/code-crispies/.wave...
[00:28:38] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:28:47] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:30:09] scan-lessons Edit → /home/mwc/Coding/code-crispies/.wave...
[00:31:26] scan-lessons Edit → /home/mwc/Coding/code-crispies/.wave...
[00:31:31] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:31:39] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:32:02] scan-lessons Edit → /home/mwc/Coding/code-crispies/.wave...
[00:32:06] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:32:19] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:32:24] scan-lessons Bash → ls -la /home/mwc/Coding/code-crispie...
[00:32:33] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:32:39] scan-lessons Bash → cd /home/mwc/Coding/code-crispies &&...
[00:32:44] scan-lessons TodoWrite → 3/3 tasks
[00:32:54] scan-lessons Processing results
[00:32:54] scan-lessons validating contract
[00:32:54] ✓ scan-lessons completed (902.2s, 193.8k in / 39.0k out)
[00:32:54] ├─ artifact: .wave/output/lesson-inventory.json (written)
[00:32:54] └─ contract: lesson-inventory.schema.json ⚠ soft failure
[00:32:54] → pedagogy-audit (pedagogy-auditor) [claude-opus via claude]
[00:32:54] pedagogy-audit Executing agent
[00:33:01] pedagogy-audit Bash → ls .wave/artifacts/lessons/
[00:33:01] pedagogy-audit Bash → ls .wave/output/ 2>/dev/null || echo...
[00:33:05] pedagogy-audit Bash → file .wave/artifacts/lessons && wc -...
[00:33:10] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[00:33:14] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[00:33:23] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[00:33:23] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[00:33:24] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[00:33:25] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[00:33:25] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[00:34:18] pedagogy-audit Bash → mkdir -p .wave/output
[00:34:22] pedagogy-audit ToolSearch → select:TodoWrite
[00:34:27] pedagogy-audit TodoWrite → Write pedagogy-report.json with...
[00:38:55] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[00:39:04] pedagogy-audit TodoWrite → Write pedagogy-report.md with h...
[00:40:39] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[00:40:44] pedagogy-audit TodoWrite → 3/3 tasks
[00:40:53] pedagogy-audit Processing results
[00:40:53] ✓ pedagogy-audit completed (478.6s, 145.6k in / 26.8k out)
[00:40:53] ├─ artifact: .wave/output/pedagogy-report.md (written)
[00:40:53] └─ artifact: .wave/output/pedagogy-report.json (written)
[00:40:53] → improvement-plan (planner) [claude-haiku via claude]
[00:40:53] improvement-plan Executing agent
[00:40:59] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[00:41:00] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[00:41:05] improvement-plan Bash → file /home/mwc/Coding/code-crispies/...
[00:41:09] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[00:41:28] improvement-plan Agent →
[00:41:29] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[00:41:30] improvement-plan Glob → /home/mwc/Coding/code-crispies/lesso...
[00:41:50] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[00:41:50] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[00:41:51] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[00:41:57] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[00:41:58] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[00:42:03] improvement-plan Read → /home/mwc/Coding/code-crispies/src/h...
[00:42:03] improvement-plan Read → /home/mwc/Coding/code-crispies/lesso...
[00:42:28] improvement-plan ToolSearch → select:TodoWrite
[00:42:33] improvement-plan TodoWrite → Write improvement-plan.json wit...
[00:46:43] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[00:46:55] improvement-plan TodoWrite → Write improvement-plan.md as hu...
[00:48:38] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[00:48:44] improvement-plan TodoWrite → 4/4 tasks
[00:48:56] improvement-plan Processing results
[00:48:56] ✓ improvement-plan completed (483.6s, 123.8k in / 25.9k out)
[00:48:56] ├─ artifact: .wave/output/improvement-plan.md (written)
[00:48:56] └─ artifact: .wave/output/improvement-plan.json (written)
2026/03/29 00:48:56 [retro] quantitative retrospective saved for run audit-pedagogy-20260329-001752-e77c
✓ Pipeline 'audit-pedagogy' completed successfully (1864.7s, 554.9k tokens)
5 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-001752-e77c/scan-lessons/.wave/output/lesson-inventory.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-001752-e77c/pedagogy-audit/.wave/output/pedagogy-report.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-001752-e77c/pedagogy-audit/.wave/output/pedagogy-report.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-001752-e77c/improvement-plan/.wave/output/improvement-plan.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-001752-e77c/improvement-plan/.wave/output/improvement-plan.json

View File

@@ -0,0 +1,103 @@
warning: input looks like free text — consider using: impl-feature, impl-hotfix, impl-improve
[21:09:10] → scan-lessons (navigator) [claude-haiku via claude]
[21:09:10] scan-lessons Executing agent
[21:09:18] scan-lessons Glob → lessons/**/*.json
[21:09:18] scan-lessons ToolSearch → select:TodoWrite
[21:09:26] scan-lessons Glob → **/lessons/**/*.json
[21:09:26] scan-lessons Glob → **/lessons/*.json
[21:09:27] scan-lessons Bash → ls -la /home/mwc/Coding/code-crispie...
[21:09:59] scan-lessons TodoWrite → Read all English lesson JSON files
[21:14:22] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:22] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:23] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:24] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:24] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:25] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:25] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:39] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:40] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:40] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:42] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:42] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:43] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:44] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:14:44] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:15:32] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:15:33] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:15:34] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:15:34] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:15:37] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:15:37] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:15:53] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:15:53] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:17:23] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:17:38] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:17:38] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:17:43] scan-lessons Read → /home/mwc/Coding/code-crispies/lesso...
[21:17:48] scan-lessons TodoWrite → Analyze each exercise and build...
[21:17:57] scan-lessons Bash → mkdir -p /home/mwc/Coding/code-crisp...
[21:25:07] scan-lessons Write → /home/mwc/Coding/code-crispies/.wav...
[21:25:24] scan-lessons Bash → python3 -c "import json; data = json...
[21:25:43] scan-lessons TodoWrite → 3/3 tasks
[21:25:57] scan-lessons Edit → /home/mwc/Coding/code-crispies/.wave...
[21:26:09] scan-lessons Processing results
[21:26:09] scan-lessons validating contract
[21:26:09] ✓ scan-lessons completed (1018.4s, 391.2k in / 43.1k out)
[21:26:09] ├─ artifact: .wave/output/lesson-inventory.json (written)
[21:26:09] └─ contract: lesson-inventory.schema.json ⚠ soft failure
[21:26:09] → pedagogy-audit (pedagogy-auditor) [claude-opus via claude]
[21:26:09] pedagogy-audit Executing agent
[21:26:22] pedagogy-audit Bash → ls .wave/artifacts/lessons/
[21:26:22] pedagogy-audit Bash → ls .wave/output/ 2>/dev/null || echo...
[21:26:30] pedagogy-audit Bash → file .wave/artifacts/lessons && wc -...
[21:26:39] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[21:27:46] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[21:28:34] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[21:32:34] pedagogy-audit Read → /home/mwc/Coding/code-crispies/.wave...
[21:39:02] pedagogy-audit ToolSearch → select:TodoWrite
[21:39:09] pedagogy-audit TodoWrite → Write pedagogy-report.json with...
[21:45:02] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[21:45:09] pedagogy-audit TodoWrite → Write pedagogy-report.md with h...
[21:46:37] pedagogy-audit Write → /home/mwc/Coding/code-crispies/.wav...
[21:46:43] pedagogy-audit TodoWrite → 3/3 tasks
[21:46:55] pedagogy-audit Processing results
[21:46:55] ✓ pedagogy-audit completed (1246.0s, 124.2k in / 34.8k out)
[21:46:55] ├─ artifact: .wave/output/pedagogy-report.md (written)
[21:46:55] └─ artifact: .wave/output/pedagogy-report.json (written)
[21:46:55] → improvement-plan (planner) [claude-haiku via claude]
[21:46:55] improvement-plan Executing agent
[21:47:02] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[21:47:03] improvement-plan Bash → ls -la /home/mwc/Coding/code-crispie...
[21:47:06] improvement-plan Bash → file /home/mwc/Coding/code-crispies/...
[21:47:09] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:47:13] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:47:17] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:47:20] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:47:23] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:47:27] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:47:31] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:47:34] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:47:39] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:47:45] improvement-plan Read → /home/mwc/Coding/code-crispies/.wave...
[21:48:08] improvement-plan ToolSearch → select:TodoWrite
[21:48:41] improvement-plan TodoWrite → Write improvement-plan.json wit...
[21:52:56] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[21:53:03] improvement-plan TodoWrite → Write improvement-plan.md as hu...
[21:54:52] improvement-plan Write → /home/mwc/Coding/code-crispies/.wav...
[21:54:57] improvement-plan TodoWrite → 3/3 tasks
[21:55:07] improvement-plan Processing results
[21:55:07] ✓ improvement-plan completed (492.6s, 79.8k in / 26.8k out)
[21:55:07] ├─ artifact: .wave/output/improvement-plan.md (written)
[21:55:07] └─ artifact: .wave/output/improvement-plan.json (written)
2026/03/29 21:55:07 [retro] quantitative retrospective saved for run audit-pedagogy-20260329-210909-22e5
✓ Pipeline 'audit-pedagogy' completed successfully (2757.8s, 700.1k tokens)
5 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-210909-22e5/scan-lessons/.wave/output/lesson-inventory.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-210909-22e5/pedagogy-audit/.wave/output/pedagogy-report.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-210909-22e5/pedagogy-audit/.wave/output/pedagogy-report.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-210909-22e5/improvement-plan/.wave/output/improvement-plan.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-pedagogy-20260329-210909-22e5/improvement-plan/.wave/output/improvement-plan.json

View File

@@ -0,0 +1,225 @@
[15:27:11] → scan (navigator) [claude-haiku via claude]
[15:27:11] scan Executing agent
[15:27:29] scan Agent →
[15:27:31] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:27:33] scan Bash → ls -la /home/mwc/Coding/code-crispie...
[15:27:36] scan Grep → innerHTML|outerHTML|insertAdjacentHTML
[15:27:37] scan Grep → document\.write
[15:27:38] scan Grep → createElement\s*\(\s*['\"]?script['\...
[15:27:38] scan Grep → postMessage
[15:27:46] scan Grep → srcdoc|iframe.*src|blob:|data:
[15:27:47] scan Grep → URL\.parse|URLSearchParams|location\...
[15:27:47] scan Grep → \$\{.*\}|template.*inject
[15:27:50] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:27:54] scan Bash → grep -n "iframe\|srcdoc\|contentWind...
[15:28:01] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:10] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:14] scan Grep → \.write\(|innerHTML.*=|\.innerHTML\s...
[15:28:14] scan Glob → src/**/*.js
[15:28:17] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:28:22] scan Bash → grep -rn "addEventListener.*message\...
[15:28:24] scan Bash → grep -n "marked\|sanitize\|DOMPurify...
[15:28:27] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:30] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:33] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:35] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:38] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:42] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:45] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:47] scan Bash → grep -n "sectionContent\s*=" /home/m...
[15:28:50] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:55] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:28:57] scan Bash → grep -n "dataset\|getAttribute\|data...
[15:29:08] scan Bash → grep -n "window\.location\|location\...
[15:29:11] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:29:15] scan Bash → grep -rn "marked\." /home/mwc/Coding...
[15:29:18] scan Bash → grep -rn "script\|<iframe\|postMessa...
[15:29:26] scan Bash → grep -n "lessonDescription\|lesson\....
[15:29:29] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:29:32] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:29:35] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:29:45] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:29:49] scan Bash → grep -A5 "mode === \"tailwind\"" /ho...
[15:29:52] scan Bash → grep -rn "srcdoc\|iframe.*src\|<ifra...
[15:29:55] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:30:42] scan Agent →
[15:30:46] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:30:50] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:30:57] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:30:57] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:31:06] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:31:10] scan Grep → localStorage\.(get|set|remove)
[15:31:10] scan Grep → VITE_|API_KEY|SECRET|PASSWORD|TOKEN
[15:31:14] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:31:15] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:31:15] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:31:25] scan Bash → grep -n "JSON.parse" /home/mwc/Codin...
[15:31:33] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:31:34] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:31:43] scan Bash → grep -rn "\.innerHTML" /home/mwc/Cod...
[15:31:46] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:31:49] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:31:52] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:31:59] scan Bash → grep -rn "signInWithOAuth\|signInWit...
[15:32:03] scan Bash → grep -rn "redirect\|window.location\...
[15:32:06] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:32:11] scan Bash → grep -rn "import.meta.env" /home/mwc...
[15:32:14] scan Bash → git log --all --full-history -- "pro...
[15:32:18] scan Bash → cat /home/mwc/Coding/code-crispies/....
[15:32:22] scan Bash → git ls-files | grep -E '\.env|projec...
[15:32:27] scan Bash → ls -la /home/mwc/Coding/code-crispie...
[15:32:31] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:32:37] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:32:44] scan Bash → grep -rn "GITHUB_CLIENT\|GOOGLE_CLIE...
[15:32:47] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:32:50] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:33:50] scan Agent →
[15:33:53] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:33:56] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:33:57] scan Bash → ls -la /home/mwc/Coding/code-crispie...
[15:34:02] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:34:03] scan Glob → **/*.html
[15:34:06] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:34:06] scan Grep → Content-Security-Policy|csp|CSP
[15:34:19] scan Grep → script src|link href|iframe|fetch\(|...
[15:34:23] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:34:29] scan Bash → head -100 /home/mwc/Coding/code-cris...
[15:34:29] scan Glob → **/*.js
[15:34:33] scan Grep → fetch|XMLHttpRequest|axios|http
[15:34:36] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:34:37] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:34:40] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:34:41] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:34:45] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:34:45] scan Bash → find /home/mwc/Coding/code-crispies/...
[15:34:48] scan Bash → grep -r "marked\|lodash" /home/mwc/C...
[15:34:48] scan Bash → grep -A 5 '"marked"' /home/mwc/Codin...
[15:35:02] scan Bash → grep -A 15 '"node_modules/marked"' /...
[15:35:06] scan Bash → grep -E '^\s+"(version|integrity)": ...
[15:35:11] scan Bash → cat /home/mwc/Coding/code-crispies/....
[15:35:11] scan Bash → cat /home/mwc/Coding/code-crispies/....
[15:35:15] scan Bash → grep -n "sandbox\|integrity\|crossor...
[15:35:18] scan Bash → grep -n "sandbox\|integrity\|crossor...
[15:35:22] scan Bash → grep -n "src=\|href=" /home/mwc/Codi...
[15:35:34] scan Bash → grep -n "script\|https://cdn" /home/...
[15:35:37] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:35:37] scan Bash → grep -r "fetch\|cdn.tailwindcss" /ho...
[15:35:41] scan Bash → grep -r "integrity\|crossorigin\|sri...
[15:36:29] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:36:29] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:36:34] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:36:34] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:36:39] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:36:40] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:36:44] scan Grep → \.env
[15:36:45] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:36:49] scan Grep → sandbox
[15:36:51] scan Grep → Content-Security-Policy|content-secu...
[15:36:59] scan Grep → loadModuleFromUrl
[15:37:01] scan Grep → marked\.
[15:37:06] scan Grep → loadModuleFromUrl\(
[15:37:07] scan Grep → import.*marked|from.*marked
[15:37:12] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:37:13] scan Grep → innerHTML|outerHTML|insertAdjacentHTML
[15:37:17] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:37:17] scan Read → /home/mwc/Coding/code-crispies/.wave...
[15:37:26] scan Bash → mkdir -p /home/mwc/Coding/code-crisp...
[15:39:06] scan Write → /home/mwc/Coding/code-crispies/.wav...
[15:39:18] scan Processing results
[15:39:18] scan validating contract
[15:39:19] ✓ scan completed (727.6s, 52.1k in / 9.1k out)
[15:39:19] ├─ artifact: .wave/output/security-scan.json (written)
[15:39:19] └─ contract: security-scan.schema.json ✓ valid
[15:39:19] → deep-dive (auditor) [claude-haiku via claude]
[15:39:19] deep-dive Executing agent
[15:39:28] deep-dive Read → /home/mwc/Coding/code-crispies/.wave...
[15:39:28] deep-dive Bash → ls /home/mwc/Coding/code-crispies/.w...
[15:39:38] deep-dive Agent →
[15:39:42] deep-dive Agent →
[15:39:48] deep-dive Agent →
[15:39:53] deep-dive Agent →
[15:39:56] deep-dive Grep → \.innerHTML\s*[=\+]
[15:39:57] deep-dive Grep → localStorage\.getItem
[15:39:58] deep-dive Grep → eval\s*\(|Function\s*\(|setTimeout\s...
[15:39:58] deep-dive Read → /home/mwc/Coding/code-crispies/src/i...
[15:39:59] deep-dive Read → /home/mwc/Coding/code-crispies/vite....
[15:39:59] deep-dive Read → /home/mwc/Coding/code-crispies/src/h...
[15:40:00] deep-dive Grep → document\.write
[15:40:01] deep-dive Grep → innerHTML|outerHTML|insertAdjacentHTML
[15:40:02] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:02] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:03] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:03] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:05] deep-dive Grep → \.innerHTML
[15:40:05] deep-dive Grep → \.innerHTML
[15:40:06] deep-dive Read → /home/mwc/Coding/code-crispies/src/h...
[15:40:06] deep-dive Grep → iframeDoc\.write
[15:40:07] deep-dive Read → /home/mwc/Coding/code-crispies/src/h...
[15:40:08] deep-dive Grep → iframe\.(sandbox|srcdoc|setAttribute)
[15:40:08] deep-dive Grep → marked
[15:40:17] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:18] deep-dive Read → /home/mwc/Coding/code-crispies/src/h...
[15:40:19] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:19] deep-dive Read → /home/mwc/Coding/code-crispies/src/i...
[15:40:20] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:21] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:22] deep-dive Grep → dompurify|sanitize-html|xss-filters|...
[15:40:22] deep-dive Read → /home/mwc/Coding/code-crispies/src/i...
[15:40:25] deep-dive Grep → lesson\.description|lesson\.task|des...
[15:40:25] deep-dive Glob → **/lessons/**/*.json
[15:40:27] deep-dive Bash → find /home/mwc/Coding/code-crispies/...
[15:40:27] deep-dive Grep → import.*lessons|import.*modules
[15:40:30] deep-dive Read → /home/mwc/Coding/code-crispies/lessons
[15:40:41] deep-dive Bash → find /home/mwc/Coding/code-crispies ...
[15:40:41] deep-dive Read → /home/mwc/Coding/code-crispies/lesso...
[15:40:43] deep-dive Read → /home/mwc/Coding/code-crispies/lesso...
[15:40:46] deep-dive Grep → sectionContent\[|referenceContent\[
[15:40:46] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:49] deep-dive Grep → const sectionContent|const reference...
[15:40:50] deep-dive Read → /home/mwc/Coding/code-crispies/src/a...
[15:40:51] deep-dive Bash → cd /home/mwc/Coding/code-crispies/sr...
[15:40:53] deep-dive Read → /home/mwc/Coding/code-crispies/src/i...
[15:40:53] deep-dive Grep → setInnerHTML|innerHTML\s*\+=
[15:40:54] deep-dive Bash → cd /home/mwc/Coding/code-crispies &&...
[15:40:57] deep-dive Read → /home/mwc/Coding/code-crispies/packa...
[15:40:59] deep-dive Read → /home/mwc/Coding/code-crispies/src/i...
[15:40:59] deep-dive Read → /home/mwc/Coding/code-crispies/src/i...
[15:41:02] deep-dive Read → /home/mwc/Coding/code-crispies/src/i...
[15:41:04] deep-dive Read → /home/mwc/Coding/code-crispies/src/i...
[15:41:05] deep-dive Grep → injectTailwindClasses|marked\.parse
[15:41:52] deep-dive Bash → ls -la /home/mwc/Coding/code-crispie...
[15:41:53] deep-dive Grep → VITE_SUPABASE|CLIENT_SECRET|GITHUB_C...
[15:41:58] deep-dive Grep → data-i18n-html|\.innerHTML\s*=\s*t\(
[15:41:59] deep-dive Grep → loadModuleFromUrl
[15:42:03] deep-dive Read → /home/mwc/Coding/code-crispies/src/c...
[15:42:10] deep-dive ToolSearch → select:TodoWrite
[15:42:15] deep-dive TodoWrite → Write security deep-dive report
[15:42:19] deep-dive Bash → mkdir -p /home/mwc/Coding/code-crisp...
[15:44:46] deep-dive Write → /home/mwc/Coding/code-crispies/.wav...
[15:44:50] deep-dive TodoWrite → 1/1 tasks
[15:44:57] deep-dive Processing results
[15:44:57] ✓ deep-dive completed (338.7s, 47.0k in / 10.0k out)
[15:44:57] └─ artifact: .wave/output/security-deep-dive.md (written)
[15:44:57] → report (summarizer) [claude-haiku via claude]
[15:44:57] report Executing agent
[15:45:09] report Bash → ls /home/mwc/Coding/code-crispies/.w...
[15:45:13] report Bash → ls -la /home/mwc/Coding/code-crispie...
[15:45:16] report Read → /home/mwc/Coding/code-crispies/.wave...
[15:45:17] report Read → /home/mwc/Coding/code-crispies/.wave...
[15:45:23] report Bash → mkdir -p /home/mwc/Coding/code-crisp...
[15:46:02] report Write → /home/mwc/Coding/code-crispies/.wav...
[15:46:08] report Processing results
[15:46:08] report validating contract
[15:46:08] ✓ report completed (70.6s, 25.7k in / 2.6k out)
[15:46:08] ├─ artifact: .wave/output/security-report.md (written)
[15:46:08] └─ contract: non_empty_file ✓ valid
2026/03/28 15:46:08 [retro] quantitative retrospective saved for run audit-security-20260328-152711-3121
✓ Pipeline 'audit-security' completed successfully (1137.3s, 146.6k tokens)
3 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-security-20260328-152711-3121/scan/.wave/output/security-scan.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-security-20260328-152711-3121/deep-dive/.wave/output/security-deep-dive.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/audit-security-20260328-152711-3121/report/.wave/output/security-report.md

View File

@@ -0,0 +1,71 @@
[16:19:52] → survey (navigator) [claude-haiku via claude]
[16:19:52] survey Executing agent
[16:20:01] survey Bash → ls -la /home/mwc/Coding/code-crispies/
[16:20:02] survey Read → /home/mwc/Coding/code-crispies/packa...
[16:20:03] survey Glob → **/*.json
[16:20:08] survey Read → /home/mwc/Coding/code-crispies/src/a...
[16:20:08] survey Read → /home/mwc/Coding/code-crispies/src/c...
[16:20:09] survey Read → /home/mwc/Coding/code-crispies/src/i...
[16:20:10] survey Read → /home/mwc/Coding/code-crispies/src/h...
[16:20:11] survey Read → /home/mwc/Coding/code-crispies/src/i...
[16:20:11] survey Read → /home/mwc/Coding/code-crispies/src/i...
[16:20:11] survey Read → /home/mwc/Coding/code-crispies/src/h...
[16:20:16] survey Read → /home/mwc/Coding/code-crispies/src/i...
[16:20:16] survey Read → /home/mwc/Coding/code-crispies/vite....
[16:20:17] survey Read → /home/mwc/Coding/code-crispies/src/a...
[16:20:18] survey Read → /home/mwc/Coding/code-crispies/src/s...
[16:20:19] survey Read → /home/mwc/Coding/code-crispies/schem...
[16:20:20] survey Read → /home/mwc/Coding/code-crispies/tests...
[16:20:21] survey Read → /home/mwc/Coding/code-crispies/Makefile
[16:20:22] survey Bash → ls /home/mwc/Coding/code-crispies/docs/
[16:20:23] survey Bash → ls /home/mwc/Coding/code-crispies/pu...
[16:20:23] survey Read → /home/mwc/Coding/code-crispies/.env
[16:20:29] survey Read → /home/mwc/Coding/code-crispies/src/i...
[16:20:30] survey Bash → ls /home/mwc/Coding/code-crispies/.g...
[16:20:31] survey Read → /home/mwc/Coding/code-crispies/src/c...
[16:20:31] survey Read → /home/mwc/Coding/code-crispies/supab...
[16:20:32] survey Read → /home/mwc/Coding/code-crispies/src/c...
[16:20:33] survey Bash → ls /home/mwc/Coding/code-crispies/le...
[16:20:36] survey Read → /home/mwc/Coding/code-crispies/.gith...
[16:20:37] survey Read → /home/mwc/Coding/code-crispies/src/i...
[16:20:38] survey Read → /home/mwc/Coding/code-crispies/src/a...
[16:20:38] survey Read → /home/mwc/Coding/code-crispies/lesso...
[16:20:44] survey Grep → export function
[16:20:45] survey Grep → ^const translations = |^\t(en|de|pl|...
[16:20:51] survey Bash → ls /home/mwc/Coding/code-crispies/.w...
[16:22:29] survey Write → /home/mwc/Coding/code-crispies/.wav...
[16:22:34] survey Bash → python3 -c "import json; data = json...
[16:22:42] survey Processing results
[16:22:42] survey validating contract
[16:22:42] ✓ survey completed (170.6s, 152.1k in / 8.7k out)
[16:22:42] ├─ artifact: .wave/output/project-survey.json (written)
[16:22:42] └─ contract: project-survey.schema.json ✓ valid
[16:22:42] → guide (philosopher) [claude-opus via claude]
[16:22:42] guide Executing agent
[16:22:48] guide Bash → ls /home/mwc/Coding/code-crispies/.w...
[16:22:49] guide Bash → ls /home/mwc/Coding/code-crispies/
[16:22:53] guide Read → /home/mwc/Coding/code-crispies/.wave...
[16:22:53] guide Bash → ls /home/mwc/Coding/code-crispies/src/
[16:22:54] guide Bash → ls /home/mwc/Coding/code-crispies/le...
[16:22:54] guide Read → /home/mwc/Coding/code-crispies/packa...
[16:22:58] guide Read → /home/mwc/Coding/code-crispies/vite....
[16:22:59] guide Bash → ls /home/mwc/Coding/code-crispies/te...
[16:23:00] guide Bash → ls /home/mwc/Coding/code-crispies/docs/
[16:23:00] guide Bash → cat /home/mwc/Coding/code-crispies/....
[16:23:05] guide Read → /home/mwc/Coding/code-crispies/lesso...
[16:23:07] guide Bash → ls /home/mwc/Coding/code-crispies/.w...
[16:24:29] guide Write → /home/mwc/Coding/code-crispies/.wav...
[16:24:37] guide Processing results
[16:24:37] guide validating contract
[16:24:37] ✓ guide completed (114.4s, 25.2k in / 5.9k out)
[16:24:37] ├─ artifact: .wave/output/onboarding-guide.md (written)
[16:24:37] └─ contract: non_empty_file ✓ valid
2026/03/28 16:24:37 [retro] quantitative retrospective saved for run doc-onboard-20260328-161951-4e6a
✓ Pipeline 'doc-onboard' completed successfully (285.4s, 191.9k tokens)
2 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/doc-onboard-20260328-161951-4e6a/survey/.wave/output/project-survey.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/doc-onboard-20260328-161951-4e6a/guide/.wave/output/onboarding-guide.md

View File

@@ -0,0 +1,244 @@
[13:35:15] → explore (navigator) [claude-haiku via claude]
[13:35:15] explore Executing agent
[13:35:24] explore Glob → **/*.json
[13:35:24] explore Glob → lessons/**/*.json
[13:35:25] explore Glob → tests/**/*.{js,test.js}
[13:35:32] explore Bash → ls -la /home/mwc/Coding/code-crispies/
[13:35:34] explore Bash → ls -la /home/mwc/Coding/code-crispie...
[13:35:44] explore Bash → ls -la /home/mwc/Coding/code-crispie...
[13:35:50] explore Glob → lessons/**/*.json
[13:35:50] explore Glob → src/**/*.js
[13:35:51] explore Glob → tests/**/*.js
[13:35:52] explore Glob → schemas/**/*.json
[13:35:59] explore Bash → find /home/mwc/Coding/code-crispies/...
[13:36:00] explore Bash → find /home/mwc/Coding/code-crispies/...
[13:36:01] explore Bash → find /home/mwc/Coding/code-crispies/...
[13:36:13] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:13] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:14] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:15] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:22] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:23] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:23] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:24] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:32] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:33] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:34] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:34] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:45] explore Grep → module-list|renderModuleList|section...
[13:36:46] explore Grep → renderPreview|applyCode|mode.*javasc...
[13:36:46] explore Bash → find /home/mwc/Coding/code-crispies/...
[13:36:54] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:36:56] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:37:02] explore Grep → getModuleSection|section.*group|sect...
[13:37:03] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:37:04] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:37:10] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:37:12] explore Read → /home/mwc/Coding/code-crispies/.wave...
[13:37:22] explore Grep → section-card|landing.*section|css-pr...
[13:37:23] explore Grep → sectionContent
[13:37:31] explore Bash → mkdir -p /home/mwc/Coding/code-crisp...
[13:38:36] explore Write → /home/mwc/Coding/code-crispies/.wav...
[13:38:48] explore Processing results
[13:38:48] explore validating contract
[13:38:48] ✓ explore completed (213.0s, 89.2k in / 8.9k out)
[13:38:48] ├─ artifact: .wave/output/exploration.json (written)
[13:38:48] └─ contract: feature-exploration.schema.json ✓ valid
[13:38:48] → plan (planner) [claude-haiku via claude]
[13:38:48] plan Executing agent
[13:38:59] plan Bash → ls /home/mwc/Coding/code-crispies/.w...
[13:38:59] plan Bash → ls /home/mwc/Coding/code-crispies/.w...
[13:39:04] plan Bash → ls -la /home/mwc/Coding/code-crispie...
[13:39:10] plan Read → /home/mwc/Coding/code-crispies/.wave...
[13:39:25] plan Agent →
[13:39:26] plan Bash → find /home/mwc/Coding/code-crispies ...
[13:39:28] plan Bash → ls -la /home/mwc/Coding/code-crispie...
[13:39:30] plan Read → /home/mwc/Coding/code-crispies/lesso...
[13:39:31] plan Read → /home/mwc/Coding/code-crispies/lesso...
[13:39:31] plan Read → /home/mwc/Coding/code-crispies/src/c...
[13:39:34] plan Read → /home/mwc/Coding/code-crispies/src/h...
[13:39:34] plan Read → /home/mwc/Coding/code-crispies/src/h...
[13:39:34] plan Read → /home/mwc/Coding/code-crispies/schem...
[13:39:37] plan Read → /home/mwc/Coding/code-crispies/src/i...
[13:39:37] plan Bash → wc -l /home/mwc/Coding/code-crispies...
[13:39:42] plan Read → /home/mwc/Coding/code-crispies/src/i...
[13:39:42] plan Read → /home/mwc/Coding/code-crispies/src/a...
[13:39:42] plan Read → /home/mwc/Coding/code-crispies/src/a...
[13:39:50] plan Read → /home/mwc/Coding/code-crispies/src/a...
[13:39:50] plan Read → /home/mwc/Coding/code-crispies/src/i...
[13:39:53] plan Read → /home/mwc/Coding/code-crispies/src/i...
[13:39:53] plan Bash → wc -l /home/mwc/Coding/code-crispies...
[13:39:56] plan Bash → grep -n "module-list" /home/mwc/Codi...
[13:39:57] plan Read → /home/mwc/Coding/code-crispies/packa...
[13:40:00] plan Read → /home/mwc/Coding/code-crispies/src/m...
[13:40:00] plan Bash → grep -n "@codemirror/lang-javascript...
[13:42:10] plan Bash → mkdir -p /home/mwc/Coding/code-crisp...
[13:43:20] plan Write → /home/mwc/Coding/code-crispies/.wav...
[13:44:23] plan Processing results
[13:44:23] plan validating contract
[13:44:23] ✓ plan completed (334.8s, 27.3k in / 11.5k out)
[13:44:23] ├─ artifact: .wave/output/plan.json (written)
[13:44:23] └─ contract: feature-plan.schema.json ✓ valid
[13:44:23] → implement (craftsman) [claude-opus via claude]
[13:44:23] implement Executing agent
[13:44:31] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:31] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:39] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:40] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:40] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:42] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:42] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:43] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:44] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:55] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:57] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:44:57] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:45:04] implement ToolSearch → select:TodoWrite
[13:45:17] implement TodoWrite → S01: Update JSON schema to supp...
[13:45:25] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:45:34] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:50:29] implement Bash → npm install @codemirror/lang-javascript
[13:50:50] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:50:56] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:51:04] implement TodoWrite → S04: Create 3 JavaScript lesson...
[13:51:24] implement Write → /home/mwc/Coding/code-crispies/.wav...
[13:51:42] implement Write → /home/mwc/Coding/code-crispies/.wav...
[13:52:04] implement Write → /home/mwc/Coding/code-crispies/.wav...
[13:52:13] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:52:27] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:52:39] implement TodoWrite → S06: Add JavaScript preview ren...
[13:52:51] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:53:04] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:53:10] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:53:17] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:53:23] implement Grep → updateEditorForMode
[13:53:27] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:53:37] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:53:44] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:53:51] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:53:58] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:54:04] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:54:10] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:54:15] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:54:20] implement Grep → // Markdown
[13:54:24] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:54:32] implement Grep → // JavaScript
[13:54:38] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:54:46] implement TodoWrite → S09: Add JavaScript section to ...
[13:54:53] implement Grep → markdown.*section-card|data-section=...
[13:54:59] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:55:07] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:55:14] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:55:19] implement Grep → sidebar-nav-mobile
[13:55:24] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:55:31] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:55:40] implement Grep → sectionContent|renderFooterLessonLin...
[13:55:46] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:55:53] implement Grep → ^\\tmarkdown:
[13:55:59] implement Grep → markdown:.*`
[13:56:16] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:56:32] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:56:38] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:56:45] implement Grep → function renderFooterLessonLinks
[13:56:55] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:57:01] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:57:13] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:57:19] implement Grep → data-section.*markdown
[13:57:31] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:57:37] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:57:44] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:57:59] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:58:06] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:58:27] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:58:33] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:58:39] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:58:45] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:58:50] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:58:57] implement Grep → body\\[data-section=\"markdown\"\\]
[13:59:09] implement Grep → data-section..markdown
[13:59:16] implement Read → /home/mwc/Coding/code-crispies/.wave...
[13:59:29] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:59:36] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[13:59:42] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:00:00] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:00:06] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:00:11] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:00:20] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:00:26] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:00:34] implement TodoWrite → S10: Add sidebar section groupi...
[14:00:40] implement Read → /home/mwc/Coding/code-crispies/.wave...
[14:00:52] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:01:00] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:01:07] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:01:13] implement Grep → \.module-container
[14:01:19] implement Read → /home/mwc/Coding/code-crispies/.wave...
[14:01:25] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:01:36] implement TodoWrite → S11: Update tests for JavaScrip...
[14:01:42] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:01:51] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:02:04] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:02:20] implement Write → /home/mwc/Coding/code-crispies/.wav...
[14:02:25] implement Bash → ls /home/mwc/Coding/code-crispies/.w...
[14:02:30] implement Read → /home/mwc/Coding/code-crispies/.wave...
[14:02:45] implement Edit → /home/mwc/Coding/code-crispies/.wave...
[14:02:54] implement TodoWrite → Run full test suite and fix fai...
[14:03:00] implement Bash → npm run test 2>&1
[14:03:11] implement Bash → npx prettier --write "lessons/50-js-...
[14:03:22] implement TodoWrite → Commit changes to worktree branch
[14:03:26] implement Bash → git status
[14:03:31] implement Bash → git log --oneline -5
[14:03:37] implement Bash → git add \
package.json \
package...
[14:03:45] implement Bash → git commit -m "$(cat <<'EOF'
feat: a...
[14:03:52] implement TodoWrite → Write result output to .wave/ou...
[14:03:58] implement Bash → ls -d /home/mwc/Coding/code-crispies...
[14:04:17] implement Write → /home/mwc/Coding/code-crispies/.wav...
[14:04:25] implement TodoWrite → 14/14 tasks
[14:04:34] implement Processing results
[14:04:34] implement validating contract
[14:04:39] ✓ implement completed (1210.7s, 172.2k in / 38.0k out)
[14:04:39] ├─ artifact: .wave/output/result.md (written)
[14:04:39] └─ contract: test_suite ✓ valid
[14:04:39] → publish (craftsman) [claude-opus via claude]
[14:04:39] publish Executing agent
[14:04:46] publish Read → /home/mwc/Coding/code-crispies/.wave...
[14:04:47] publish Bash → git log --oneline main..HEAD
[14:04:53] publish Bash → git push -u origin HEAD
[14:05:00] publish Bash → COMMIT_SUBJECT=$(git log --format=%s...
[14:05:05] publish Bash → git remote -v
[14:05:09] publish Bash → git remote -v
[14:05:13] publish Bash → cat .git/config
[14:05:16] publish Bash → cat .git
[14:05:20] publish Read → /home/mwc/Coding/code-crispies/.git/...
[14:05:34] publish Bash → curl -s "https://git.librete.ch/api/...
[14:05:35] publish Bash → gh auth status 2>&1; echo "---"; gh ...
[14:05:42] publish Bash → git push -u github HEAD
[14:05:52] publish Bash → COMMIT_SUBJECT=$(git log --format=%s...
[14:05:59] publish Bash → ls .wave/output/ 2>/dev/null || echo...
[14:06:07] publish Write → /home/mwc/Coding/code-crispies/.wav...
[14:06:12] publish Processing results
[14:06:12] publish validating contract
[14:06:12] ✓ publish completed (92.6s, 16.1k in / 2.3k out)
[14:06:12] ├─ artifact: .wave/output/pr-result.json (written)
[14:06:12] └─ contract: pr-result.schema.json ✓ valid
2026/03/28 14:06:12 [retro] quantitative retrospective saved for run impl-feature-20260328-133515-7069
✓ Pipeline 'impl-feature' completed successfully (1857.0s, 365.6k tokens)
Outcomes
✓ Branch: feat/impl-feature-20260328-133515-7069 (local only)
✓ Pull Request: https://github.com/nextlevelshit/code-crispies/pull/3
4 artifacts produced
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/impl-feature-20260328-133515-7069/explore/.wave/output/exploration.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/impl-feature-20260328-133515-7069/plan/.wave/output/plan.json
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/impl-feature-20260328-133515-7069/__wt_feat-impl-feature-20260328-133515-7069/.wave/output/result.md
• file:///home/mwc/Coding/code-crispies/.wave/workspaces/impl-feature-20260328-133515-7069/__wt_feat-impl-feature-20260328-133515-7069/.wave/output/pr-result.json
Next Steps
→ Review the pull request: Pull Request
https://github.com/nextlevelshit/code-crispies/pull/3

Some files were not shown because too many files have changed in this diff Show More