codex-genesis-harness 0.1.0 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebase/API_CONTRACTS.md +12 -0
- package/.codebase/ARCHITECTURE.md +6 -0
- package/.codebase/ARCHITECTURE_REVIEW_COMPLETE.md +216 -0
- package/.codebase/CURRENT_STATE.md +8 -0
- package/.codebase/DEPENDENCY_GRAPH.md +14 -0
- package/.codebase/DOMAIN_MODELS.md +10 -0
- package/.codebase/EVOLUTION_PLAN.md +35 -0
- package/.codebase/FILE_NAMING_CLARIFICATION.md +161 -0
- package/.codebase/HARNESS_COMPLETENESS_AUDIT.md +613 -0
- package/.codebase/IMPLEMENTATION_COMPLETE.md +429 -0
- package/.codebase/IMPLEMENTATION_HANDOFF.md +351 -0
- package/.codebase/IMPROVEMENTS_SUMMARY.md +419 -0
- package/.codebase/KNOWN_PROBLEMS.md +6 -0
- package/.codebase/MODULE_INDEX.md +13 -0
- package/.codebase/PHASE3_SKILLS_NAMING_COMPLETE.md +292 -0
- package/.codebase/PHASE_DEPENDENCY_MAP.md +486 -0
- package/.codebase/PIPELINE_FLOW.md +14 -0
- package/.codebase/QUICK_START_SPEC_IMPACT.md +456 -0
- package/.codebase/README.md +139 -0
- package/.codebase/RECOVERY_POINTS.md +438 -0
- package/.codebase/TEST_MATRIX.md +11 -0
- package/.codebase/UI_ROUTES.md +4 -0
- package/.codebase/context/backend-summary.md +4 -0
- package/.codebase/context/frontend-summary.md +4 -0
- package/.codebase/context/pipeline-summary.md +4 -0
- package/.codebase/context/providers-summary.md +4 -0
- package/.codebase/context/render-summary.md +4 -0
- package/.codebase/context/tests-summary.md +4 -0
- package/.codex/skills/genesis-ai-provider/SKILL.md +46 -0
- package/.codex/skills/genesis-ai-provider/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-ai-provider/checklists/checklist.md +9 -0
- package/.codex/skills/genesis-ai-provider/examples/example.md +4 -0
- package/.codex/skills/genesis-ai-provider/templates/provider-contract-template.md +9 -0
- package/.codex/skills/genesis-api-contract/SKILL.md +46 -0
- package/.codex/skills/genesis-api-contract/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-api-contract/checklists/checklist.md +8 -0
- package/.codex/skills/genesis-api-contract/examples/example.md +4 -0
- package/.codex/skills/genesis-api-contract/templates/api-contract-template.md +4 -0
- package/.codex/skills/genesis-api-sync/SKILL.md +354 -0
- package/.codex/skills/genesis-api-sync/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-api-sync/checklists/api-sync-checklist.md +101 -0
- package/.codex/skills/genesis-api-sync/examples/example.md +68 -0
- package/.codex/skills/genesis-api-sync/templates/api-change-template.md +257 -0
- package/.codex/skills/genesis-architecture/SKILL.md +46 -0
- package/.codex/skills/genesis-architecture/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-architecture/checklists/checklist.md +8 -0
- package/.codex/skills/genesis-architecture/examples/example.md +4 -0
- package/.codex/skills/genesis-architecture/templates/architecture-decision-template.md +14 -0
- package/.codex/skills/genesis-codebase-map/SKILL.md +46 -0
- package/.codex/skills/genesis-codebase-map/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-codebase-map/checklists/checklist.md +7 -0
- package/.codex/skills/genesis-codebase-map/examples/example.md +4 -0
- package/.codex/skills/genesis-codebase-map/templates/map-update-template.md +8 -0
- package/.codex/skills/genesis-debug-guide/SKILL.md +479 -0
- package/.codex/skills/genesis-debug-guide/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-debug-guide/checklists/flaky-test-investigation.md +339 -0
- package/.codex/skills/genesis-debug-guide/checklists/production-bug-debug.md +210 -0
- package/.codex/skills/genesis-debug-guide/checklists/test-failure-debug.md +158 -0
- package/.codex/skills/genesis-debug-guide/examples/example.md +48 -0
- package/.codex/skills/genesis-debug-guide/observability/debug-commands.md +365 -0
- package/.codex/skills/genesis-debug-guide/playbooks/unit-test-failures.md +289 -0
- package/.codex/skills/genesis-debug-guide/templates/debug-investigation-log.md +288 -0
- package/.codex/skills/genesis-design-spec/SKILL.md +46 -0
- package/.codex/skills/genesis-design-spec/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-design-spec/checklists/checklist.md +7 -0
- package/.codex/skills/genesis-design-spec/examples/example.md +4 -0
- package/.codex/skills/genesis-design-spec/templates/design-spec-template.md +9 -0
- package/.codex/skills/genesis-docs/SKILL.md +46 -0
- package/.codex/skills/genesis-docs/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-docs/checklists/checklist.md +7 -0
- package/.codex/skills/genesis-docs/examples/example.md +4 -0
- package/.codex/skills/genesis-docs/templates/docs-update-template.md +8 -0
- package/.codex/skills/genesis-docs-automation/SKILL.md +1003 -0
- package/.codex/skills/genesis-docs-automation/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-docs-automation/checklists/docs-validation.md +359 -0
- package/.codex/skills/genesis-docs-automation/checklists/spec-alignment.md +312 -0
- package/.codex/skills/genesis-docs-automation/examples/example.md +59 -0
- package/.codex/skills/genesis-docs-automation/observability/docs-tracking.md +382 -0
- package/.codex/skills/genesis-docs-automation/playbooks/auto-update-flow.md +851 -0
- package/.codex/skills/genesis-docs-automation/playbooks/changelog-generation.md +491 -0
- package/.codex/skills/genesis-docs-automation/templates/changelog-entry-template.md +187 -0
- package/.codex/skills/genesis-docs-automation/templates/handoff-template.md +297 -0
- package/.codex/skills/genesis-harness/SKILL.md +1418 -0
- package/.codex/skills/genesis-harness/agents/openai.yaml +9 -0
- package/.codex/skills/genesis-harness/checklists/bug-fix-qa.md +169 -0
- package/.codex/skills/genesis-harness/checklists/checklist.md +10 -0
- package/.codex/skills/genesis-harness/checklists/new-feature-qa.md +157 -0
- package/.codex/skills/genesis-harness/checklists/refactor-qa.md +216 -0
- package/.codex/skills/genesis-harness/checklists/requirements-validation.md +211 -0
- package/.codex/skills/genesis-harness/examples/example.md +4 -0
- package/.codex/skills/genesis-harness/resources/change-impact-matrix-template.md +204 -0
- package/.codex/skills/genesis-harness/resources/foundation-phase-template.md +131 -0
- package/.codex/skills/genesis-harness/resources/phase-00-foundation-template.md +76 -0
- package/.codex/skills/genesis-harness/resources/post-implementation-guide.md +347 -0
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-architecture-boundaries.sh +23 -23
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-docs-sync.sh +24 -24
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-no-debug-logs.sh +21 -21
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-required-planning-files.sh +46 -46
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-spec-changelog.sh +24 -24
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-task-tracking.sh +25 -25
- package/.codex/skills/genesis-harness/scripts/compact-context.sh +54 -0
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/create-adr.sh +74 -74
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/create-bug.sh +160 -160
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/create-feature.sh +217 -217
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/detect-stack.sh +26 -26
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/init-planning.sh +750 -719
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/list-changed-files.sh +12 -12
- package/.codex/skills/genesis-harness/scripts/offload-log.sh +72 -0
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/run-verification.sh +47 -47
- package/.codex/skills/genesis-harness/scripts/run-verify-loop.sh +75 -0
- package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/update-state.sh +33 -33
- package/.codex/skills/genesis-harness/templates/harness-workflow-template.md +10 -0
- package/.codex/skills/genesis-harness-engineering/SKILL.md +159 -0
- package/.codex/skills/genesis-harness-engineering/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-harness-engineering/checklists/checklist.md +48 -0
- package/.codex/skills/genesis-harness-engineering/examples/example.md +57 -0
- package/.codex/skills/genesis-harness-engineering/playbooks/harness-evolution.md +99 -0
- package/.codex/skills/genesis-harness-engineering/templates/harness-change-template.md +37 -0
- package/.codex/skills/genesis-new-design/SKILL.md +95 -0
- package/.codex/skills/genesis-new-design/agents/openai.yaml +4 -0
- package/.codex/skills/genesis-new-design/checklists/checklist.md +8 -0
- package/.codex/skills/genesis-new-design/examples/example.md +4 -0
- package/.codex/skills/genesis-new-design/templates/new-design-template.md +9 -0
- package/.codex/skills/genesis-observability-automation/SKILL.md +382 -0
- package/.codex/skills/genesis-observability-automation/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-observability-automation/examples/example.md +86 -0
- package/.codex/skills/genesis-performance-profiling/SKILL.md +510 -0
- package/.codex/skills/genesis-performance-profiling/agents/openai.yaml +6 -0
- package/.codex/skills/genesis-performance-profiling/checklists/optimization-verification.md +199 -0
- package/.codex/skills/genesis-performance-profiling/checklists/performance-baseline.md +183 -0
- package/.codex/skills/genesis-performance-profiling/examples/example.md +234 -0
- package/.codex/skills/genesis-performance-profiling/observability/performance-tracking.md +202 -0
- package/.codex/skills/genesis-performance-profiling/playbooks/load-testing-orchestration.md +593 -0
- package/.codex/skills/genesis-performance-profiling/playbooks/profiling-playbook.md +601 -0
- package/.codex/skills/genesis-performance-profiling/templates/load-test-config-template.md +428 -0
- package/.codex/skills/genesis-performance-profiling/templates/performance-report-template.md +238 -0
- package/.codex/skills/genesis-pipeline-orchestration/SKILL.md +46 -0
- package/.codex/skills/genesis-pipeline-orchestration/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-pipeline-orchestration/checklists/checklist.md +12 -0
- package/.codex/skills/genesis-pipeline-orchestration/examples/example.md +4 -0
- package/.codex/skills/genesis-pipeline-orchestration/templates/orchestration-template.md +12 -0
- package/.codex/skills/genesis-planning/SKILL.md +46 -0
- package/.codex/skills/genesis-planning/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-planning/checklists/checklist.md +8 -0
- package/.codex/skills/genesis-planning/examples/example.md +4 -0
- package/.codex/skills/genesis-planning/templates/plan-template.md +11 -0
- package/.codex/skills/genesis-release/SKILL.md +46 -0
- package/.codex/skills/genesis-release/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-release/checklists/checklist.md +8 -0
- package/.codex/skills/genesis-release/examples/example.md +4 -0
- package/.codex/skills/genesis-release/templates/release-checklist-template.md +9 -0
- package/.codex/skills/genesis-release-orchestration/SKILL.md +653 -0
- package/.codex/skills/genesis-release-orchestration/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-release-orchestration/checklists/post-deployment-verification.md +274 -0
- package/.codex/skills/genesis-release-orchestration/checklists/pre-release-validation.md +220 -0
- package/.codex/skills/genesis-release-orchestration/examples/example.md +78 -0
- package/.codex/skills/genesis-release-orchestration/observability/release-tracking.md +253 -0
- package/.codex/skills/genesis-release-orchestration/playbooks/canary-deployment-orchestration.md +472 -0
- package/.codex/skills/genesis-release-orchestration/playbooks/semantic-versioning-automation.md +494 -0
- package/.codex/skills/genesis-release-orchestration/templates/deployment-strategy-template.md +303 -0
- package/.codex/skills/genesis-release-orchestration/templates/release-runbook-template.md +420 -0
- package/.codex/skills/genesis-research/SKILL.md +46 -0
- package/.codex/skills/genesis-research/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-research/checklists/checklist.md +7 -0
- package/.codex/skills/genesis-research/examples/example.md +4 -0
- package/.codex/skills/genesis-research/templates/research-note-template.md +9 -0
- package/.codex/skills/genesis-research-first/SKILL.md +237 -0
- package/.codex/skills/genesis-research-first/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-research-first/examples/example.md +85 -0
- package/.codex/skills/genesis-spec-propagation/SKILL.md +534 -0
- package/.codex/skills/genesis-spec-propagation/agents/openai.yaml +7 -0
- package/.codex/skills/genesis-spec-propagation/checklists/phase-update-verification.md +384 -0
- package/.codex/skills/genesis-spec-propagation/checklists/spec-change-detection.md +257 -0
- package/.codex/skills/genesis-spec-propagation/examples/example.md +63 -0
- package/.codex/skills/genesis-spec-propagation/observability/propagation-tracking.md +373 -0
- package/.codex/skills/genesis-spec-propagation/playbooks/breaking-change-propagation.md +692 -0
- package/.codex/skills/genesis-spec-propagation/playbooks/feature-change-propagation.md +434 -0
- package/.codex/skills/genesis-spec-propagation/templates/migration-guide-template.md +407 -0
- package/.codex/skills/genesis-upgrade-design/SKILL.md +97 -0
- package/.codex/skills/genesis-upgrade-design/agents/openai.yaml +4 -0
- package/.codex/skills/genesis-upgrade-design/checklists/checklist.md +8 -0
- package/.codex/skills/genesis-upgrade-design/examples/example.md +4 -0
- package/.codex/skills/genesis-upgrade-design/templates/upgrade-design-template.md +9 -0
- package/.codex/skills/spec-impact-engine/SKILL.md +504 -0
- package/.codex/skills/spec-impact-engine/agents/openai.yaml +7 -0
- package/.codex/skills/spec-impact-engine/detect-spec-changes.sh +262 -0
- package/.codex/skills/spec-impact-engine/examples/example.md +98 -0
- package/.codex/skills/spec-impact-engine/templates/impact-report.md +248 -0
- package/.codex/skills/spec-impact-engine/templates/migration-guide.md +223 -0
- package/.codex/skills/ui-ux-test-skill/SKILL.md +46 -0
- package/.codex/skills/ui-ux-test-skill/agents/openai.yaml +7 -0
- package/.codex/skills/ui-ux-test-skill/checklists/checklist.md +8 -0
- package/.codex/skills/ui-ux-test-skill/examples/example.md +4 -0
- package/.codex/skills/ui-ux-test-skill/templates/playwright-test-template.md +4 -0
- package/.codex-plugin/plugin.json +13 -11
- package/README.EN.md +719 -0
- package/README.VI.md +712 -0
- package/README.md +318 -181
- package/VERSION +1 -1
- package/bin/genesis-harness.js +133 -79
- package/contracts/agents/CharacterBibleAgent/error.json +1 -0
- package/contracts/agents/CharacterBibleAgent/example.json +1 -0
- package/contracts/agents/CharacterBibleAgent/request.json +1 -0
- package/contracts/agents/CharacterBibleAgent/response.json +1 -0
- package/contracts/agents/CharacterBibleAgent/schema.json +1 -0
- package/contracts/agents/ImageGenerationAgent/error.json +1 -0
- package/contracts/agents/ImageGenerationAgent/example.json +1 -0
- package/contracts/agents/ImageGenerationAgent/request.json +1 -0
- package/contracts/agents/ImageGenerationAgent/response.json +1 -0
- package/contracts/agents/ImageGenerationAgent/schema.json +1 -0
- package/contracts/agents/PipelineOrchestrator/error.json +1 -0
- package/contracts/agents/PipelineOrchestrator/example.json +1 -0
- package/contracts/agents/PipelineOrchestrator/request.json +1 -0
- package/contracts/agents/PipelineOrchestrator/response.json +1 -0
- package/contracts/agents/PipelineOrchestrator/schema.json +1 -0
- package/contracts/agents/PromptGenerationAgent/error.json +1 -0
- package/contracts/agents/PromptGenerationAgent/example.json +1 -0
- package/contracts/agents/PromptGenerationAgent/request.json +1 -0
- package/contracts/agents/PromptGenerationAgent/response.json +1 -0
- package/contracts/agents/PromptGenerationAgent/schema.json +1 -0
- package/contracts/agents/RenderAgent/error.json +1 -0
- package/contracts/agents/RenderAgent/example.json +1 -0
- package/contracts/agents/RenderAgent/request.json +1 -0
- package/contracts/agents/RenderAgent/response.json +1 -0
- package/contracts/agents/RenderAgent/schema.json +1 -0
- package/contracts/agents/ScenePlanningAgent/error.json +1 -0
- package/contracts/agents/ScenePlanningAgent/example.json +1 -0
- package/contracts/agents/ScenePlanningAgent/request.json +1 -0
- package/contracts/agents/ScenePlanningAgent/response.json +1 -0
- package/contracts/agents/ScenePlanningAgent/schema.json +1 -0
- package/contracts/agents/ScreenplayAgent/error.json +1 -0
- package/contracts/agents/ScreenplayAgent/example.json +1 -0
- package/contracts/agents/ScreenplayAgent/request.json +1 -0
- package/contracts/agents/ScreenplayAgent/response.json +1 -0
- package/contracts/agents/ScreenplayAgent/schema.json +1 -0
- package/contracts/agents/StoryAnalysisAgent/error.json +1 -0
- package/contracts/agents/StoryAnalysisAgent/example.json +1 -0
- package/contracts/agents/StoryAnalysisAgent/request.json +1 -0
- package/contracts/agents/StoryAnalysisAgent/response.json +1 -0
- package/contracts/agents/StoryAnalysisAgent/schema.json +1 -0
- package/contracts/agents/SubtitleGenerationAgent/error.json +1 -0
- package/contracts/agents/SubtitleGenerationAgent/example.json +1 -0
- package/contracts/agents/SubtitleGenerationAgent/request.json +1 -0
- package/contracts/agents/SubtitleGenerationAgent/response.json +1 -0
- package/contracts/agents/SubtitleGenerationAgent/schema.json +1 -0
- package/contracts/agents/VoiceGenerationAgent/error.json +1 -0
- package/contracts/agents/VoiceGenerationAgent/example.json +1 -0
- package/contracts/agents/VoiceGenerationAgent/request.json +1 -0
- package/contracts/agents/VoiceGenerationAgent/response.json +1 -0
- package/contracts/agents/VoiceGenerationAgent/schema.json +1 -0
- package/contracts/api/README.md +4 -0
- package/contracts/api/endpoint-template/error.json +7 -0
- package/contracts/api/endpoint-template/example.json +11 -0
- package/contracts/api/endpoint-template/request.json +7 -0
- package/contracts/api/endpoint-template/response.json +6 -0
- package/contracts/api/endpoint-template/schema.json +9 -0
- package/contracts/events/README.md +4 -0
- package/contracts/events/event-template/error.json +4 -0
- package/contracts/events/event-template/example.json +6 -0
- package/contracts/events/event-template/request.json +6 -0
- package/contracts/events/event-template/response.json +3 -0
- package/contracts/events/event-template/schema.json +8 -0
- package/contracts/ui/README.md +4 -0
- package/contracts/ui/screen-template/error.json +4 -0
- package/contracts/ui/screen-template/example.json +7 -0
- package/contracts/ui/screen-template/request.json +4 -0
- package/contracts/ui/screen-template/response.json +4 -0
- package/contracts/ui/screen-template/schema.json +8 -0
- package/fixtures/agents/agent-fixture-template.md +14 -0
- package/fixtures/api/api-fixture-template.md +14 -0
- package/fixtures/images/image-fixture-template.md +14 -0
- package/fixtures/pipeline/pipeline-fixture-template.md +14 -0
- package/fixtures/render/render-fixture-template.md +14 -0
- package/fixtures/tts/tts-fixture-template.md +14 -0
- package/fixtures/videos/video-fixture-template.md +14 -0
- package/observability/agent-runs/agent-run-template.md +22 -0
- package/observability/decision-logs/decision-log-template.md +18 -0
- package/observability/failures/failure-template.md +18 -0
- package/package.json +8 -2
- package/playwright/e2e/e2e-template.md +4 -0
- package/playwright/fixtures/ui-fixture-template.md +4 -0
- package/playwright/smoke/smoke-template.md +4 -0
- package/playwright/visual/visual-regression-template.md +4 -0
- package/scripts/README.md +342 -0
- package/scripts/compact-context.sh +54 -0
- package/scripts/detect-changes.sh +152 -0
- package/scripts/install.sh +103 -69
- package/scripts/offload-log.sh +72 -0
- package/scripts/run-evals.sh +118 -52
- package/scripts/run-verify-loop.sh +75 -0
- package/scripts/uninstall.sh +81 -52
- package/scripts/verify.sh +380 -109
- package/tests/contracts/contract-template.test.md +10 -0
- package/tests/fixtures/fixture-index.md +4 -0
- package/tests/integration/integration-template.test.md +4 -0
- package/tests/unit/unit-template.test.md +4 -0
- package/.codex/skills/project-genesis-harness/SKILL.md +0 -727
- package/.codex/skills/project-genesis-harness/agents/openai.yaml +0 -9
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/references/planning-schema.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/references/quality-rubric.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/references/research-rubric.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/references/workflows.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/agents-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/api-docs-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/architecture-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/audit-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/bug-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/check-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/conventions-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/decision-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/design-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/escalation-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/feature-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/integrations-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/journeys-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/lessons-learned-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/observability-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/phase-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/pitfalls-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/planning-tree-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/project-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/quality-score-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/requirements-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/research-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/review-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/spec-changelog-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/stack-template.md +0 -0
- /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/verification-template.md +0 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
# Feature Change Propagation Playbook
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
**Scenario**: New optional field added to API response (or new endpoint, new enum value, etc.)
|
|
6
|
+
|
|
7
|
+
**Complexity**: MEDIUM (mostly automatic, some manual review)
|
|
8
|
+
|
|
9
|
+
**Time**: 30-60 minutes
|
|
10
|
+
|
|
11
|
+
**Manual Steps**: Low (mainly review & validation)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Example: Adding New Optional Field
|
|
16
|
+
|
|
17
|
+
Suppose API response gets new field `avatarUrl`:
|
|
18
|
+
|
|
19
|
+
```diff
|
|
20
|
+
// OLD API response
|
|
21
|
+
{
|
|
22
|
+
"id": 123,
|
|
23
|
+
"name": "John Doe"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// NEW API response
|
|
27
|
+
{
|
|
28
|
+
"id": 123,
|
|
29
|
+
"name": "John Doe",
|
|
30
|
+
+ "avatarUrl": "https://example.com/avatar.jpg"
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Step 1: Understand the Feature (5 min)
|
|
37
|
+
|
|
38
|
+
### Questions to Answer
|
|
39
|
+
|
|
40
|
+
1. **Why added?** Is it for new UI feature, performance, or future use?
|
|
41
|
+
2. **Optional or required?** Should consumers always expect it?
|
|
42
|
+
3. **Data type**: What is the structure and constraints?
|
|
43
|
+
4. **Deprecates anything?** Are we replacing an old field?
|
|
44
|
+
5. **Performance impact?** Does fetching this field slow down API?
|
|
45
|
+
6. **Backward compatibility**: Will old clients still work without it?
|
|
46
|
+
|
|
47
|
+
### Record Decision
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
## Feature: Add avatarUrl to User Response
|
|
51
|
+
|
|
52
|
+
**Why**: New user profile UI needs avatar display
|
|
53
|
+
|
|
54
|
+
**Field Details**:
|
|
55
|
+
- Name: avatarUrl
|
|
56
|
+
- Type: string (URL)
|
|
57
|
+
- Optional: Yes (default to null if user has no avatar)
|
|
58
|
+
- Constraints: Valid URL format, max 2048 chars
|
|
59
|
+
- Deprecates: None
|
|
60
|
+
- Performance: No additional DB query needed
|
|
61
|
+
|
|
62
|
+
**Backward Compatibility**: Old clients will simply not use field (ignore unknown properties)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Step 2: Update Phase 1 - API Contract (ALREADY DONE)
|
|
68
|
+
|
|
69
|
+
This is the original spec change. Verify it's complete:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"type": "object",
|
|
74
|
+
"properties": {
|
|
75
|
+
"id": { "type": "integer" },
|
|
76
|
+
"name": { "type": "string" },
|
|
77
|
+
"avatarUrl": {
|
|
78
|
+
"type": ["string", "null"],
|
|
79
|
+
"format": "uri",
|
|
80
|
+
"description": "URL to user's avatar image",
|
|
81
|
+
"maxLength": 2048
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"required": ["id", "name"]
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
✅ Contract has new field as optional
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Step 3: Phase 2 - Update Tests (15 min)
|
|
93
|
+
|
|
94
|
+
### 3a. Update Mock Data
|
|
95
|
+
|
|
96
|
+
Find test mocks: `tests/fixtures/user-mocks.js`
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
// BEFORE
|
|
100
|
+
const mockUsers = [
|
|
101
|
+
{ id: 1, name: 'Alice' },
|
|
102
|
+
{ id: 2, name: 'Bob' },
|
|
103
|
+
{ id: 3, name: 'Charlie' }
|
|
104
|
+
];
|
|
105
|
+
|
|
106
|
+
// AFTER - Add avatarUrl to some mocks (realistic data)
|
|
107
|
+
const mockUsers = [
|
|
108
|
+
{
|
|
109
|
+
id: 1,
|
|
110
|
+
name: 'Alice',
|
|
111
|
+
avatarUrl: 'https://example.com/avatars/alice.jpg'
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: 2,
|
|
115
|
+
name: 'Bob',
|
|
116
|
+
avatarUrl: null // No avatar
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: 3,
|
|
120
|
+
name: 'Charlie',
|
|
121
|
+
avatarUrl: 'https://example.com/avatars/charlie.jpg'
|
|
122
|
+
}
|
|
123
|
+
];
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Tip**: Include both cases (with URL and null) for realistic testing.
|
|
127
|
+
|
|
128
|
+
### 3b. Add New Test Cases
|
|
129
|
+
|
|
130
|
+
Add `tests/api.test.js`:
|
|
131
|
+
|
|
132
|
+
```javascript
|
|
133
|
+
describe('User API - avatarUrl field', () => {
|
|
134
|
+
test('should include avatarUrl in user response', async () => {
|
|
135
|
+
const response = await api.getUser(1);
|
|
136
|
+
expect(response).toHaveProperty('avatarUrl');
|
|
137
|
+
expect(response.avatarUrl).toMatch(/^https:\/\//);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
test('should handle null avatarUrl for users without avatar', async () => {
|
|
141
|
+
const response = await api.getUser(2);
|
|
142
|
+
expect(response).toHaveProperty('avatarUrl');
|
|
143
|
+
expect(response.avatarUrl).toBeNull();
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test('should validate avatarUrl format', async () => {
|
|
147
|
+
const response = await api.getUser(1);
|
|
148
|
+
if (response.avatarUrl) {
|
|
149
|
+
expect(response.avatarUrl).toMatch(/^https?:\/\/.+/);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 3c. Run Tests
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npm test -- tests/api.test.js
|
|
159
|
+
|
|
160
|
+
# Expected: All tests pass ✅
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Step 4: Phase 3 - Update Backend Implementation (15 min)
|
|
166
|
+
|
|
167
|
+
### 4a. Update API Response Builder
|
|
168
|
+
|
|
169
|
+
Find handler: `src/handlers/user.handler.js`
|
|
170
|
+
|
|
171
|
+
```javascript
|
|
172
|
+
// BEFORE
|
|
173
|
+
async function getUser(req, res) {
|
|
174
|
+
const user = await db.users.findById(req.params.id);
|
|
175
|
+
return res.json({
|
|
176
|
+
id: user.id,
|
|
177
|
+
name: user.name
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// AFTER - Include avatarUrl
|
|
182
|
+
async function getUser(req, res) {
|
|
183
|
+
const user = await db.users.findById(req.params.id);
|
|
184
|
+
return res.json({
|
|
185
|
+
id: user.id,
|
|
186
|
+
name: user.name,
|
|
187
|
+
avatarUrl: user.avatar_url || null // Map DB field
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### 4b. Update Database Query (if needed)
|
|
193
|
+
|
|
194
|
+
If `avatar_url` column doesn't exist yet:
|
|
195
|
+
|
|
196
|
+
```sql
|
|
197
|
+
-- Migration: add_user_avatar_url.sql
|
|
198
|
+
ALTER TABLE users ADD COLUMN avatar_url VARCHAR(2048) DEFAULT NULL;
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 4c. Update Contract Docstring
|
|
202
|
+
|
|
203
|
+
```javascript
|
|
204
|
+
/**
|
|
205
|
+
* GET /api/users/:id
|
|
206
|
+
*
|
|
207
|
+
* Returns user data.
|
|
208
|
+
*
|
|
209
|
+
* NEW (v1.1): Field 'avatarUrl' added - optional URL to user's avatar
|
|
210
|
+
*
|
|
211
|
+
* Response: { id, name, avatarUrl? }
|
|
212
|
+
*
|
|
213
|
+
* Example:
|
|
214
|
+
* {
|
|
215
|
+
* "id": 1,
|
|
216
|
+
* "name": "Alice",
|
|
217
|
+
* "avatarUrl": "https://example.com/avatars/alice.jpg"
|
|
218
|
+
* }
|
|
219
|
+
*/
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### 4d. Validate Contract
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
npm run validate:contracts
|
|
226
|
+
|
|
227
|
+
# Expected: Valid ✅
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Step 5: Phase 4 - Update Client SDK (10 min)
|
|
233
|
+
|
|
234
|
+
### 5a. Update Type Definitions
|
|
235
|
+
|
|
236
|
+
File: `types/api.ts`
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
// BEFORE
|
|
240
|
+
interface User {
|
|
241
|
+
id: number;
|
|
242
|
+
name: string;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// AFTER
|
|
246
|
+
interface User {
|
|
247
|
+
id: number;
|
|
248
|
+
name: string;
|
|
249
|
+
avatarUrl?: string | null; // Optional URL to avatar
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### 5b. Update Client Method (if needed)
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
// Usually no change to method signature, just return type updated
|
|
257
|
+
|
|
258
|
+
async function fetchUser(id: number): Promise<User> {
|
|
259
|
+
const response = await fetch(`/api/users/${id}`);
|
|
260
|
+
return response.json(); // Now includes avatarUrl
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### 5c. Type Check
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
npm run tsc --noEmit
|
|
268
|
+
|
|
269
|
+
# Expected: No type errors ✅
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Step 6: Phase 5 - Update E2E Tests (10 min)
|
|
275
|
+
|
|
276
|
+
### 6a. Add Scenario
|
|
277
|
+
|
|
278
|
+
File: `playwright/e2e/user.spec.ts`
|
|
279
|
+
|
|
280
|
+
```javascript
|
|
281
|
+
test('should display user avatar when available', async ({ page }) => {
|
|
282
|
+
await page.goto('/users/1');
|
|
283
|
+
|
|
284
|
+
// New scenario: avatar displays if avatarUrl present
|
|
285
|
+
const avatar = page.locator('[data-test="user-avatar"]');
|
|
286
|
+
await expect(avatar).toBeVisible();
|
|
287
|
+
await expect(avatar).toHaveAttribute('src', /^https:\/\//);
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
test('should hide avatar placeholder when user has no avatar', async ({ page }) => {
|
|
291
|
+
await page.goto('/users/2');
|
|
292
|
+
|
|
293
|
+
// User 2 has null avatarUrl
|
|
294
|
+
const avatar = page.locator('[data-test="user-avatar"]');
|
|
295
|
+
await expect(avatar).not.toBeVisible();
|
|
296
|
+
});
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### 6b. Run E2E Tests
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
npm run test:e2e -- user.spec.ts
|
|
303
|
+
|
|
304
|
+
# Expected: All pass ✅
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Step 7: Validation (5 min)
|
|
310
|
+
|
|
311
|
+
### 7a. Syntax Check
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
npm run lint
|
|
315
|
+
|
|
316
|
+
# All files pass linting? ✅
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### 7b. Integration Test
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
npm run test
|
|
323
|
+
|
|
324
|
+
# Run all tests together
|
|
325
|
+
# Phase 2 + Phase 3 + Phase 4 + Phase 5 should all pass ✅
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### 7c. Cross-Phase Consistency
|
|
329
|
+
|
|
330
|
+
Verify alignment:
|
|
331
|
+
|
|
332
|
+
```
|
|
333
|
+
Phase 1: Contract includes avatarUrl ✓
|
|
334
|
+
Phase 2: Tests check for avatarUrl ✓
|
|
335
|
+
Phase 3: API returns avatarUrl ✓
|
|
336
|
+
Phase 4: SDK types include avatarUrl ✓
|
|
337
|
+
Phase 5: E2E tests verify avatarUrl display ✓
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## Step 8: Documentation (5 min)
|
|
343
|
+
|
|
344
|
+
### 8a. Update SPEC_CHANGELOG.md
|
|
345
|
+
|
|
346
|
+
```markdown
|
|
347
|
+
- 2026-05-31T10:30:00Z | FEATURE | Added avatarUrl to User response
|
|
348
|
+
New optional field for user profile UI improvements
|
|
349
|
+
Auto-updated phases: 2, 3, 4, 5
|
|
350
|
+
Impact: Clients can optionally display user avatars
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### 8b. Update CURRENT_STATE.md
|
|
354
|
+
|
|
355
|
+
```markdown
|
|
356
|
+
## Current Phase State
|
|
357
|
+
|
|
358
|
+
- Phase 1 (Contracts): User API contract v1.1 with avatarUrl ✅
|
|
359
|
+
- Phase 2 (Tests): 3 new tests for avatarUrl scenarios ✅
|
|
360
|
+
- Phase 3 (Implementation): Handler returns avatarUrl ✅
|
|
361
|
+
- Phase 4 (SDK): Types updated, avatarUrl optional ✅
|
|
362
|
+
- Phase 5 (E2E): 2 new E2E tests for avatar display ✅
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## Step 9: Sign-Off
|
|
368
|
+
|
|
369
|
+
- [ ] Phase 2: Tests pass ✅
|
|
370
|
+
- [ ] Phase 3: Handler returns avatarUrl ✅
|
|
371
|
+
- [ ] Phase 4: Types updated ✅
|
|
372
|
+
- [ ] Phase 5: E2E tests pass ✅
|
|
373
|
+
- [ ] All tests green: `npm test` ✅
|
|
374
|
+
- [ ] SPEC_CHANGELOG.md: Updated ✅
|
|
375
|
+
- [ ] Ready for commit ✅
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Common Issues & Recovery
|
|
380
|
+
|
|
381
|
+
### Issue: E2E Tests Can't Find Avatar Element
|
|
382
|
+
|
|
383
|
+
**Cause**: UI doesn't yet render avatar for new field
|
|
384
|
+
|
|
385
|
+
**Recovery**:
|
|
386
|
+
1. Create feature branch: `git checkout -b feat/user-avatar-ui`
|
|
387
|
+
2. Implement UI changes to display avatarUrl
|
|
388
|
+
3. Run E2E tests again: `npm run test:e2e`
|
|
389
|
+
4. Merge UI changes back to main branch
|
|
390
|
+
|
|
391
|
+
### Issue: Phase 3 Doesn't Have avatar_url Column
|
|
392
|
+
|
|
393
|
+
**Cause**: Database migration not run
|
|
394
|
+
|
|
395
|
+
**Recovery**:
|
|
396
|
+
1. Run migrations: `npm run migrate`
|
|
397
|
+
2. Verify column exists: `SELECT * FROM users LIMIT 1;`
|
|
398
|
+
3. Re-run Phase 3 tests
|
|
399
|
+
|
|
400
|
+
### Issue: Client SDK Still Can't Find avatarUrl
|
|
401
|
+
|
|
402
|
+
**Cause**: Stale cache or old test data
|
|
403
|
+
|
|
404
|
+
**Recovery**:
|
|
405
|
+
1. Clear cache: `rm -rf node_modules/.cache`
|
|
406
|
+
2. Reinstall: `npm install`
|
|
407
|
+
3. Re-run type check: `npm run tsc --noEmit`
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## Time Breakdown
|
|
412
|
+
|
|
413
|
+
| Phase | Task | Time |
|
|
414
|
+
|-------|------|------|
|
|
415
|
+
| 1 | Understand feature | 5 min |
|
|
416
|
+
| 2 | Update tests | 15 min |
|
|
417
|
+
| 3 | Update API handler | 15 min |
|
|
418
|
+
| 4 | Update SDK types | 10 min |
|
|
419
|
+
| 5 | Update E2E tests | 10 min |
|
|
420
|
+
| — | Validation | 5 min |
|
|
421
|
+
| **Total** | | **60 min** |
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## Success Criteria
|
|
426
|
+
|
|
427
|
+
✅ All tests pass (Phase 2-5)
|
|
428
|
+
✅ Types are consistent (Phase 4 ⊂ Phase 3 API)
|
|
429
|
+
✅ E2E scenarios reference avatarUrl correctly
|
|
430
|
+
✅ SPEC_CHANGELOG.md entry added
|
|
431
|
+
✅ No manual touchups needed
|
|
432
|
+
✅ Backward compatible (old clients work fine)
|
|
433
|
+
✅ Ready for merge to main
|
|
434
|
+
|