feat: add minimal run engine

This commit is contained in:
chungyeong
2026-05-11 00:46:45 +09:00
parent 64efeabd33
commit 78ebd5ef78
26 changed files with 6045 additions and 209 deletions

View File

@@ -0,0 +1,24 @@
{
"phases": [
{
"key": "spec",
"title": "Colliding planned phase",
"objective": "Prove planned phases cannot reuse template phase keys.",
"roles": ["spec_writer"],
"expectedArtifact": {
"path": "artifacts/colliding-spec.json",
"schema": "dev/spec@1"
},
"gates": [],
"tasks": [
{
"id": "TASK-1",
"title": "Colliding task",
"role": "spec_writer",
"writeSet": ["src/**"],
"dependsOn": []
}
]
}
]
}

View File

@@ -0,0 +1,24 @@
{
"phases": [
{
"key": "mixed-unbound",
"title": "Mixed bound and unbound planned phase",
"objective": "Prove every planned phase role is validated before insertion.",
"roles": ["spec_writer", "missing_role"],
"expectedArtifact": {
"path": "artifacts/mixed-unbound-spec.json",
"schema": "dev/spec@1"
},
"gates": [],
"tasks": [
{
"id": "TASK-1",
"title": "Impossible mixed-role task",
"role": "missing_role",
"writeSet": ["src/**"],
"dependsOn": []
}
]
}
]
}

View File

@@ -0,0 +1,24 @@
{
"phases": [
{
"key": "implement",
"title": "Implement requested change",
"objective": "Use the fake development run to prove the engine path.",
"roles": ["spec_writer"],
"expectedArtifact": {
"path": "artifacts/implementation-spec.json",
"schema": "dev/spec@1"
},
"gates": [],
"tasks": [
{
"id": "TASK-1",
"title": "Apply implementation",
"role": "spec_writer",
"writeSet": ["src/**"],
"dependsOn": []
}
]
}
]
}

View File

@@ -0,0 +1,11 @@
{
"phases": [
{
"key": "documentation-note",
"title": "Documentation Note",
"objective": "Record that this planned phase has no artifact and should be skipped.",
"roles": ["phase_planner"],
"gates": []
}
]
}

View File

@@ -0,0 +1,44 @@
{
"phases": [
{
"key": "implement-a",
"title": "Implement first fake change",
"objective": "First planned phase for replay serialization tests.",
"roles": ["spec_writer"],
"expectedArtifact": {
"path": "artifacts/implementation-a-spec.json",
"schema": "dev/spec@1"
},
"gates": [],
"tasks": [
{
"id": "TASK-A",
"title": "Apply first implementation",
"role": "spec_writer",
"writeSet": ["src/a/**"],
"dependsOn": []
}
]
},
{
"key": "implement-b",
"title": "Implement second fake change",
"objective": "Second planned phase for replay serialization tests.",
"roles": ["spec_writer"],
"expectedArtifact": {
"path": "artifacts/implementation-b-spec.json",
"schema": "dev/spec@1"
},
"gates": [],
"tasks": [
{
"id": "TASK-B",
"title": "Apply second implementation",
"role": "spec_writer",
"writeSet": ["src/b/**"],
"dependsOn": ["TASK-A"]
}
]
}
]
}

View File

@@ -0,0 +1,24 @@
{
"phases": [
{
"key": "unbound",
"title": "Unbound planned phase",
"objective": "Prove approval-triggered advancement fails terminally on invalid plan roles.",
"roles": ["missing_role"],
"expectedArtifact": {
"path": "artifacts/unbound-spec.json",
"schema": "dev/spec@1"
},
"gates": [],
"tasks": [
{
"id": "TASK-1",
"title": "Impossible task",
"role": "missing_role",
"writeSet": ["src/**"],
"dependsOn": []
}
]
}
]
}

View File

@@ -0,0 +1,24 @@
{
"phases": [
{
"key": "unknown-schema",
"title": "Unknown schema planned phase",
"objective": "Prove fatal planned-phase failures clean up every session.",
"roles": ["spec_writer"],
"expectedArtifact": {
"path": "artifacts/unknown-schema.json",
"schema": "dev/unknown-schema@1"
},
"gates": [],
"tasks": [
{
"id": "TASK-1",
"title": "Write unknown schema artifact",
"role": "spec_writer",
"writeSet": ["src/**"],
"dependsOn": []
}
]
}
]
}