- [2026-05-31] Rewrote AGENTS.md from 186→69 lines: stripped generic advice, added high-signal project guidance (stack, phase, key files, venv, conventions, recommended skills) (files: AGENTS.md)
- [2026-05-31] Created project opencode.json with instructions, permissions, and watcher config (files: opencode.json)
- [2026-05-31] Initial repo structure: docs/project/, docs/knowledge/, .gitignore, Python venv scaffolding (files: docs/project/OpenCode-DevKit-Project.md, docs/project/additional-files.md, .gitignore, docs/knowledge/*.md)
- [2026-05-31] Ran graphify: built knowledge graph (79 nodes, 106 edges, 11 communities), generated graph.html + GRAPH_REPORT.md + graph.json; traced Vite/Tailwind/shadcn connections; updated .gitignore for graphify artifacts (files: graphify-out/graph.html, graphify-out/GRAPH_REPORT.md, graphify-out/graph.json, .gitignore)
- [2026-05-31] Updated AGENTS.md: replaced passive "After each commit" section with proactive "Commit often" convention (files: AGENTS.md)
- [2026-05-31] Phase I complete: scaffolded FastAPI backend with pyproject.toml, ruff, mypy; installed deps into .devkit/ venv; created /api/health endpoint (files: backend/pyproject.toml, backend/app/main.py, backend/app/routers/health.py)
- [2026-05-31] Scaffolded React/Vite frontend with pnpm, Tailwind CSS v4, shadcn/ui; created dashboard shell with header, sidebar, feature cards, and backend health status indicator (files: frontend/src/App.tsx, frontend/src/index.css, frontend/vite.config.ts, frontend/components.json)
- [2026-05-31] Added Vite dev proxy for /api → backend :8000; configured FastAPI CORS for localhost:5173; verified end-to-end health check connectivity (files: frontend/vite.config.ts, backend/app/main.py)
- [2026-05-31] Created root package.json with unified dev scripts (concurrently) —
pnpm run devstarts both servers; added lint/typecheck scripts for both stacks (files: package.json) - [2026-05-31] Wrote proper README.md with quickstart, project structure, roadmap, and architecture decision sections explaining why pyproject.toml over requirements.txt, pnpm over npm/yarn, and separate directories over monorepo (files: README.md)
- [2026-05-31] Added pre-commit hooks (ruff, mypy, eslint) via .pre-commit-config.yaml; added markdownlint config (.markdownlint.json); updated .gitignore with node_modules and frontend/dist (files: .pre-commit-config.yaml, .markdownlint.json, .gitignore)
- [2026-05-31] Phase II: built backend config analysis engine — security audit (7 rules: permissions, bash, API keys, share, autoupdate, snapshots, MCP), missing settings detection (7 checks: model, small_model, instructions, permissions, compaction, watcher, server), 3 optimizations (autoupdate→notify, add permissions, add $schema), and recursive config diff engine (files: backend/app/schemas/config.py, backend/app/data/rules.py, backend/app/services/config_analyzer.py, backend/app/routers/config.py)
- [2026-05-31] Phase II: built frontend config analyzer — ConfigUpload (paste, file upload, drag-and-drop), AuditResults (severity badges, security issues, missing settings, optimizations with before/after), DiffView (added/removed/changed with color-coded entries), ConfigAnalyzer orchestrator with tabs (audit, diff, optimized config); integrated into App.tsx dashboard sidebar (files: frontend/src/components/config-analyzer/ConfigUpload.tsx, frontend/src/components/config-analyzer/AuditResults.tsx, frontend/src/components/config-analyzer/DiffView.tsx, frontend/src/components/config-analyzer/ConfigAnalyzer.tsx, frontend/src/types/config.ts, frontend/src/lib/api.ts)
- [2026-05-31] Installed shadcn/ui Tabs component; added eslint ignore for shadcn-generated ui components (react-refresh rule) (files: frontend/src/components/ui/tabs.tsx, frontend/eslint.config.js)
- [2026-05-31] Fixed tabs.tsx Vite 500 error: shadcn CLI generated import from
src/lib/utilsbut Vite only resolves the@/alias (files: frontend/src/components/ui/tabs.tsx) - [2026-05-31] Phase II complete: added OpenCode JSON Schema validation (jsonschema library, schema stored in backend/app/data/schema.py), added export/download button for optimized config, added Clear All Data functionality (files: backend/pyproject.toml, backend/app/data/schema.py, backend/app/schemas/config.py, backend/app/services/config_analyzer.py, backend/app/routers/config.py, frontend/src/types/config.ts, frontend/src/components/config-analyzer/AuditResults.tsx, frontend/src/components/config-analyzer/ConfigAnalyzer.tsx)
- [2026-05-31] Fixed tabs.tsx Vite 500 error (shadcn CLI generated src/ import
instead of @/ alias); fixed JSONC parser eating
://in URLs by replacing regex with string-aware state machine; fixed textarea resize by removing flex-1; replaced shadcn Tabs with simple buttons; relocated Clear All Data to App header with key-based remount after 4 failed attempts; created ERRORS.md with 5 structured entries (files: frontend/src/components/ui/tabs.tsx, backend/app/services/config_analyzer.py, frontend/src/components/config-analyzer/ConfigUpload.tsx, frontend/src/components/config-analyzer/ConfigAnalyzer.tsx, frontend/src/App.tsx, docs/project/ERRORS.md) - [2026-05-31] Synced AGENTS.md, README.md, additional-files.md with ERRORS.md (files: AGENTS.md, README.md, docs/project/additional-files.md)
- [2026-05-31] Created
/update-relevant-filesslash command — project-local and global copies; audits 8 tracking files for stale references after any change batch (files: .opencode/commands/update-relevant-files.md, ~/.config/opencode/command/update-relevant-files.md, AGENTS.md, DONE.md) - [2026-05-31] Added dark/light theme toggle:
useThemehook (dark default, localStorage persistence), sun/moon button in header, flash-prevention script in index.html (files: frontend/src/App.tsx, frontend/index.html, DONE.md) - [2026-05-31] Phase III complete: Skill Analyzer & Maker. YAML frontmatter
parser, content quality report, completeness scoring (0-100), 5 built-in
skill templates,
POST /api/skill/analyze+GET /api/skill/templatesendpoints. SkillAnalyzer component with paste/upload, score-coded badges, template browser with copy-to-clipboard. Added pyyaml + types-pyyaml to backend deps. (files: backend/app/schemas/skill.py, backend/app/services/skill_analyzer.py, backend/app/data/templates.py, backend/app/routers/skill.py, backend/app/main.py, backend/pyproject.toml, frontend/src/types/skill.ts, frontend/src/lib/api.ts, frontend/src/components/skill-analyzer/SkillAnalyzer.tsx, frontend/src/App.tsx, docs/project/PHASES.md, docs/project/TASKS.md, DONE.md) - [2026-05-31] Fix: Added
python-multipartdependency — the newPOST /api/skill/analyzeendpoint usesForm(...)params which require it; FastAPI failed at import time without it (files: backend/pyproject.toml) - [2026-05-31] Fix: Changed all
package.jsonscripts from barepython3to.devkit/bin/python3— dev/typecheck/lint commands were using system Python which lacks venv packages, causing silent backend startup failures (files: package.json) - [2026-05-31] Synced docs: AGENTS.md status → Phase III, ERRORS.md new entry for backend 502 bug, DONE.md entries for fixes (files: AGENTS.md, docs/project/ERRORS.md, DONE.md)
- [2026-06-01] Phase IV complete: Command, Tool, and MCP Analyzers.
Three new analyzers added:
- Command Analyzer: validates slash-command .md frontmatter (description,
agent, model, subtask), detects $ARGUMENTS/!
shell/@file usage, scores content quality (0-100). - MCP Analyzer: validates local/remote MCP server config entries, checks required fields (type, command/url, enabled), detects hardcoded secrets in environment/headers/oauth.
- Tool Analyzer: audits tool permission entries, flags security-sensitive tools (bash, edit, write), detects missing critical permissions. (files: backend/app/schemas/phase4.py, backend/app/services/command_analyzer.py, backend/app/services/mcp_analyzer.py, backend/app/services/tool_analyzer.py, backend/app/routers/phase4.py, backend/app/main.py, frontend/src/types/phase4.ts, frontend/src/lib/api.ts, frontend/src/components/phase4-analyzers/CommandAnalyzer.tsx, frontend/src/components/phase4-analyzers/MCPAnalyzer.tsx, frontend/src/components/phase4-analyzers/ToolAnalyzer.tsx, frontend/src/App.tsx, docs/project/PHASES.md, docs/project/TASKS.md, DONE.md)
- Command Analyzer: validates slash-command .md frontmatter (description,
agent, model, subtask), detects $ARGUMENTS/!
- [2026-06-01] Phase V — Dashboard landing page: Added data-driven dashboard with GET /api/dashboard endpoint, stats summary cards (total features, implemented, phases complete), feature implementation grid with status badges, and phase roadmap timeline with visual status indicators. Dashboard set as default sidebar entry. (files: backend/app/schemas/dashboard.py, backend/app/data/features.py, backend/app/routers/dashboard.py, backend/app/main.py, frontend/src/types/dashboard.ts, frontend/src/lib/api.ts, frontend/src/components/dashboard/Dashboard.tsx, frontend/src/components/dashboard/FeatureCard.tsx, frontend/src/components/dashboard/PhaseTimeline.tsx, frontend/src/App.tsx, AGENTS.md, README.md, docs/project/PHASES.md, docs/project/TASKS.md, DONE.md)
- [2026-06-01] Phase VI — Client-Side Migration: Dumped FastAPI backend entirely. Ported all 5 analyzer services + 4 data files from Python to TypeScript using js-yaml, ajv, and ajv-formats. Rewrote all 7 React components to call service functions synchronously (no fetch/await). Removed backend/ directory, Python venv, Vite proxy, backend scripts from package.json, Python-specific permissions from opencode.json, and Python hooks from pre-commit. Single pnpm run dev starts just the Vite frontend on :5173. App is now a pure static site deployable to GitHub Pages. All checks pass: tsc (zero), eslint (zero), markdownlint (zero). (files: frontend/src/lib/data/features.ts, templates.ts, schema.ts, rules.ts; frontend/src/lib/services/config-analyzer.ts, skill-analyzer.ts, command-analyzer.ts, mcp-analyzer.ts, tool-analyzer.ts; frontend/src/lib/api.ts; frontend/src/App.tsx; frontend/src/components/config-analyzer/ConfigAnalyzer.tsx; frontend/src/components/skill-analyzer/SkillAnalyzer.tsx; frontend/src/components/phase4-analyzers/CommandAnalyzer.tsx, MCPAnalyzer.tsx, ToolAnalyzer.tsx; frontend/src/components/dashboard/Dashboard.tsx; frontend/src/types/skill.ts; frontend/vite.config.ts; package.json; opencode.json; .gitignore; .pre-commit-config.yaml; AGENTS.md; README.md; docs/project/PHASES.md; docs/project/TASKS.md; docs/project/DECISIONS.md; DONE.md)
- [2026-06-01] Phase VII — Dashboard Polish: Added sessionStorage-backed activity log module (lib/activity.ts) with logActivity/getActivityLog/clearActivityLog. All 5 analyzers now log entries after successful analysis. Dashboard enhanced with: search/filter input that filters feature grid by label/description/phase in real-time; activity feed sidebar showing the 10 most recent actions with type icons and timestamps; Export button that downloads a markdown report of the dashboard (metrics, features table, roadmap). Empty-state shown when no activity is logged yet. (files: frontend/src/lib/activity.ts; frontend/src/components/dashboard/Dashboard.tsx; frontend/src/components/config-analyzer/ConfigAnalyzer.tsx; frontend/src/components/skill-analyzer/SkillAnalyzer.tsx; frontend/src/components/phase4-analyzers/CommandAnalyzer.tsx, MCPAnalyzer.tsx, ToolAnalyzer.tsx; AGENTS.md; docs/project/PHASES.md; docs/project/TASKS.md; DONE.md)