takt 0.41.0 → 0.43.0
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/README.md +59 -28
- package/builtins/en/config.yaml +9 -1
- package/builtins/en/facets/instructions/dual-team-leader-implement.md +7 -2
- package/builtins/en/facets/instructions/fix-maintenance.md +43 -0
- package/builtins/en/facets/instructions/implement-maintenance.md +72 -0
- package/builtins/en/facets/instructions/plan-maintenance.md +51 -0
- package/builtins/en/facets/instructions/review-coding.md +8 -0
- package/builtins/en/facets/instructions/supervise-maintenance.md +110 -0
- package/builtins/en/facets/instructions/team-leader-implement.md +6 -1
- package/builtins/en/facets/instructions/write-tests-first.md +5 -0
- package/builtins/en/facets/instructions/write-tests-maintenance.md +45 -0
- package/builtins/en/facets/knowledge/architecture.md +18 -13
- package/builtins/en/facets/knowledge/cqrs-es.md +48 -0
- package/builtins/en/facets/knowledge/existing-system.md +70 -0
- package/builtins/en/facets/knowledge/frontend.md +25 -0
- package/builtins/en/facets/knowledge/react.md +35 -0
- package/builtins/en/facets/output-contracts/coding-review.md +41 -0
- package/builtins/en/facets/output-contracts/frontend-review.md +1 -0
- package/builtins/en/facets/output-contracts/maintenance-scope.md +29 -0
- package/builtins/en/facets/personas/coding-reviewer.md +27 -0
- package/builtins/en/facets/personas/dual-supervisor.md +1 -1
- package/builtins/en/facets/policies/ai-antipattern.md +59 -0
- package/builtins/en/facets/policies/coding.md +85 -3
- package/builtins/en/facets/policies/existing-system-respect.md +73 -0
- package/builtins/en/facets/policies/qa.md +3 -1
- package/builtins/en/facets/policies/review.md +25 -12
- package/builtins/en/facets/policies/testing.md +33 -0
- package/builtins/en/workflow-categories.yaml +1 -0
- package/builtins/en/workflows/auto-improvement-loop.yaml +20 -4
- package/builtins/en/workflows/default-peer-review.yaml +25 -3
- package/builtins/en/workflows/frontend-maintenance.yaml +499 -0
- package/builtins/en/workflows/peer-review.yaml +23 -1
- package/builtins/en/workflows/review-fix-takt-default.yaml +30 -2
- package/builtins/ja/config.yaml +9 -1
- package/builtins/ja/facets/instructions/dual-team-leader-implement.md +7 -2
- package/builtins/ja/facets/instructions/fix-maintenance.md +43 -0
- package/builtins/ja/facets/instructions/implement-maintenance.md +72 -0
- package/builtins/ja/facets/instructions/plan-maintenance.md +51 -0
- package/builtins/ja/facets/instructions/review-coding.md +8 -0
- package/builtins/ja/facets/instructions/supervise-maintenance.md +110 -0
- package/builtins/ja/facets/instructions/team-leader-implement.md +6 -1
- package/builtins/ja/facets/instructions/write-tests-first.md +5 -0
- package/builtins/ja/facets/instructions/write-tests-maintenance.md +45 -0
- package/builtins/ja/facets/knowledge/architecture.md +18 -13
- package/builtins/ja/facets/knowledge/cqrs-es.md +48 -0
- package/builtins/ja/facets/knowledge/existing-system.md +70 -0
- package/builtins/ja/facets/knowledge/frontend.md +25 -0
- package/builtins/ja/facets/knowledge/react.md +35 -0
- package/builtins/ja/facets/output-contracts/coding-review.md +41 -0
- package/builtins/ja/facets/output-contracts/frontend-review.md +1 -0
- package/builtins/ja/facets/output-contracts/maintenance-scope.md +29 -0
- package/builtins/ja/facets/personas/coding-reviewer.md +27 -0
- package/builtins/ja/facets/personas/dual-supervisor.md +2 -2
- package/builtins/ja/facets/policies/ai-antipattern.md +59 -0
- package/builtins/ja/facets/policies/coding.md +85 -3
- package/builtins/ja/facets/policies/existing-system-respect.md +73 -0
- package/builtins/ja/facets/policies/qa.md +3 -1
- package/builtins/ja/facets/policies/review.md +25 -12
- package/builtins/ja/facets/policies/testing.md +33 -0
- package/builtins/ja/workflow-categories.yaml +1 -0
- package/builtins/ja/workflows/auto-improvement-loop.yaml +20 -4
- package/builtins/ja/workflows/default-peer-review.yaml +25 -3
- package/builtins/ja/workflows/frontend-maintenance.yaml +499 -0
- package/builtins/ja/workflows/peer-review.yaml +23 -1
- package/builtins/ja/workflows/review-fix-takt-default.yaml +30 -2
- package/builtins/skill/references/yaml-schema.md +8 -3
- package/builtins/skill-codex/references/yaml-schema.md +8 -3
- package/dist/agents/decompose-task-usecase.d.ts.map +1 -1
- package/dist/agents/decompose-task-usecase.js +3 -2
- package/dist/agents/decompose-task-usecase.js.map +1 -1
- package/dist/agents/judge-status-usecase.d.ts.map +1 -1
- package/dist/agents/judge-status-usecase.js +4 -3
- package/dist/agents/judge-status-usecase.js.map +1 -1
- package/dist/agents/provider-call-options.d.ts +4 -0
- package/dist/agents/provider-call-options.d.ts.map +1 -0
- package/dist/agents/provider-call-options.js +9 -0
- package/dist/agents/provider-call-options.js.map +1 -0
- package/dist/agents/runner.js +1 -1
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/structured-caller/prompt-based-structured-caller.d.ts.map +1 -1
- package/dist/agents/structured-caller/prompt-based-structured-caller.js +5 -4
- package/dist/agents/structured-caller/prompt-based-structured-caller.js.map +1 -1
- package/dist/agents/team-leader-structured-output.d.ts.map +1 -1
- package/dist/agents/team-leader-structured-output.js +21 -0
- package/dist/agents/team-leader-structured-output.js.map +1 -1
- package/dist/app/cli/commands.js +7 -1
- package/dist/app/cli/commands.js.map +1 -1
- package/dist/app/cli/program.js +1 -1
- package/dist/app/cli/program.js.map +1 -1
- package/dist/app/cli/routing.d.ts.map +1 -1
- package/dist/app/cli/routing.js +8 -1
- package/dist/app/cli/routing.js.map +1 -1
- package/dist/core/models/assistant-config.d.ts +4 -0
- package/dist/core/models/assistant-config.d.ts.map +1 -0
- package/dist/core/models/assistant-config.js +4 -0
- package/dist/core/models/assistant-config.js.map +1 -0
- package/dist/core/models/config-schemas.d.ts +160 -9
- package/dist/core/models/config-schemas.d.ts.map +1 -1
- package/dist/core/models/config-schemas.js +12 -2
- package/dist/core/models/config-schemas.js.map +1 -1
- package/dist/core/models/config-types.d.ts +30 -4
- package/dist/core/models/config-types.d.ts.map +1 -1
- package/dist/core/models/index.d.ts +1 -1
- package/dist/core/models/index.d.ts.map +1 -1
- package/dist/core/models/index.js.map +1 -1
- package/dist/core/models/provider-profiles.d.ts +1 -1
- package/dist/core/models/provider-profiles.d.ts.map +1 -1
- package/dist/core/models/quality-gate-defaults.d.ts +2 -0
- package/dist/core/models/quality-gate-defaults.d.ts.map +1 -0
- package/dist/core/models/quality-gate-defaults.js +2 -0
- package/dist/core/models/quality-gate-defaults.js.map +1 -0
- package/dist/core/models/response.d.ts +1 -1
- package/dist/core/models/response.d.ts.map +1 -1
- package/dist/core/models/response.js +1 -1
- package/dist/core/models/response.js.map +1 -1
- package/dist/core/models/schema-base.d.ts +80 -3
- package/dist/core/models/schema-base.d.ts.map +1 -1
- package/dist/core/models/schema-base.js +76 -2
- package/dist/core/models/schema-base.js.map +1 -1
- package/dist/core/models/types.d.ts +2 -2
- package/dist/core/models/types.d.ts.map +1 -1
- package/dist/core/models/workflow-provider-options.d.ts +7 -0
- package/dist/core/models/workflow-provider-options.d.ts.map +1 -1
- package/dist/core/models/workflow-schemas.d.ts +368 -51
- package/dist/core/models/workflow-schemas.d.ts.map +1 -1
- package/dist/core/models/workflow-system-input-types.d.ts +8 -1
- package/dist/core/models/workflow-system-input-types.d.ts.map +1 -1
- package/dist/core/models/workflow-system-schemas.d.ts +7 -1
- package/dist/core/models/workflow-system-schemas.d.ts.map +1 -1
- package/dist/core/models/workflow-system-schemas.js +12 -1
- package/dist/core/models/workflow-system-schemas.js.map +1 -1
- package/dist/core/models/workflow-types.d.ts +13 -5
- package/dist/core/models/workflow-types.d.ts.map +1 -1
- package/dist/core/models/workflow-types.js.map +1 -1
- package/dist/core/workflow/engine/OptionsBuilder.d.ts +1 -0
- package/dist/core/workflow/engine/OptionsBuilder.d.ts.map +1 -1
- package/dist/core/workflow/engine/OptionsBuilder.js +9 -4
- package/dist/core/workflow/engine/OptionsBuilder.js.map +1 -1
- package/dist/core/workflow/engine/ParallelRunner.d.ts +11 -0
- package/dist/core/workflow/engine/ParallelRunner.d.ts.map +1 -1
- package/dist/core/workflow/engine/ParallelRunner.js +139 -19
- package/dist/core/workflow/engine/ParallelRunner.js.map +1 -1
- package/dist/core/workflow/engine/TeamLeaderRunner.d.ts.map +1 -1
- package/dist/core/workflow/engine/TeamLeaderRunner.js +55 -23
- package/dist/core/workflow/engine/TeamLeaderRunner.js.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngine.d.ts +1 -0
- package/dist/core/workflow/engine/WorkflowEngine.d.ts.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngine.js +29 -4
- package/dist/core/workflow/engine/WorkflowEngine.js.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngineSetup.d.ts.map +1 -1
- package/dist/core/workflow/engine/WorkflowEngineSetup.js +2 -0
- package/dist/core/workflow/engine/WorkflowEngineSetup.js.map +1 -1
- package/dist/core/workflow/engine/WorkflowRunLoop.d.ts +8 -0
- package/dist/core/workflow/engine/WorkflowRunLoop.d.ts.map +1 -1
- package/dist/core/workflow/engine/WorkflowRunLoop.js +78 -7
- package/dist/core/workflow/engine/WorkflowRunLoop.js.map +1 -1
- package/dist/core/workflow/engine/team-leader-execution.d.ts +1 -0
- package/dist/core/workflow/engine/team-leader-execution.d.ts.map +1 -1
- package/dist/core/workflow/engine/team-leader-execution.js +22 -0
- package/dist/core/workflow/engine/team-leader-execution.js.map +1 -1
- package/dist/core/workflow/engine/team-leader-timeout-fallback.d.ts +13 -0
- package/dist/core/workflow/engine/team-leader-timeout-fallback.d.ts.map +1 -0
- package/dist/core/workflow/engine/team-leader-timeout-fallback.js +125 -0
- package/dist/core/workflow/engine/team-leader-timeout-fallback.js.map +1 -0
- package/dist/core/workflow/instruction/InstructionBuilder.d.ts.map +1 -1
- package/dist/core/workflow/instruction/InstructionBuilder.js +4 -3
- package/dist/core/workflow/instruction/InstructionBuilder.js.map +1 -1
- package/dist/core/workflow/observability/workflowSpans.d.ts +28 -0
- package/dist/core/workflow/observability/workflowSpans.d.ts.map +1 -0
- package/dist/core/workflow/observability/workflowSpans.js +107 -0
- package/dist/core/workflow/observability/workflowSpans.js.map +1 -0
- package/dist/core/workflow/part-definition-validator.d.ts.map +1 -1
- package/dist/core/workflow/part-definition-validator.js +4 -0
- package/dist/core/workflow/part-definition-validator.js.map +1 -1
- package/dist/core/workflow/permission-profile-resolution.d.ts.map +1 -1
- package/dist/core/workflow/permission-profile-resolution.js +1 -0
- package/dist/core/workflow/permission-profile-resolution.js.map +1 -1
- package/dist/core/workflow/phase-runner.d.ts +1 -3
- package/dist/core/workflow/phase-runner.d.ts.map +1 -1
- package/dist/core/workflow/phase-runner.js.map +1 -1
- package/dist/core/workflow/quality-gates/commandGateMessage.d.ts +4 -0
- package/dist/core/workflow/quality-gates/commandGateMessage.d.ts.map +1 -0
- package/dist/core/workflow/quality-gates/commandGateMessage.js +84 -0
- package/dist/core/workflow/quality-gates/commandGateMessage.js.map +1 -0
- package/dist/core/workflow/quality-gates/commandGateRunner.d.ts +3 -0
- package/dist/core/workflow/quality-gates/commandGateRunner.d.ts.map +1 -0
- package/dist/core/workflow/quality-gates/commandGateRunner.js +242 -0
- package/dist/core/workflow/quality-gates/commandGateRunner.js.map +1 -0
- package/dist/core/workflow/quality-gates/qualityGateRunner.d.ts +3 -0
- package/dist/core/workflow/quality-gates/qualityGateRunner.d.ts.map +1 -0
- package/dist/core/workflow/quality-gates/qualityGateRunner.js +29 -0
- package/dist/core/workflow/quality-gates/qualityGateRunner.js.map +1 -0
- package/dist/core/workflow/quality-gates/types.d.ts +41 -0
- package/dist/core/workflow/quality-gates/types.d.ts.map +1 -0
- package/dist/core/workflow/quality-gates/types.js +2 -0
- package/dist/core/workflow/quality-gates/types.js.map +1 -0
- package/dist/core/workflow/report-phase-runner.d.ts.map +1 -1
- package/dist/core/workflow/report-phase-runner.js +3 -2
- package/dist/core/workflow/report-phase-runner.js.map +1 -1
- package/dist/core/workflow/run/run-meta.d.ts +3 -1
- package/dist/core/workflow/run/run-meta.d.ts.map +1 -1
- package/dist/core/workflow/run/run-meta.js +2 -0
- package/dist/core/workflow/run/run-meta.js.map +1 -1
- package/dist/core/workflow/run/run-slug.d.ts +2 -0
- package/dist/core/workflow/run/run-slug.d.ts.map +1 -0
- package/dist/core/workflow/run/run-slug.js +19 -0
- package/dist/core/workflow/run/run-slug.js.map +1 -0
- package/dist/core/workflow/status-judgment-phase.d.ts.map +1 -1
- package/dist/core/workflow/status-judgment-phase.js +7 -3
- package/dist/core/workflow/status-judgment-phase.js.map +1 -1
- package/dist/core/workflow/system/system-step-effect-runner.d.ts.map +1 -1
- package/dist/core/workflow/system/system-step-effect-runner.js +16 -1
- package/dist/core/workflow/system/system-step-effect-runner.js.map +1 -1
- package/dist/core/workflow/team-leader-continuation-ids.d.ts +3 -0
- package/dist/core/workflow/team-leader-continuation-ids.d.ts.map +1 -0
- package/dist/core/workflow/team-leader-continuation-ids.js +6 -0
- package/dist/core/workflow/team-leader-continuation-ids.js.map +1 -0
- package/dist/core/workflow/types.d.ts +7 -1
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/features/interactive/assistantInitFiles.d.ts +2 -0
- package/dist/features/interactive/assistantInitFiles.d.ts.map +1 -0
- package/dist/features/interactive/assistantInitFiles.js +110 -0
- package/dist/features/interactive/assistantInitFiles.js.map +1 -0
- package/dist/features/interactive/conversationLoop.d.ts +5 -1
- package/dist/features/interactive/conversationLoop.d.ts.map +1 -1
- package/dist/features/interactive/conversationLoop.js +33 -11
- package/dist/features/interactive/conversationLoop.js.map +1 -1
- package/dist/features/interactive/imageAttachments.d.ts +20 -0
- package/dist/features/interactive/imageAttachments.d.ts.map +1 -0
- package/dist/features/interactive/imageAttachments.js +75 -0
- package/dist/features/interactive/imageAttachments.js.map +1 -0
- package/dist/features/interactive/index.d.ts +2 -1
- package/dist/features/interactive/index.d.ts.map +1 -1
- package/dist/features/interactive/index.js +1 -1
- package/dist/features/interactive/index.js.map +1 -1
- package/dist/features/interactive/inlineImagePaste.d.ts +21 -0
- package/dist/features/interactive/inlineImagePaste.d.ts.map +1 -0
- package/dist/features/interactive/inlineImagePaste.js +136 -0
- package/dist/features/interactive/inlineImagePaste.js.map +1 -0
- package/dist/features/interactive/instructModeTypes.d.ts +23 -0
- package/dist/features/interactive/instructModeTypes.d.ts.map +1 -0
- package/dist/features/interactive/instructModeTypes.js +2 -0
- package/dist/features/interactive/instructModeTypes.js.map +1 -0
- package/dist/features/interactive/interactive-summary.d.ts +1 -1
- package/dist/features/interactive/interactive-summary.d.ts.map +1 -1
- package/dist/features/interactive/interactive-summary.js +4 -3
- package/dist/features/interactive/interactive-summary.js.map +1 -1
- package/dist/features/interactive/interactive.d.ts +8 -3
- package/dist/features/interactive/interactive.d.ts.map +1 -1
- package/dist/features/interactive/interactive.js +4 -0
- package/dist/features/interactive/interactive.js.map +1 -1
- package/dist/features/interactive/interactiveInput.d.ts +2 -1
- package/dist/features/interactive/interactiveInput.d.ts.map +1 -1
- package/dist/features/interactive/interactiveInput.js +5 -1
- package/dist/features/interactive/interactiveInput.js.map +1 -1
- package/dist/features/interactive/lineEditor.d.ts +2 -0
- package/dist/features/interactive/lineEditor.d.ts.map +1 -1
- package/dist/features/interactive/lineEditor.js +130 -9
- package/dist/features/interactive/lineEditor.js.map +1 -1
- package/dist/features/interactive/passthroughMode.d.ts.map +1 -1
- package/dist/features/interactive/passthroughMode.js +8 -4
- package/dist/features/interactive/passthroughMode.js.map +1 -1
- package/dist/features/interactive/promptSections.d.ts +2 -0
- package/dist/features/interactive/promptSections.d.ts.map +1 -1
- package/dist/features/interactive/promptSections.js +7 -1
- package/dist/features/interactive/promptSections.js.map +1 -1
- package/dist/features/interactive/quietMode.d.ts.map +1 -1
- package/dist/features/interactive/quietMode.js +12 -8
- package/dist/features/interactive/quietMode.js.map +1 -1
- package/dist/features/interactive/retryMode.d.ts +10 -13
- package/dist/features/interactive/retryMode.d.ts.map +1 -1
- package/dist/features/interactive/retryMode.js +42 -22
- package/dist/features/interactive/retryMode.js.map +1 -1
- package/dist/features/interactive/slashCommandRegistry.d.ts.map +1 -1
- package/dist/features/interactive/slashCommandRegistry.js +1 -0
- package/dist/features/interactive/slashCommandRegistry.js.map +1 -1
- package/dist/features/tasks/add/index.d.ts +4 -0
- package/dist/features/tasks/add/index.d.ts.map +1 -1
- package/dist/features/tasks/add/index.js +12 -29
- package/dist/features/tasks/add/index.js.map +1 -1
- package/dist/features/tasks/attachments.d.ts +19 -0
- package/dist/features/tasks/attachments.d.ts.map +1 -0
- package/dist/features/tasks/attachments.js +129 -0
- package/dist/features/tasks/attachments.js.map +1 -0
- package/dist/features/tasks/execute/resolveTask.d.ts.map +1 -1
- package/dist/features/tasks/execute/resolveTask.js +4 -3
- package/dist/features/tasks/execute/resolveTask.js.map +1 -1
- package/dist/features/tasks/execute/runMeta.d.ts +5 -1
- package/dist/features/tasks/execute/runMeta.d.ts.map +1 -1
- package/dist/features/tasks/execute/runMeta.js +10 -4
- package/dist/features/tasks/execute/runMeta.js.map +1 -1
- package/dist/features/tasks/execute/selectAndExecute.d.ts.map +1 -1
- package/dist/features/tasks/execute/selectAndExecute.js +48 -4
- package/dist/features/tasks/execute/selectAndExecute.js.map +1 -1
- package/dist/features/tasks/execute/taskSpecContext.d.ts +7 -2
- package/dist/features/tasks/execute/taskSpecContext.d.ts.map +1 -1
- package/dist/features/tasks/execute/taskSpecContext.js +23 -36
- package/dist/features/tasks/execute/taskSpecContext.js.map +1 -1
- package/dist/features/tasks/execute/taskWorkflowExecution.d.ts.map +1 -1
- package/dist/features/tasks/execute/taskWorkflowExecution.js +2 -1
- package/dist/features/tasks/execute/taskWorkflowExecution.js.map +1 -1
- package/dist/features/tasks/execute/traceReportRedaction.d.ts +0 -1
- package/dist/features/tasks/execute/traceReportRedaction.d.ts.map +1 -1
- package/dist/features/tasks/execute/traceReportRedaction.js +1 -9
- package/dist/features/tasks/execute/traceReportRedaction.js.map +1 -1
- package/dist/features/tasks/execute/types.d.ts +8 -0
- package/dist/features/tasks/execute/types.d.ts.map +1 -1
- package/dist/features/tasks/execute/workflowExecution.d.ts.map +1 -1
- package/dist/features/tasks/execute/workflowExecution.js +12 -1
- package/dist/features/tasks/execute/workflowExecution.js.map +1 -1
- package/dist/features/tasks/execute/workflowExecutionBootstrap.d.ts +5 -1
- package/dist/features/tasks/execute/workflowExecutionBootstrap.d.ts.map +1 -1
- package/dist/features/tasks/execute/workflowExecutionBootstrap.js +7 -2
- package/dist/features/tasks/execute/workflowExecutionBootstrap.js.map +1 -1
- package/dist/features/tasks/index.d.ts +1 -0
- package/dist/features/tasks/index.d.ts.map +1 -1
- package/dist/features/tasks/index.js +1 -0
- package/dist/features/tasks/index.js.map +1 -1
- package/dist/features/tasks/list/instructMode.d.ts +2 -20
- package/dist/features/tasks/list/instructMode.d.ts.map +1 -1
- package/dist/features/tasks/list/instructMode.js +15 -4
- package/dist/features/tasks/list/instructMode.js.map +1 -1
- package/dist/features/tasks/list/retryTaskSpecAttachments.d.ts +8 -0
- package/dist/features/tasks/list/retryTaskSpecAttachments.d.ts.map +1 -0
- package/dist/features/tasks/list/retryTaskSpecAttachments.js +87 -0
- package/dist/features/tasks/list/retryTaskSpecAttachments.js.map +1 -0
- package/dist/features/tasks/list/taskInstructionActions.d.ts.map +1 -1
- package/dist/features/tasks/list/taskInstructionActions.js +20 -2
- package/dist/features/tasks/list/taskInstructionActions.js.map +1 -1
- package/dist/features/tasks/list/taskRetryActions.d.ts.map +1 -1
- package/dist/features/tasks/list/taskRetryActions.js +24 -6
- package/dist/features/tasks/list/taskRetryActions.js.map +1 -1
- package/dist/features/tasks/resume/directInstructMode.d.ts +13 -0
- package/dist/features/tasks/resume/directInstructMode.d.ts.map +1 -0
- package/dist/features/tasks/resume/directInstructMode.js +67 -0
- package/dist/features/tasks/resume/directInstructMode.js.map +1 -0
- package/dist/features/tasks/resume/directRunFinder.d.ts +7 -0
- package/dist/features/tasks/resume/directRunFinder.d.ts.map +1 -0
- package/dist/features/tasks/resume/directRunFinder.js +43 -0
- package/dist/features/tasks/resume/directRunFinder.js.map +1 -0
- package/dist/features/tasks/resume/index.d.ts +3 -0
- package/dist/features/tasks/resume/index.d.ts.map +1 -0
- package/dist/features/tasks/resume/index.js +229 -0
- package/dist/features/tasks/resume/index.js.map +1 -0
- package/dist/features/tasks/taskSpecFile.d.ts +2 -0
- package/dist/features/tasks/taskSpecFile.d.ts.map +1 -0
- package/dist/features/tasks/taskSpecFile.js +38 -0
- package/dist/features/tasks/taskSpecFile.js.map +1 -0
- package/dist/infra/claude/executor.d.ts.map +1 -1
- package/dist/infra/claude/executor.js +27 -6
- package/dist/infra/claude/executor.js.map +1 -1
- package/dist/infra/claude/mcp-config.d.ts +7 -0
- package/dist/infra/claude/mcp-config.d.ts.map +1 -0
- package/dist/infra/claude/mcp-config.js +30 -0
- package/dist/infra/claude/mcp-config.js.map +1 -0
- package/dist/infra/claude-headless/client.d.ts.map +1 -1
- package/dist/infra/claude-headless/client.js +5 -40
- package/dist/infra/claude-headless/client.js.map +1 -1
- package/dist/infra/claude-headless/result-response.js +1 -1
- package/dist/infra/claude-headless/result-response.js.map +1 -1
- package/dist/infra/claude-terminal/client.d.ts +4 -0
- package/dist/infra/claude-terminal/client.d.ts.map +1 -0
- package/dist/infra/claude-terminal/client.js +314 -0
- package/dist/infra/claude-terminal/client.js.map +1 -0
- package/dist/infra/claude-terminal/command.d.ts +4 -0
- package/dist/infra/claude-terminal/command.d.ts.map +1 -0
- package/dist/infra/claude-terminal/command.js +50 -0
- package/dist/infra/claude-terminal/command.js.map +1 -0
- package/dist/infra/claude-terminal/response-normalizer.d.ts +14 -0
- package/dist/infra/claude-terminal/response-normalizer.d.ts.map +1 -0
- package/dist/infra/claude-terminal/response-normalizer.js +118 -0
- package/dist/infra/claude-terminal/response-normalizer.js.map +1 -0
- package/dist/infra/claude-terminal/tmux-backend.d.ts +7 -0
- package/dist/infra/claude-terminal/tmux-backend.d.ts.map +1 -0
- package/dist/infra/claude-terminal/tmux-backend.js +177 -0
- package/dist/infra/claude-terminal/tmux-backend.js.map +1 -0
- package/dist/infra/claude-terminal/transcript-reader.d.ts +13 -0
- package/dist/infra/claude-terminal/transcript-reader.d.ts.map +1 -0
- package/dist/infra/claude-terminal/transcript-reader.js +329 -0
- package/dist/infra/claude-terminal/transcript-reader.js.map +1 -0
- package/dist/infra/claude-terminal/types.d.ts +106 -0
- package/dist/infra/claude-terminal/types.d.ts.map +1 -0
- package/dist/infra/claude-terminal/types.js +2 -0
- package/dist/infra/claude-terminal/types.js.map +1 -0
- package/dist/infra/codex/CodexStreamHandler.d.ts +4 -2
- package/dist/infra/codex/CodexStreamHandler.d.ts.map +1 -1
- package/dist/infra/codex/CodexStreamHandler.js +55 -21
- package/dist/infra/codex/CodexStreamHandler.js.map +1 -1
- package/dist/infra/codex/client.d.ts +2 -0
- package/dist/infra/codex/client.d.ts.map +1 -1
- package/dist/infra/codex/client.js +42 -6
- package/dist/infra/codex/client.js.map +1 -1
- package/dist/infra/config/configNormalizers.d.ts +23 -16
- package/dist/infra/config/configNormalizers.d.ts.map +1 -1
- package/dist/infra/config/configNormalizers.js +69 -7
- package/dist/infra/config/configNormalizers.js.map +1 -1
- package/dist/infra/config/env/global-current-env-specs.d.ts.map +1 -1
- package/dist/infra/config/env/global-current-env-specs.js +7 -0
- package/dist/infra/config/env/global-current-env-specs.js.map +1 -1
- package/dist/infra/config/env/project-current-env-specs.d.ts.map +1 -1
- package/dist/infra/config/env/project-current-env-specs.js +7 -0
- package/dist/infra/config/env/project-current-env-specs.js.map +1 -1
- package/dist/infra/config/global/globalConfigCore.d.ts.map +1 -1
- package/dist/infra/config/global/globalConfigCore.js +5 -0
- package/dist/infra/config/global/globalConfigCore.js.map +1 -1
- package/dist/infra/config/global/globalConfigSerializer.d.ts.map +1 -1
- package/dist/infra/config/global/globalConfigSerializer.js +10 -0
- package/dist/infra/config/global/globalConfigSerializer.js.map +1 -1
- package/dist/infra/config/global/initialization.d.ts +1 -1
- package/dist/infra/config/global/initialization.d.ts.map +1 -1
- package/dist/infra/config/global/initialization.js +1 -0
- package/dist/infra/config/global/initialization.js.map +1 -1
- package/dist/infra/config/loaders/qualityGateOverrides.d.ts +3 -2
- package/dist/infra/config/loaders/qualityGateOverrides.d.ts.map +1 -1
- package/dist/infra/config/loaders/qualityGateOverrides.js +42 -3
- package/dist/infra/config/loaders/qualityGateOverrides.js.map +1 -1
- package/dist/infra/config/loaders/workflowFileLoader.d.ts.map +1 -1
- package/dist/infra/config/loaders/workflowFileLoader.js +2 -2
- package/dist/infra/config/loaders/workflowFileLoader.js.map +1 -1
- package/dist/infra/config/loaders/workflowNormalizationPolicies.d.ts +3 -1
- package/dist/infra/config/loaders/workflowNormalizationPolicies.d.ts.map +1 -1
- package/dist/infra/config/loaders/workflowNormalizationPolicies.js +28 -0
- package/dist/infra/config/loaders/workflowNormalizationPolicies.js.map +1 -1
- package/dist/infra/config/loaders/workflowParser.d.ts +2 -2
- package/dist/infra/config/loaders/workflowParser.d.ts.map +1 -1
- package/dist/infra/config/loaders/workflowParser.js +3 -2
- package/dist/infra/config/loaders/workflowParser.js.map +1 -1
- package/dist/infra/config/loaders/workflowStepNormalizer.d.ts.map +1 -1
- package/dist/infra/config/loaders/workflowStepNormalizer.js +2 -1
- package/dist/infra/config/loaders/workflowStepNormalizer.js.map +1 -1
- package/dist/infra/config/observabilityConfig.d.ts +13 -0
- package/dist/infra/config/observabilityConfig.d.ts.map +1 -0
- package/dist/infra/config/observabilityConfig.js +52 -0
- package/dist/infra/config/observabilityConfig.js.map +1 -0
- package/dist/infra/config/project/projectConfig.d.ts.map +1 -1
- package/dist/infra/config/project/projectConfig.js +23 -5
- package/dist/infra/config/project/projectConfig.js.map +1 -1
- package/dist/infra/config/project/projectConfigTransforms.d.ts +5 -1
- package/dist/infra/config/project/projectConfigTransforms.d.ts.map +1 -1
- package/dist/infra/config/project/projectConfigTransforms.js +8 -0
- package/dist/infra/config/project/projectConfigTransforms.js.map +1 -1
- package/dist/infra/config/providerOptions.d.ts +8 -2
- package/dist/infra/config/providerOptions.d.ts.map +1 -1
- package/dist/infra/config/providerOptions.js +49 -1
- package/dist/infra/config/providerOptions.js.map +1 -1
- package/dist/infra/config/providerOptionsContract.d.ts +3 -3
- package/dist/infra/config/providerOptionsContract.d.ts.map +1 -1
- package/dist/infra/config/providerOptionsContract.js +14 -0
- package/dist/infra/config/providerOptionsContract.js.map +1 -1
- package/dist/infra/config/resolveConfigValue.d.ts.map +1 -1
- package/dist/infra/config/resolveConfigValue.js +18 -0
- package/dist/infra/config/resolveConfigValue.js.map +1 -1
- package/dist/infra/config/resolvedConfig.d.ts +2 -1
- package/dist/infra/config/resolvedConfig.d.ts.map +1 -1
- package/dist/infra/config/traced/tracedConfigSchema.d.ts.map +1 -1
- package/dist/infra/config/traced/tracedConfigSchema.js +16 -0
- package/dist/infra/config/traced/tracedConfigSchema.js.map +1 -1
- package/dist/infra/git/format.d.ts.map +1 -1
- package/dist/infra/git/format.js +75 -8
- package/dist/infra/git/format.js.map +1 -1
- package/dist/infra/git/index.d.ts +1 -1
- package/dist/infra/git/index.d.ts.map +1 -1
- package/dist/infra/git/types.d.ts +5 -0
- package/dist/infra/git/types.d.ts.map +1 -1
- package/dist/infra/github/pr.d.ts.map +1 -1
- package/dist/infra/github/pr.js +174 -28
- package/dist/infra/github/pr.js.map +1 -1
- package/dist/infra/observability/otelFoundation.d.ts +6 -0
- package/dist/infra/observability/otelFoundation.d.ts.map +1 -0
- package/dist/infra/observability/otelFoundation.js +89 -0
- package/dist/infra/observability/otelFoundation.js.map +1 -0
- package/dist/infra/opencode/client.d.ts.map +1 -1
- package/dist/infra/opencode/client.js +19 -15
- package/dist/infra/opencode/client.js.map +1 -1
- package/dist/infra/providers/claude-terminal.d.ts +6 -0
- package/dist/infra/providers/claude-terminal.d.ts.map +1 -0
- package/dist/infra/providers/claude-terminal.js +70 -0
- package/dist/infra/providers/claude-terminal.js.map +1 -0
- package/dist/infra/providers/index.d.ts.map +1 -1
- package/dist/infra/providers/index.js +2 -0
- package/dist/infra/providers/index.js.map +1 -1
- package/dist/infra/providers/provider-capabilities.d.ts +1 -0
- package/dist/infra/providers/provider-capabilities.d.ts.map +1 -1
- package/dist/infra/providers/provider-capabilities.js +16 -0
- package/dist/infra/providers/provider-capabilities.js.map +1 -1
- package/dist/infra/rate-limit/detection.d.ts +2 -0
- package/dist/infra/rate-limit/detection.d.ts.map +1 -1
- package/dist/infra/rate-limit/detection.js +14 -1
- package/dist/infra/rate-limit/detection.js.map +1 -1
- package/dist/infra/task/clone-base-branch.d.ts +11 -0
- package/dist/infra/task/clone-base-branch.d.ts.map +1 -1
- package/dist/infra/task/clone-base-branch.js +34 -4
- package/dist/infra/task/clone-base-branch.js.map +1 -1
- package/dist/infra/task/clone.d.ts +2 -1
- package/dist/infra/task/clone.d.ts.map +1 -1
- package/dist/infra/task/clone.js +20 -3
- package/dist/infra/task/clone.js.map +1 -1
- package/dist/infra/task/index.d.ts +1 -1
- package/dist/infra/task/index.d.ts.map +1 -1
- package/dist/infra/task/index.js +1 -1
- package/dist/infra/task/index.js.map +1 -1
- package/dist/infra/task/projectLocalTaktSync.d.ts.map +1 -1
- package/dist/infra/task/projectLocalTaktSync.js +6 -2
- package/dist/infra/task/projectLocalTaktSync.js.map +1 -1
- package/dist/infra/task/runner.d.ts +2 -2
- package/dist/infra/task/runner.d.ts.map +1 -1
- package/dist/infra/task/runner.js +4 -4
- package/dist/infra/task/runner.js.map +1 -1
- package/dist/infra/task/taskRecordMutations.d.ts +1 -1
- package/dist/infra/task/taskRecordMutations.d.ts.map +1 -1
- package/dist/infra/task/taskRecordMutations.js +5 -1
- package/dist/infra/task/taskRecordMutations.js.map +1 -1
- package/dist/infra/task/taskRetryService.d.ts +2 -2
- package/dist/infra/task/taskRetryService.d.ts.map +1 -1
- package/dist/infra/task/taskRetryService.js +4 -4
- package/dist/infra/task/taskRetryService.js.map +1 -1
- package/dist/infra/workflow/system/system-enqueue-effect.d.ts +2 -2
- package/dist/infra/workflow/system/system-enqueue-effect.d.ts.map +1 -1
- package/dist/infra/workflow/system/system-enqueue-effect.js +5 -2
- package/dist/infra/workflow/system/system-enqueue-effect.js.map +1 -1
- package/dist/shared/constants.d.ts +1 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +1 -0
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/i18n/labels_en.yaml +3 -1
- package/dist/shared/i18n/labels_ja.yaml +3 -1
- package/dist/shared/prompts/en/score_direct_instruct_system_prompt.md +63 -0
- package/dist/shared/prompts/en/score_retry_system_prompt.md +2 -2
- package/dist/shared/prompts/ja/score_direct_instruct_system_prompt.md +63 -0
- package/dist/shared/prompts/ja/score_retry_system_prompt.md +2 -2
- package/dist/shared/types/provider.d.ts +1 -1
- package/dist/shared/types/provider.d.ts.map +1 -1
- package/dist/shared/utils/debug.d.ts +2 -0
- package/dist/shared/utils/debug.d.ts.map +1 -1
- package/dist/shared/utils/debug.js +1 -0
- package/dist/shared/utils/debug.js.map +1 -1
- package/dist/shared/utils/sensitiveText.d.ts +2 -0
- package/dist/shared/utils/sensitiveText.d.ts.map +1 -0
- package/dist/shared/utils/sensitiveText.js +40 -0
- package/dist/shared/utils/sensitiveText.js.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
計画に従い、既存契約を保った最小差分で実装してください。
|
|
2
|
+
Workflow Contextに示されたReport Directory内のファイルのみ参照してください。他のレポートディレクトリは検索/参照しないでください。
|
|
3
|
+
Report Directory内のレポートを一次情報として参照してください。不足情報の補完が必要な場合に限り、Previous Responseや会話履歴を補助的に参照して構いません(Previous Responseは提供されない場合があります)。情報が競合する場合は、Report Directory内のレポートと実際のファイル内容を優先してください。
|
|
4
|
+
|
|
5
|
+
**重要**: 実装と同時に単体テストを追加してください。
|
|
6
|
+
- 新規作成したクラス・関数には単体テストを追加
|
|
7
|
+
- 既存コードを変更した場合は該当するテストを更新。ただし既存期待値を実装都合で緩和しない
|
|
8
|
+
- テストファイルの配置: プロジェクトの規約に従う
|
|
9
|
+
- ビルド確認は必須。実装完了後、ビルド(型チェック)を実行し、型エラーがないことを確認
|
|
10
|
+
- テスト実行は必須。ビルド成功後、必ずテストを実行して結果を確認
|
|
11
|
+
- ファイル名・設定キー名などの契約文字列を新規導入する場合は、定数として1箇所で定義すること
|
|
12
|
+
|
|
13
|
+
**保守変更の追加制約:**
|
|
14
|
+
- 実装前に差分予定を「必須変更」「関連変更」「不要変更」に分類する
|
|
15
|
+
- 必須変更と関連変更だけを実装する
|
|
16
|
+
- 変更ファイル内という理由だけで、作法改善、改名、ファイル移動、hook戻り値変更、コメント削除、テスト期待値変更を行わない
|
|
17
|
+
- 既存構造で要求を満たせる場合は、より一般的な作法へ寄せるためだけの構造変更をしない
|
|
18
|
+
- 実装後に全差分を確認し、不要変更を戻す
|
|
19
|
+
|
|
20
|
+
**Maintenance Scope出力契約(実装開始時に作成):**
|
|
21
|
+
```markdown
|
|
22
|
+
# 保守変更スコープ
|
|
23
|
+
|
|
24
|
+
## タスク
|
|
25
|
+
{タスクの1行要約}
|
|
26
|
+
|
|
27
|
+
## 必須変更
|
|
28
|
+
| ファイル | 理由 | 要求との対応 |
|
|
29
|
+
|----------|------|--------------|
|
|
30
|
+
| {ファイル} | {理由} | {対応する要求} |
|
|
31
|
+
|
|
32
|
+
## 関連変更
|
|
33
|
+
| ファイル | 理由 | 必須変更との関係 |
|
|
34
|
+
|----------|------|------------------|
|
|
35
|
+
| {ファイル} | {理由} | {関係} |
|
|
36
|
+
|
|
37
|
+
## 変更しない既存契約
|
|
38
|
+
| 契約 | 対象 | 守る内容 |
|
|
39
|
+
|------|------|----------|
|
|
40
|
+
| {契約種別} | {対象} | {守る内容} |
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Decisions出力契約(実装完了時、決定がある場合のみ):**
|
|
44
|
+
```markdown
|
|
45
|
+
# 決定ログ
|
|
46
|
+
|
|
47
|
+
## 1. {決定内容}
|
|
48
|
+
- **背景**: {なぜ決定が必要だったか}
|
|
49
|
+
- **検討した選択肢**: {選択肢リスト}
|
|
50
|
+
- **理由**: {選んだ理由}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**実装完了前の自己チェック(必須):**
|
|
54
|
+
|
|
55
|
+
ビルドとテストを実行する前に、次の手順で Policy の REJECT 基準を自己点検してください。
|
|
56
|
+
|
|
57
|
+
1. Policy の Source Path を Read ツールで開き、全文を取得する
|
|
58
|
+
2. 各 `##` セクションをすべて列挙する(取捨選択しない)
|
|
59
|
+
3. 列挙した各セクションの REJECT 基準と自分の実装を照合する
|
|
60
|
+
4. 全差分を確認し、要求外の改名、移動、コメント削除、UI文言変更、アクセシビリティ名変更、テスト期待値変更が残っていないか確認する
|
|
61
|
+
|
|
62
|
+
**必須出力(見出しを含める)**
|
|
63
|
+
## 作業結果
|
|
64
|
+
- {実施内容の要約}
|
|
65
|
+
## 変更内容
|
|
66
|
+
- {必須変更と関連変更の要約}
|
|
67
|
+
## 戻した不要変更
|
|
68
|
+
- {戻した変更。なければ「なし」}
|
|
69
|
+
## ビルド結果
|
|
70
|
+
- {ビルド実行結果}
|
|
71
|
+
## テスト結果
|
|
72
|
+
- {テスト実行コマンドと結果}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
既存フロントエンド機能の保守変更としてタスクを分析し、設計を含めた最小差分の実装方針を立ててください。
|
|
2
|
+
|
|
3
|
+
**注意:** Previous Responseがある場合は差し戻しのため、その内容と現在のファイル内容を照合して計画を見直してください(replan)。
|
|
4
|
+
|
|
5
|
+
**小規模タスクの判断基準:**
|
|
6
|
+
- 1-2ファイルの変更のみ
|
|
7
|
+
- 設計判断が不要
|
|
8
|
+
- 技術選定が不要
|
|
9
|
+
|
|
10
|
+
小規模タスクの場合は設計セクションを省略してください。ただし保守変更では、小規模でも既存契約と不要変更の確認は省略しないでください。
|
|
11
|
+
|
|
12
|
+
**やること:**
|
|
13
|
+
1. **参照資料の読み込み(必須・最初に実行)**
|
|
14
|
+
- タスク指示書の「参照資料」セクションに記載されたファイル・ディレクトリを **Read/Glob で実際に開いて内容を確認する**
|
|
15
|
+
- ディレクトリが指定されている場合は中身を列挙し、該当ファイルを特定してから読む
|
|
16
|
+
- 参照資料が存在しない・見つからない場合はその旨を報告し、推測で代用しない
|
|
17
|
+
- **指示書に明記されていない別ファイルを「参照資料の代わり」として使うことは禁止**
|
|
18
|
+
2. タスクの要件を理解する
|
|
19
|
+
- 参照資料の内容と現在の実装を突き合わせて差分を特定する
|
|
20
|
+
- **要件ごとに「変更要/不要」を判定する。「不要」の場合は現行コードの該当箇所(ファイル:行)を根拠として示すこと。根拠なしの「既に正しい」は禁止**
|
|
21
|
+
- **要件は、明示要求とそこから直接導ける暗黙要求に限定する。一般的ベストプラクティスや将来拡張を要件化しない**
|
|
22
|
+
- **要件を細分化するときは、検証可能にするための分解に留める。細分化から新しい要求へ飛躍しない**
|
|
23
|
+
- **暗黙要求を置く場合は、その根拠となる明示要求を計画レポートで示す**
|
|
24
|
+
3. コードを調査して不明点を解決する
|
|
25
|
+
4. 現行実装で守るべき既存契約を特定する
|
|
26
|
+
- 既存構造、型名、hook戻り値、UI文言、アクセシビリティ名、コメント、テスト期待値を確認する
|
|
27
|
+
- 変更が必要な既存契約がある場合は、理由と影響範囲を計画に明記する
|
|
28
|
+
5. 変更候補を「必須変更」「関連変更」「不要変更」に分類する
|
|
29
|
+
- 変更ファイル内、近い責務、一般作法という理由だけでは関連変更にしない
|
|
30
|
+
- 不要変更は Coder に実装させない
|
|
31
|
+
6. ファイル構成・設計パターンを決定する(必要な場合)
|
|
32
|
+
- 既存構造で要求を満たせる場合は、理想的でなくても既存構造を優先する
|
|
33
|
+
7. 実装アプローチを決める
|
|
34
|
+
- 実装アプローチがナレッジ・ポリシーの制約に違反しないか照合する
|
|
35
|
+
- 利用者向け機能の追加や変更がある場合、利用者がその機能へ到達する条件・入口・起動経路を固定する
|
|
36
|
+
8. Coder向けの実装ガイドラインに以下を含めること:
|
|
37
|
+
- 参照すべき既存実装パターン(ファイル:行)。同種の処理が既にある場合は必ず示す
|
|
38
|
+
- 変更の影響範囲。特に新しいパラメータを追加する場合、配線が必要な全箇所を列挙する
|
|
39
|
+
- このタスクで特に注意すべきアンチパターン(該当するものがあれば)
|
|
40
|
+
- 変更してはいけない既存契約
|
|
41
|
+
- 不要変更として除外した候補
|
|
42
|
+
|
|
43
|
+
**必須出力(見出しを含める)**
|
|
44
|
+
## 作業結果
|
|
45
|
+
- {計画の要約}
|
|
46
|
+
## 変更分類
|
|
47
|
+
- {必須変更、関連変更、不要変更の分類}
|
|
48
|
+
## 既存契約
|
|
49
|
+
- {守るべき既存契約}
|
|
50
|
+
## 実装方針
|
|
51
|
+
- {最小差分の方針}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
実行済みのテスト・ビルド・動作確認の証跡を確認し、保守変更として不要な差分が残っていないかも含めて最終承認を行ってください。
|
|
2
|
+
|
|
3
|
+
手順:
|
|
4
|
+
1. Knowledge と Policy の Source Path を Read ツールで開き、全文を取得する
|
|
5
|
+
2. それぞれの `##` セクションをすべて列挙する(取捨選択しない)
|
|
6
|
+
3. 列挙した各セクションの判定基準を、変更差分・実行証跡・レポートと照合する
|
|
7
|
+
|
|
8
|
+
## ステップ固有の追加手順
|
|
9
|
+
|
|
10
|
+
1. タスク指示書の各要件を 1 つずつ抽出する
|
|
11
|
+
- 1 つの文に複数の条件や経路が含まれる場合は、検証可能な最小単位まで分解する
|
|
12
|
+
- 並列表現は原則分解する
|
|
13
|
+
2. 各要件について、実装されたコード(ファイル:行)を特定する
|
|
14
|
+
3. コードが要件を満たしていることを実際に確認する(ファイルを読む、実行済みテストやビルドの証跡を確認する)
|
|
15
|
+
- 片側のケースだけを確認して複合要件全体を ✅ にしてはいけない
|
|
16
|
+
- 計画レポートや requirements-review の判断を鵜呑みにせず、要件ごとに独立照合する
|
|
17
|
+
- 充足していない要件が 1 つでもあれば REJECT する
|
|
18
|
+
4. 保守変更スコープを検証する
|
|
19
|
+
- 必須変更、関連変更、不要変更の分類が妥当か確認する
|
|
20
|
+
- コメント、型名、ファイル配置、UI文言、アクセシビリティ名、テスト期待値が要求外で変わっていないか確認する
|
|
21
|
+
- 一般的な品質改善や作法改善だけが理由の差分が残っていれば REJECT する
|
|
22
|
+
5. 前段レビューの finding を再評価する
|
|
23
|
+
- finding がコード上成立しない場合は false positive として記録する
|
|
24
|
+
- finding が成立しても、タスク目的を外れた追加要求や過剰な一般化なら overreach として記録する
|
|
25
|
+
- false positive / overreach を暗黙のまま流さない
|
|
26
|
+
|
|
27
|
+
## レポートの優先順位(supervise 固有)
|
|
28
|
+
|
|
29
|
+
- 要約レポートは一次証跡としては扱わない。一次証跡は、実行結果を記録したレポート、具体的な確認内容を記したレビューレポート、実コードの順で確認する
|
|
30
|
+
- 実行結果を記したレポート内の `ビルド結果` / `テスト結果` は一次証跡として扱ってよい
|
|
31
|
+
- `architecture-review` / `qa-review` / `testing-review` / `security-review` / `requirements-review` では、各レポートの `検証証跡` セクションを優先して確認する
|
|
32
|
+
- `検証証跡` の各項目は、確認対象・確認内容・結果が揃っている場合のみ補助証跡として扱う。いずれかが欠ける場合は、その項目を `未確認` として扱う
|
|
33
|
+
- 証跡同士が矛盾する場合は、`実行結果を記したレポート > 具体的な確認内容を持つレビューレポート > 要約レポート` の優先順位で判断する
|
|
34
|
+
|
|
35
|
+
**Validation出力契約:**
|
|
36
|
+
```markdown
|
|
37
|
+
# 最終検証結果
|
|
38
|
+
|
|
39
|
+
## 結果: APPROVE / REJECT
|
|
40
|
+
|
|
41
|
+
## 要件充足チェック
|
|
42
|
+
|
|
43
|
+
タスク指示書から要件を抽出し、各要件を実コードで個別に検証する。
|
|
44
|
+
|
|
45
|
+
| # | 要件(タスク指示書から抽出) | 充足 | 根拠(ファイル:行) |
|
|
46
|
+
|---|---------------------------|------|-------------------|
|
|
47
|
+
| 1 | {要件1} | ✅/❌ | `src/file.ts:42` |
|
|
48
|
+
| 2 | {要件2} | ✅/❌ | `src/file.ts:55` |
|
|
49
|
+
|
|
50
|
+
- ❌ が1件でもある場合は REJECT 必須
|
|
51
|
+
- 根拠なしの ✅ は無効(実コードで確認すること)
|
|
52
|
+
- 一部ケースしか確認できていない場合は ✅ にしない
|
|
53
|
+
- 計画レポートの判断を鵜呑みにせず、要件ごとに独立照合する
|
|
54
|
+
|
|
55
|
+
## 保守スコープチェック
|
|
56
|
+
|
|
57
|
+
| 観点 | 結果 | 根拠 |
|
|
58
|
+
|------|------|------|
|
|
59
|
+
| 必須変更のみか | ✅/❌ | {根拠} |
|
|
60
|
+
| 関連変更の理由が明確か | ✅/❌ | {根拠} |
|
|
61
|
+
| 不要変更が残っていないか | ✅/❌ | {根拠} |
|
|
62
|
+
| コメント削除が要求外で起きていないか | ✅/❌ | {根拠} |
|
|
63
|
+
| 型名・ファイル配置・公開APIが要求外で変わっていないか | ✅/❌ | {根拠} |
|
|
64
|
+
| UI文言・アクセシビリティ名・テスト期待値が要求外で変わっていないか | ✅/❌ | {根拠} |
|
|
65
|
+
|
|
66
|
+
## 前段 finding の再評価
|
|
67
|
+
|
|
68
|
+
| finding_id | 前段判定 | 再評価 | 根拠 |
|
|
69
|
+
|------------|----------|--------|------|
|
|
70
|
+
| {id} | new / persists / resolved | 妥当 / false_positive / overreach | `src/file.ts:42`, `reports/plan.md` |
|
|
71
|
+
|
|
72
|
+
- 前段レビューの結論と最終判定が異なる場合は、必ず根拠を書く
|
|
73
|
+
- false_positive / overreach を判定した場合は、task と plan のどちらに照らして不適切か明記する
|
|
74
|
+
- requirements-review の結論を覆す場合は、その理由を必ず根拠付きで明記する
|
|
75
|
+
|
|
76
|
+
## 検証サマリー
|
|
77
|
+
| 項目 | 状態 | 確認方法 |
|
|
78
|
+
|------|------|---------|
|
|
79
|
+
| テスト | ✅ / ⚠️ / ❌ | {実行ログ・レポート・CI等の証跡} |
|
|
80
|
+
| ビルド | ✅ / ⚠️ / ❌ | {実行ログ・レポート・CI等の証跡} |
|
|
81
|
+
| 動作確認 | ✅ / ⚠️ / ❌ | {確認した証跡。未確認ならその旨} |
|
|
82
|
+
|
|
83
|
+
## 成果物
|
|
84
|
+
- 作成: {作成したファイル}
|
|
85
|
+
- 変更: {変更したファイル}
|
|
86
|
+
|
|
87
|
+
## 未完了項目(REJECTの場合)
|
|
88
|
+
| # | 項目 | 理由 |
|
|
89
|
+
|---|------|------|
|
|
90
|
+
| 1 | {項目} | {理由} |
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Summary出力契約(APPROVEの場合のみ):**
|
|
94
|
+
```markdown
|
|
95
|
+
# タスク完了サマリー
|
|
96
|
+
|
|
97
|
+
## タスク
|
|
98
|
+
{元の要求を1-2文で}
|
|
99
|
+
|
|
100
|
+
## 結果
|
|
101
|
+
完了
|
|
102
|
+
|
|
103
|
+
## 変更内容
|
|
104
|
+
| 種別 | ファイル | 概要 |
|
|
105
|
+
|------|---------|------|
|
|
106
|
+
| 作成 | `src/file.ts` | 概要説明 |
|
|
107
|
+
|
|
108
|
+
## 検証証跡
|
|
109
|
+
- {確認したテスト/ビルド/動作確認の証跡}
|
|
110
|
+
```
|
|
@@ -6,14 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
1. 分解の可否を判断する
|
|
8
8
|
- 変更対象ファイルを特定し、ファイル間の依存関係を確認する
|
|
9
|
-
-
|
|
9
|
+
- まず並行可能な責務境界を探す
|
|
10
|
+
- 横断的関心事(共有型・ID・イベント)がある場合も、基盤 part → 消費 part → 検証 part に段階分けできるか検討する
|
|
10
11
|
- 変更ファイル数が少ない場合、リファクタ・リネーム系の場合も1パートで実装する
|
|
12
|
+
- `parts.length === 1` になる場合も、検証分離や段階分けができないか先に検討する
|
|
13
|
+
- 「実装と検証」のような巨大な単一 part は避ける
|
|
11
14
|
|
|
12
15
|
2. 分解する場合: ファイルをレイヤー/モジュール単位でグループ化する
|
|
13
16
|
- 凝集度の高い単位でグループを作る(例: ドメイン層 / インフラ層 / API層)
|
|
14
17
|
- 型・インターフェースの依存がある場合は、依存元と依存先を同じグループにまとめる
|
|
15
18
|
- 1つのファイルを複数のパートに割り当てない
|
|
16
19
|
- テストファイルと実装ファイルは同じパートにまとめる
|
|
20
|
+
- 実装 part と検証 part を分ける
|
|
17
21
|
|
|
18
22
|
3. 各パートに排他的なファイル担当を割り当てる
|
|
19
23
|
- 各パートの instruction に以下を必ず明記する:
|
|
@@ -24,6 +28,7 @@
|
|
|
24
28
|
- テスト済みの場合は「既存テストがパスするよう実装する」と明記する
|
|
25
29
|
- 品質ゲート(Quality Gates)を参照し、必要な検証は専用の単独パートとして計画する
|
|
26
30
|
- 並列の実装パートには、全体ビルド・全体テストを重複して実行させない
|
|
31
|
+
- npm test / npm run test:e2e:mock は各実装 part に重複して持たせない
|
|
27
32
|
|
|
28
33
|
**制約:**
|
|
29
34
|
- テストやビルドが必要な場合は、他パートの変更が揃った後に、単独の検証パートで実行する
|
|
@@ -24,6 +24,11 @@ Workflow Contextに示されたReport Directory内のファイルのみ参照し
|
|
|
24
24
|
- レスポンス標準の envelope をリクエスト解釈へ流用した実装を見逃さないテストを含める
|
|
25
25
|
- テストは実装完了後にパスすることを前提に書く(この段階ではビルドエラーやテスト失敗は想定内)
|
|
26
26
|
|
|
27
|
+
**非実行資産に関する制約:**
|
|
28
|
+
- 説明文、ガイド、README、Markdown ドキュメントなどの本文・章タイトル・構成を固定するテストは作成しない
|
|
29
|
+
- docs-only 変更では、明示的な実行契約がない限りテストを追加しない
|
|
30
|
+
- テストが必要なのは、CLI例・設定例・生成物など、コードの挙動や機械処理と結びつく契約がある場合に限る
|
|
31
|
+
|
|
27
32
|
**テスト実行について:**
|
|
28
33
|
- テスト作成後、テストを実行して結果を確認する
|
|
29
34
|
- 実装前のためテスト失敗・import エラーは想定内(未実装モジュールの import を含む)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
既存挙動を保護しながら、計画に基づいてプロダクションコードの実装前にテストを作成してください。
|
|
2
|
+
Workflow Contextに示されたReport Directory内のファイルのみ参照してください。他のレポートディレクトリは検索/参照しないでください。
|
|
3
|
+
|
|
4
|
+
**重要: プロダクションコードは作成・変更しないでください。テストファイルのみ作成可能です。**
|
|
5
|
+
|
|
6
|
+
**やること:**
|
|
7
|
+
1. 計画レポートを確認し、要求で変わる挙動と変えてはいけない既存挙動を分ける
|
|
8
|
+
2. 対象モジュールの既存コードと既存テストを確認し、テストパターンを把握する
|
|
9
|
+
3. 既存契約を守る回帰テストが不足している場合は追加する
|
|
10
|
+
4. 計画された機能または修正に対する単体テストを作成する
|
|
11
|
+
5. インテグレーションテストの要否を判断し、必要なら作成する
|
|
12
|
+
- 3つ以上のモジュールを横断するデータフローがあるか?
|
|
13
|
+
- 新しいステータス/状態が既存ワークフローに合流するか?
|
|
14
|
+
- 新しいオプションが呼び出しチェーンを通じて末端まで伝搬するか?
|
|
15
|
+
- いずれかに該当すればインテグレーションテストを作成する
|
|
16
|
+
|
|
17
|
+
**テスト作成の方針:**
|
|
18
|
+
- プロジェクトの既存テストパターン(命名規約、ディレクトリ構成、ヘルパー)に従う
|
|
19
|
+
- Given-When-Then 構造で記述する
|
|
20
|
+
- 1テスト1概念。複数の関心事を1テストに混ぜない
|
|
21
|
+
- 正常系・異常系・境界値・エッジケースを網羅する
|
|
22
|
+
- 既存期待値を実装都合に合わせて緩和しない
|
|
23
|
+
- 外部契約がある場合は、契約どおりの入力位置を使ったテストを含める
|
|
24
|
+
- 例: request body は定義された root shape のまま渡す
|
|
25
|
+
- 例: query / path parameter は body に流用せず、本来の位置から渡す
|
|
26
|
+
- レスポンス標準の envelope をリクエスト解釈へ流用した実装を見逃さないテストを含める
|
|
27
|
+
- テストは実装完了後にパスすることを前提に書く(この段階ではビルドエラーやテスト失敗は想定内)
|
|
28
|
+
|
|
29
|
+
**非実行資産に関する制約:**
|
|
30
|
+
- 説明文、ガイド、README、Markdown ドキュメントなどの本文・章タイトル・構成を固定するテストは作成しない
|
|
31
|
+
- docs-only 変更では、明示的な実行契約がない限りテストを追加しない
|
|
32
|
+
- テストが必要なのは、CLI例・設定例・生成物など、コードの挙動や機械処理と結びつく契約がある場合に限る
|
|
33
|
+
|
|
34
|
+
**テスト実行について:**
|
|
35
|
+
- テスト作成後、テストを実行して結果を確認する
|
|
36
|
+
- 実装前のためテスト失敗・import エラーは想定内(未実装モジュールの import を含む)
|
|
37
|
+
- 既存モジュールの import パスミスなど、実装完了後も解消しないエラーは修正する
|
|
38
|
+
|
|
39
|
+
**必須出力(見出しを含める)**
|
|
40
|
+
## 作業結果
|
|
41
|
+
- {作成・更新したテストの要約}
|
|
42
|
+
## 保護した既存契約
|
|
43
|
+
- {テストで守った既存挙動}
|
|
44
|
+
## テスト結果
|
|
45
|
+
- {実行した場合はコマンドと結果。未実行の場合は理由}
|
|
@@ -212,6 +212,7 @@ for (const item of resolvedItems) {
|
|
|
212
212
|
| REJECT | JSDocが関数名の言い換えだけで情報を追加していない |
|
|
213
213
|
| OK | なぜその実装を選んだかの設計判断を説明している |
|
|
214
214
|
| OK | 一見不自然に見える挙動の理由を説明している |
|
|
215
|
+
| OK | 定数・マジックナンバーの算出根拠や内訳を説明している |
|
|
215
216
|
| 最良 | コメントなしでコード自体が意図を語っている |
|
|
216
217
|
|
|
217
218
|
```typescript
|
|
@@ -238,6 +239,10 @@ if (status === 'interrupted') {
|
|
|
238
239
|
// OK - 一見不自然な挙動の理由
|
|
239
240
|
// stay はループを引き起こす可能性があるが、ユーザーが明示的に指定した場合のみ使われる
|
|
240
241
|
return step.name;
|
|
242
|
+
|
|
243
|
+
// OK - 定数の算出根拠
|
|
244
|
+
// paddingTop + paddingBottom + button height
|
|
245
|
+
const footerHeight = 24 + 12 + 48;
|
|
241
246
|
```
|
|
242
247
|
|
|
243
248
|
**状態の直接変更の検出基準**
|
|
@@ -374,14 +379,14 @@ function createUser(data: UserData) {
|
|
|
374
379
|
| エラー握りつぶし | 空の `catch {}`、`rescue nil` |
|
|
375
380
|
| マジックナンバー | 説明なしの `if (status == 3)` |
|
|
376
381
|
|
|
377
|
-
##
|
|
382
|
+
## 未完成コードの検出
|
|
378
383
|
|
|
379
|
-
|
|
384
|
+
未完成コードの判定基準はコーディングポリシーに従う。アーキテクチャレビューでは、TODO/FIXME、空実装、スタブが設計上必要な境界・認可・バリデーション・契約更新の代替になっていないかを見る。
|
|
380
385
|
|
|
381
|
-
TODO
|
|
386
|
+
Issue番号・外部制約・除去条件のない TODO/FIXME は REJECT。
|
|
382
387
|
|
|
383
388
|
```kotlin
|
|
384
|
-
// REJECT -
|
|
389
|
+
// REJECT - 認可チェックをTODOで先送り
|
|
385
390
|
// TODO: 施設IDによる認可チェックを追加
|
|
386
391
|
fun deleteCustomHoliday(@PathVariable id: String) {
|
|
387
392
|
deleteCustomHolidayInputPort.execute(input)
|
|
@@ -398,12 +403,12 @@ fun deleteCustomHoliday(@PathVariable id: String) {
|
|
|
398
403
|
}
|
|
399
404
|
```
|
|
400
405
|
|
|
401
|
-
TODO
|
|
406
|
+
TODO/FIXMEが許容されるケース:
|
|
402
407
|
|
|
403
408
|
| 条件 | 例 | 判定 |
|
|
404
409
|
|------|-----|------|
|
|
405
|
-
| 外部依存で今は実装不可 + Issue化済み | `// TODO(#123): APIキー取得後に実装` | 許容 |
|
|
406
|
-
| 技術的制約で回避不可 + Issue化済み | `// TODO(#456): ライブラリバグ修正待ち` | 許容 |
|
|
410
|
+
| 外部依存で今は実装不可 + Issue化済み + 除去条件あり | `// TODO(#123): APIキー取得後に実装` | 許容 |
|
|
411
|
+
| 技術的制約で回避不可 + Issue化済み + 除去条件あり | `// TODO(#456): ライブラリバグ修正待ち` | 許容 |
|
|
407
412
|
| 「将来実装」「後で追加」 | `// TODO: バリデーション追加` | REJECT |
|
|
408
413
|
| 「時間がないので」 | `// TODO: リファクタリング` | REJECT |
|
|
409
414
|
|
|
@@ -429,7 +434,7 @@ DRY にしないケース:
|
|
|
429
434
|
|
|
430
435
|
## 仕様準拠の検証
|
|
431
436
|
|
|
432
|
-
|
|
437
|
+
契約変更の整合性はコーディングポリシーに従う。アーキテクチャレビューでは、変更が文書化された仕様、型、スキーマ、設定形式と矛盾していないかを見る。
|
|
433
438
|
|
|
434
439
|
検証対象:
|
|
435
440
|
|
|
@@ -460,10 +465,10 @@ DRY にしないケース:
|
|
|
460
465
|
|
|
461
466
|
## 呼び出しチェーン検証
|
|
462
467
|
|
|
463
|
-
|
|
468
|
+
契約変更の配線漏れはコーディングポリシーに従う。アーキテクチャレビューでは、新しいパラメータ・フィールドが変更ファイル内だけで完結しておらず、実際の呼び出し元・生成元・読み取り側まで届いているかを見る。
|
|
464
469
|
|
|
465
470
|
検証手順:
|
|
466
|
-
1. 新しいオプショナルパラメータや interface
|
|
471
|
+
1. 新しいオプショナルパラメータや interface フィールドを見つけたら、全呼び出し元を検索
|
|
467
472
|
2. 全呼び出し元が新しいパラメータを渡しているか確認
|
|
468
473
|
3. フォールバック値(`?? default`)がある場合、フォールバックが使われるケースが意図通りか確認
|
|
469
474
|
|
|
@@ -471,7 +476,7 @@ DRY にしないケース:
|
|
|
471
476
|
|
|
472
477
|
| パターン | 問題 | 検出方法 |
|
|
473
478
|
|---------|------|---------|
|
|
474
|
-
| `options.xxx ?? fallback` で全呼び出し元が `xxx` を省略 | 機能が実装されているのに常にフォールバック |
|
|
479
|
+
| `options.xxx ?? fallback` で全呼び出し元が `xxx` を省略 | 機能が実装されているのに常にフォールバック | 呼び出し元を確認 |
|
|
475
480
|
| テストがモックで直接値をセット | 実際の呼び出しチェーンを経由しない | テストの構築方法を確認 |
|
|
476
481
|
| `executeXxx()` が内部で使う `options` を引数で受け取らない | 上位から値を渡す口がない | 関数シグネチャを確認 |
|
|
477
482
|
|
|
@@ -493,12 +498,12 @@ export async function executeWorkflow(config, cwd, task, options?) {
|
|
|
493
498
|
|
|
494
499
|
| パターン | 問題 | 検出方法 |
|
|
495
500
|
|---------|------|---------|
|
|
496
|
-
| 呼び出し元がTTY必須なのに関数内でTTYチェック | 到達しない分岐が残る |
|
|
501
|
+
| 呼び出し元がTTY必須なのに関数内でTTYチェック | 到達しない分岐が残る | 全呼び出し元の前提条件を確認 |
|
|
497
502
|
| 呼び出し元がnullチェック済みなのに再度nullガード | 冗長な防御 | 呼び出し元の制約を追跡 |
|
|
498
503
|
| 呼び出し元が型で制約しているのにランタイムチェック | 型安全を信頼していない | TypeScriptの型制約を確認 |
|
|
499
504
|
|
|
500
505
|
検証手順:
|
|
501
|
-
1. 防御的な条件分岐(TTYチェック、null
|
|
506
|
+
1. 防御的な条件分岐(TTYチェック、nullガード等)を見つけたら、全呼び出し元を確認
|
|
502
507
|
2. 全呼び出し元がその条件を既に保証しているなら、防御は不要 → REJECT
|
|
503
508
|
3. 一部の呼び出し元が保証していない場合は、防御を残す
|
|
504
509
|
|
|
@@ -205,6 +205,54 @@ data class OrderCancelledEvent(
|
|
|
205
205
|
- 適切: `ShippingAddressChanged` → 意図が明確
|
|
206
206
|
- 粗すぎ: `OrderModified` → 何が変わったか不明
|
|
207
207
|
|
|
208
|
+
## Event Evolution
|
|
209
|
+
|
|
210
|
+
イベントは永続化済みの契約であり、現在のイベント型を変えた場合でも過去イベントを再生できなければならない。旧イベントの読み替えはイベント本体やドメインロジックではなく、イベントストアから復元する境界の upcaster / migration 層で行う。
|
|
211
|
+
|
|
212
|
+
| 基準 | 判定 |
|
|
213
|
+
|------|------|
|
|
214
|
+
| 永続化済みイベントの型・フィールドを変更したのに変換経路がない | REJECT |
|
|
215
|
+
| 現行イベント型に旧フィールド名の alias や互換用プロパティを残す | REJECT。履歴互換は upcaster に分離 |
|
|
216
|
+
| Aggregate や apply が旧イベント形式を直接解釈する | REJECT。再生前に現行イベントへ変換する |
|
|
217
|
+
| イベントに「変更前の値」を互換目的で追加する | REJECT。イベントは発生後の事実を表す |
|
|
218
|
+
| upcaster が旧 payload を現行イベントの意味へ変換する | OK |
|
|
219
|
+
| 旧 payload から現行イベントへ変換できることをテストしている | OK |
|
|
220
|
+
|
|
221
|
+
イベント進化で分ける責務:
|
|
222
|
+
|
|
223
|
+
| 責務 | 置き場所 |
|
|
224
|
+
|------|----------|
|
|
225
|
+
| 現行イベントの意味とフィールド | イベント型 |
|
|
226
|
+
| 旧 payload の読み替え | upcaster / migration 層 |
|
|
227
|
+
| イベント再生による状態復元 | Aggregate の `apply` |
|
|
228
|
+
| 旧イベントから現行イベントへ変換できることの保証 | upcaster テスト |
|
|
229
|
+
|
|
230
|
+
```kotlin
|
|
231
|
+
// NG - 現行イベント型に旧フィールド互換を混ぜる
|
|
232
|
+
data class OrderAssignedEvent(
|
|
233
|
+
val orderId: String,
|
|
234
|
+
@JsonAlias("assigneeId")
|
|
235
|
+
val assigneeIds: List<String>
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
// OK - 現行イベント型は現行契約だけを表す
|
|
239
|
+
data class OrderAssignedEvent(
|
|
240
|
+
val orderId: String,
|
|
241
|
+
val assigneeIds: List<String>
|
|
242
|
+
)
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
```kotlin
|
|
246
|
+
// OK - 旧 payload を upcaster で現行 payload へ変換する
|
|
247
|
+
when (eventType) {
|
|
248
|
+
OrderAssignedEvent::class.java.typeName -> {
|
|
249
|
+
event.moveTextFieldToArray("assigneeId", "assigneeIds")
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
旧イベント型そのものをアプリケーションコードに残すかどうかは、利用フレームワークと運用方針で決める。一般には「旧型を通常のドメインイベントとして扱う」のではなく、「旧 serialized type と payload を upcaster の入力契約としてテストする」方が、現行モデルを汚さずに済む。
|
|
255
|
+
|
|
208
256
|
## コマンドハンドラ
|
|
209
257
|
|
|
210
258
|
| 基準 | 判定 |
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# 既存システム知識
|
|
2
|
+
|
|
3
|
+
## 既存システムの契約
|
|
4
|
+
|
|
5
|
+
既存システムでは、明示的なAPIだけでなく、利用者や開発者が観測している値や構造も契約として機能する。コード上は小さな変更でも、運用中の画面、テスト、レビュー、保守手順に影響する。
|
|
6
|
+
|
|
7
|
+
| 基準 | 判定 |
|
|
8
|
+
|------|------|
|
|
9
|
+
| 利用者が目にする文言や状態が変わる | 契約変更 |
|
|
10
|
+
| テストが検証している値が変わる | 契約変更 |
|
|
11
|
+
| hook や component の呼び出し方が変わる | 契約変更 |
|
|
12
|
+
| ファイル配置や型名だけが変わる | 保守契約の変更になりうる |
|
|
13
|
+
| 実装内部の閉じた重複を削る | 影響範囲が閉じていれば内部変更 |
|
|
14
|
+
|
|
15
|
+
## 差分分類
|
|
16
|
+
|
|
17
|
+
既存システムの変更は、要求との因果関係で分類する。変更対象ファイルに含まれているかどうかではなく、その変更が要求達成に必要かで判断する。
|
|
18
|
+
|
|
19
|
+
| 分類 | 判断基準 |
|
|
20
|
+
|------|----------|
|
|
21
|
+
| 必須変更 | 要求を満たすために直接必要 |
|
|
22
|
+
| 関連変更 | 必須変更を配線、検証、整合させるために必要 |
|
|
23
|
+
| 不要変更 | なくても要求が満たせる |
|
|
24
|
+
| 危険な不要変更 | なくても要求が満たせ、既存契約も変える |
|
|
25
|
+
|
|
26
|
+
### 関連変更の境界
|
|
27
|
+
|
|
28
|
+
関連変更は必須変更との接続理由を説明できる必要がある。近い場所、同じファイル、同じ責務というだけでは関連変更にならない。
|
|
29
|
+
|
|
30
|
+
| 例 | 分類 |
|
|
31
|
+
|----|------|
|
|
32
|
+
| 新しい引数を追加した関数の呼び出し元更新 | 関連変更 |
|
|
33
|
+
| 永続化先を変えたため古いstoreを削除 | 関連変更 |
|
|
34
|
+
| 触ったcomponentのProps型名を好みで変更 | 不要変更 |
|
|
35
|
+
| ついでにhookの戻り値をprops objectへ変更 | 危険な不要変更 |
|
|
36
|
+
|
|
37
|
+
## 一般品質基準との衝突
|
|
38
|
+
|
|
39
|
+
保守作業では、一般的な設計改善やフレームワーク作法が常に優先されるわけではない。既存の構造が理想的でなくても、今回の要求と無関係なら変更しない方が回帰リスクは低い。
|
|
40
|
+
|
|
41
|
+
| 状況 | 判断 |
|
|
42
|
+
|------|------|
|
|
43
|
+
| コンポーネント分割した方がきれいだが、今回の修正に不要 | 変更しない |
|
|
44
|
+
| Props 型名や配置を一般作法へ寄せたいだけ | 変更しない |
|
|
45
|
+
| 既存構造のままだと要求を満たせない | 最小範囲で変更する |
|
|
46
|
+
| 既存構造が不具合原因そのもの | 理由と影響範囲を明記して変更する |
|
|
47
|
+
|
|
48
|
+
## コメントとテストの意味
|
|
49
|
+
|
|
50
|
+
コメントやテストは、過去の制約や意図を保存していることがある。説明に見えるコメントでも、算出根拠、プラットフォーム制約、既知の不具合回避を示す場合は契約に近い役割を持つ。
|
|
51
|
+
|
|
52
|
+
| 対象 | 扱い |
|
|
53
|
+
|------|------|
|
|
54
|
+
| 算出根拠コメント | 保持する |
|
|
55
|
+
| 制約や回避策のコメント | 保持する |
|
|
56
|
+
| コードと矛盾したコメント | 修正する |
|
|
57
|
+
| 関数名の言い換えだけのコメント | 削除を検討できる |
|
|
58
|
+
| 既存テストの期待値 | 既存契約として扱う |
|
|
59
|
+
|
|
60
|
+
## 保守変更のリスク
|
|
61
|
+
|
|
62
|
+
保守変更では、新しいコードの良さより既存挙動の保持が重要になる。設計として良い変更でも、要求外ならレビュー負荷と回帰リスクを増やす。
|
|
63
|
+
|
|
64
|
+
| 変更 | リスク |
|
|
65
|
+
|------|--------|
|
|
66
|
+
| 改名 | grep、履歴追跡、レビュー範囲が増える |
|
|
67
|
+
| ファイル移動 | 所有境界、import、履歴追跡が変わる |
|
|
68
|
+
| UI契約変更 | 利用者体験、支援技術、テストが変わる |
|
|
69
|
+
| テスト緩和 | 回帰検出力が落ちる |
|
|
70
|
+
| 追加抽象化 | 将来ではなく現在の理解コストが増える |
|
|
@@ -71,6 +71,18 @@ DataGrid、日付ピッカー、チャート、仮想リストのような外部
|
|
|
71
71
|
| 代表的な props で実コンポーネントを描画し、画面レベルでクラッシュしないことを確認する | OK |
|
|
72
72
|
| 既存画面の利用パターンやプロジェクト依存バージョンを参照して props 形を決める | OK |
|
|
73
73
|
|
|
74
|
+
### アクセシビリティ契約
|
|
75
|
+
|
|
76
|
+
accessible name、role、state は支援技術とテストが参照する UI 契約である。新しい UI 要素には適切なアクセシビリティ属性を追加する一方で、既存要素の契約を変える場合は文言変更と同じく利用者影響のある変更として扱う。
|
|
77
|
+
|
|
78
|
+
| 基準 | 判定 |
|
|
79
|
+
|------|------|
|
|
80
|
+
| 新しい操作要素に accessible name がない | REJECT |
|
|
81
|
+
| チェック状態、展開状態、無効状態などの状態が支援技術へ公開されていない | 警告 |
|
|
82
|
+
| 既存の accessible name を要求外で変更する | REJECT |
|
|
83
|
+
| 既存の accessible name を保ち、不足していた role/state を追加する | OK |
|
|
84
|
+
| 既存契約を変更する理由と影響範囲が明示されている | OK |
|
|
85
|
+
|
|
74
86
|
## コンポーネント設計
|
|
75
87
|
|
|
76
88
|
1ファイルにベタ書きしない。必ずコンポーネント分割する。
|
|
@@ -185,6 +197,19 @@ const Parent = () => {
|
|
|
185
197
|
| useEffectの依存配列が不適切 | REJECT |
|
|
186
198
|
| 初期取得が不安定な Context/Provider 関数参照に結び付いている | REJECT |
|
|
187
199
|
|
|
200
|
+
### 正規状態と派生状態
|
|
201
|
+
|
|
202
|
+
state にはユーザー入力、サーバーデータ、UIの一時状態などの正規状態を保持する。正規状態から計算できる表示値、集計値、選択状態、並び替え結果、グルーピング結果は派生値として扱い、独立した state として保持しない。
|
|
203
|
+
|
|
204
|
+
| 基準 | 判定 |
|
|
205
|
+
|------|------|
|
|
206
|
+
| ある state から常に計算できる値を別 state として保持している | REJECT |
|
|
207
|
+
| 複数の state フィールド間に常時同期が必要な不変条件がある | REJECT |
|
|
208
|
+
| 表示ラベル、件数、合計、全選択状態、並び替え結果、グルーピング結果を正規 state として保持している | REJECT |
|
|
209
|
+
| API送信、保存、差分判定が正規 state ではなく派生 state に依存している | REJECT |
|
|
210
|
+
| 正規 state だけを保持し、表示・集計・判定は selector、render、useMemo で導出している | OK |
|
|
211
|
+
| 外部契約で必要な派生値を、送信・保存の境界で正規 state から生成している | OK |
|
|
212
|
+
|
|
188
213
|
状態配置の判断基準:
|
|
189
214
|
|
|
190
215
|
| 状態の性質 | 推奨配置 |
|
|
@@ -120,6 +120,41 @@ custom hook 内の `useState` は呼び出し元ごとに別インスタンス
|
|
|
120
120
|
| 共有状態が必要な複数コンポーネントで同じ stateful hook を個別に呼ぶ | REJECT |
|
|
121
121
|
| hook が JSX を返す | REJECT |
|
|
122
122
|
|
|
123
|
+
### Props 型の配置と hook の境界
|
|
124
|
+
|
|
125
|
+
コンポーネント専用の Props 型は、基本的にそのコンポーネントと同じファイルへ置く。別ファイルの型定義は、複数コンポーネントで共有する契約、外部公開 API、またはドメインモデルとして独立した意味を持つ場合に使う。
|
|
126
|
+
|
|
127
|
+
| 基準 | 判定 |
|
|
128
|
+
|------|------|
|
|
129
|
+
| 1つのコンポーネント専用 Props を、理由なく `types` ファイルへ切り出す | 警告 |
|
|
130
|
+
| hook から component の Props 型を import するためだけに Props を別ファイルへ移す | REJECT |
|
|
131
|
+
| 複数コンポーネントや公開 API が共有する Props/データ契約を別ファイルへ置く | OK |
|
|
132
|
+
| hook は状態・イベント・派生値を返し、container が component props へ束ねる | OK |
|
|
133
|
+
| hook が component props を返す場合でも、component への型依存を hook に持ち込まない | OK |
|
|
134
|
+
|
|
135
|
+
```tsx
|
|
136
|
+
// REJECT - hook が特定 component の Props 契約に依存している
|
|
137
|
+
import type { DialogProps } from './Dialog'
|
|
138
|
+
|
|
139
|
+
export function useDialog(): { dialogProps: DialogProps } {
|
|
140
|
+
return { dialogProps: { open, onOpenChange } }
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// OK - component 専用 Props は component 側に閉じる
|
|
144
|
+
interface DialogProps {
|
|
145
|
+
open: boolean
|
|
146
|
+
onOpenChange: (open: boolean) => void
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function Dialog(props: DialogProps) {
|
|
150
|
+
return <Modal {...props} />
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// OK - hook は UI 状態と操作を返し、呼び出し側で component に渡す
|
|
154
|
+
const dialog = useDialog()
|
|
155
|
+
return <Dialog open={dialog.open} onOpenChange={dialog.setOpen} />
|
|
156
|
+
```
|
|
157
|
+
|
|
123
158
|
## exhaustive-deps の扱い
|
|
124
159
|
|
|
125
160
|
`react-hooks/exhaustive-deps` は無条件で従うものではなく、effect の意味を壊さない範囲で従う。mount-only 初期化で依存を増やすと挙動が壊れる場合は、理由を残して抑制する。
|