@tiic-tech/openworkflow 0.1.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/LICENSE +21 -0
- package/README.md +37 -0
- package/dist/adapters/codex/src/doctorCodexAdapter.d.ts +6 -0
- package/dist/adapters/codex/src/doctorCodexAdapter.js +124 -0
- package/dist/adapters/codex/src/doctorCodexAdapter.js.map +1 -0
- package/dist/adapters/codex/src/generateAgents.d.ts +2 -0
- package/dist/adapters/codex/src/generateAgents.js +40 -0
- package/dist/adapters/codex/src/generateAgents.js.map +1 -0
- package/dist/adapters/codex/src/generateCodexAdapter.d.ts +9 -0
- package/dist/adapters/codex/src/generateCodexAdapter.js +59 -0
- package/dist/adapters/codex/src/generateCodexAdapter.js.map +1 -0
- package/dist/adapters/codex/src/generateCommands.d.ts +6 -0
- package/dist/adapters/codex/src/generateCommands.js +205 -0
- package/dist/adapters/codex/src/generateCommands.js.map +1 -0
- package/dist/adapters/codex/src/generateSkills.d.ts +7 -0
- package/dist/adapters/codex/src/generateSkills.js +60 -0
- package/dist/adapters/codex/src/generateSkills.js.map +1 -0
- package/dist/adapters/codex/src/generatedFiles.d.ts +4 -0
- package/dist/adapters/codex/src/generatedFiles.js +67 -0
- package/dist/adapters/codex/src/generatedFiles.js.map +1 -0
- package/dist/adapters/codex/src/manifest.d.ts +4 -0
- package/dist/adapters/codex/src/manifest.js +40 -0
- package/dist/adapters/codex/src/manifest.js.map +1 -0
- package/dist/adapters/codex/src/templates.d.ts +7 -0
- package/dist/adapters/codex/src/templates.js +6 -0
- package/dist/adapters/codex/src/templates.js.map +1 -0
- package/dist/cli/src/args.d.ts +8 -0
- package/dist/cli/src/args.js +34 -0
- package/dist/cli/src/args.js.map +1 -0
- package/dist/cli/src/commands/doctor.d.ts +1 -0
- package/dist/cli/src/commands/doctor.js +26 -0
- package/dist/cli/src/commands/doctor.js.map +1 -0
- package/dist/cli/src/commands/init.d.ts +1 -0
- package/dist/cli/src/commands/init.js +52 -0
- package/dist/cli/src/commands/init.js.map +1 -0
- package/dist/cli/src/commands/shared.d.ts +4 -0
- package/dist/cli/src/commands/shared.js +19 -0
- package/dist/cli/src/commands/shared.js.map +1 -0
- package/dist/cli/src/commands/sync.d.ts +1 -0
- package/dist/cli/src/commands/sync.js +27 -0
- package/dist/cli/src/commands/sync.js.map +1 -0
- package/dist/cli/src/commands/validate.d.ts +1 -0
- package/dist/cli/src/commands/validate.js +17 -0
- package/dist/cli/src/commands/validate.js.map +1 -0
- package/dist/cli/src/dev/validateRepositoryContractsCli.d.ts +2 -0
- package/dist/cli/src/dev/validateRepositoryContractsCli.js +37 -0
- package/dist/cli/src/dev/validateRepositoryContractsCli.js.map +1 -0
- package/dist/cli/src/dev/verifyRuntimeSurface.d.ts +2 -0
- package/dist/cli/src/dev/verifyRuntimeSurface.js +344 -0
- package/dist/cli/src/dev/verifyRuntimeSurface.js.map +1 -0
- package/dist/cli/src/dev/verifyWorkflowE2E.d.ts +2 -0
- package/dist/cli/src/dev/verifyWorkflowE2E.js +366 -0
- package/dist/cli/src/dev/verifyWorkflowE2E.js.map +1 -0
- package/dist/cli/src/index.d.ts +2 -0
- package/dist/cli/src/index.js +51 -0
- package/dist/cli/src/index.js.map +1 -0
- package/dist/core/src/artifacts/registry.d.ts +53 -0
- package/dist/core/src/artifacts/registry.js +483 -0
- package/dist/core/src/artifacts/registry.js.map +1 -0
- package/dist/core/src/commands/registry.d.ts +36 -0
- package/dist/core/src/commands/registry.js +539 -0
- package/dist/core/src/commands/registry.js.map +1 -0
- package/dist/core/src/contracts/index.d.ts +23 -0
- package/dist/core/src/contracts/index.js +16 -0
- package/dist/core/src/contracts/index.js.map +1 -0
- package/dist/core/src/contracts/yaml.d.ts +2 -0
- package/dist/core/src/contracts/yaml.js +12 -0
- package/dist/core/src/contracts/yaml.js.map +1 -0
- package/dist/core/src/contracts.d.ts +23 -0
- package/dist/core/src/contracts.js +15 -0
- package/dist/core/src/contracts.js.map +1 -0
- package/dist/core/src/fs/index.d.ts +4 -0
- package/dist/core/src/fs/index.js +28 -0
- package/dist/core/src/fs/index.js.map +1 -0
- package/dist/core/src/fs.d.ts +4 -0
- package/dist/core/src/fs.js +28 -0
- package/dist/core/src/fs.js.map +1 -0
- package/dist/core/src/initOpenWorkflow.d.ts +7 -0
- package/dist/core/src/initOpenWorkflow.js +220 -0
- package/dist/core/src/initOpenWorkflow.js.map +1 -0
- package/dist/core/src/validateOpenWorkflow.d.ts +5 -0
- package/dist/core/src/validateOpenWorkflow.js +145 -0
- package/dist/core/src/validateOpenWorkflow.js.map +1 -0
- package/dist/core/src/validators/validateOpenWorkflow.d.ts +5 -0
- package/dist/core/src/validators/validateOpenWorkflow.js +551 -0
- package/dist/core/src/validators/validateOpenWorkflow.js.map +1 -0
- package/dist/core/src/validators/validateRepositoryContracts.d.ts +2 -0
- package/dist/core/src/validators/validateRepositoryContracts.js +827 -0
- package/dist/core/src/validators/validateRepositoryContracts.js.map +1 -0
- package/dist/core/src/workflow/initOpenWorkflow.d.ts +7 -0
- package/dist/core/src/workflow/initOpenWorkflow.js +182 -0
- package/dist/core/src/workflow/initOpenWorkflow.js.map +1 -0
- package/dist/core/src/yaml.d.ts +2 -0
- package/dist/core/src/yaml.js +12 -0
- package/dist/core/src/yaml.js.map +1 -0
- package/package.json +55 -0
- package/references/artifact-authoring-templates.md +78 -0
- package/references/audit-first-discovery-loop.md +85 -0
- package/references/contract-graph.md +129 -0
- package/references/discovery-artifact-contracts.md +155 -0
- package/references/engineering-skill-reference-research.md +204 -0
- package/references/npm-cli-architecture.md +63 -0
- package/references/runtime-command-surface.md +169 -0
- package/schemas/artifact-contracts.schema.json +130 -0
- package/schemas/change.schema.json +71 -0
- package/schemas/contract-graph.schema.json +80 -0
- package/schemas/decision-record.schema.json +92 -0
- package/schemas/disclosure-levels.schema.json +66 -0
- package/schemas/openworkflow-contract.schema.json +88 -0
- package/schemas/product-design.schema.json +356 -0
- package/schemas/prototype-evidence.schema.json +325 -0
- package/schemas/prototype.schema.json +149 -0
- package/schemas/validation-target.schema.json +127 -0
- package/schemas/validation.schema.json +123 -0
- package/schemas/vision-session.schema.json +78 -0
- package/schemas/work-items.schema.json +87 -0
- package/schemas/workflow-index.schema.json +70 -0
- package/skills/build-prototype/SKILL.md +87 -0
- package/skills/build-prototype/agents/openai.yaml +4 -0
- package/skills/build-prototype/references/prototype-protocol.md +56 -0
- package/skills/build-prototype/scripts/init_prototype.py +260 -0
- package/skills/build-team/SKILL.md +292 -0
- package/skills/build-team/agents/openai.yaml +4 -0
- package/skills/build-team/references/runtime-schema.md +275 -0
- package/skills/build-team/references/team-protocol.md +244 -0
- package/skills/build-team/scripts/init_team_runtime.py +431 -0
- package/skills/build-validation/SKILL.md +81 -0
- package/skills/build-validation/agents/openai.yaml +4 -0
- package/skills/build-validation/references/validation-protocol.md +51 -0
- package/skills/build-validation/scripts/init_validation.py +194 -0
- package/skills/build-workflow/SKILL.md +65 -0
- package/skills/build-workflow/agents/openai.yaml +4 -0
- package/skills/build-workflow/references/workflow-layout.md +57 -0
- package/skills/build-workflow/scripts/init_workflow.py +423 -0
- package/skills/run-team/SKILL.md +93 -0
- package/skills/run-team/agents/openai.yaml +4 -0
- package/skills/run-team/references/delegation-and-agent-lifecycle.md +78 -0
- package/skills/run-team/references/run-loop.md +73 -0
- package/skills/run-team/references/runtime-audit.md +56 -0
- package/skills/run-team/references/scope-selection.md +64 -0
- package/skills/run-team/scripts/audit_team_runtime.py +173 -0
- package/skills/run-team/scripts/init_next_scope.py +304 -0
- package/templates/README.md +5 -0
- package/templates/codex/README.md +4 -0
- package/templates/openworkflow/README.md +4 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Initialize OpenWorkflow validation-first artifacts."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
import json
|
|
8
|
+
import re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def q(value: str | None) -> str:
|
|
13
|
+
return "null" if value is None else json.dumps(value)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def slugify(value: str) -> str:
|
|
17
|
+
return re.sub(r"[^A-Za-z0-9]+", "-", value.strip().lower()).strip("-") or "validation"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def yaml_list(items: list[str], indent: int) -> str:
|
|
21
|
+
prefix = " " * indent
|
|
22
|
+
if not items:
|
|
23
|
+
return f"{prefix}[]\n"
|
|
24
|
+
return "".join(f"{prefix}- {q(item)}\n" for item in items)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def ensure_dir(path: Path, dry_run: bool) -> None:
|
|
28
|
+
if dry_run:
|
|
29
|
+
print(f"DIR {path}")
|
|
30
|
+
return
|
|
31
|
+
path.mkdir(parents=True, exist_ok=True)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def write_file(path: Path, content: str, force: bool, dry_run: bool) -> None:
|
|
35
|
+
if path.exists() and not force:
|
|
36
|
+
print(f"SKIP {path}")
|
|
37
|
+
return
|
|
38
|
+
if dry_run:
|
|
39
|
+
action = "OVERWRITE" if path.exists() else "WRITE"
|
|
40
|
+
print(f"{action} {path}")
|
|
41
|
+
return
|
|
42
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
43
|
+
path.write_text(content, encoding="utf-8")
|
|
44
|
+
print(f"WRITE {path}")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def touch_gitkeep(path: Path, dry_run: bool) -> None:
|
|
48
|
+
gitkeep = path / ".gitkeep"
|
|
49
|
+
if gitkeep.exists():
|
|
50
|
+
return
|
|
51
|
+
if dry_run:
|
|
52
|
+
print(f"WRITE {gitkeep}")
|
|
53
|
+
return
|
|
54
|
+
gitkeep.write_text("", encoding="utf-8")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def validation_yaml(args: argparse.Namespace, validation_id: str) -> str:
|
|
58
|
+
title = args.title
|
|
59
|
+
vision_ref = args.vision_ref
|
|
60
|
+
source_artifacts = args.source_artifact or []
|
|
61
|
+
return (
|
|
62
|
+
"schema_version: 0.1.0\n"
|
|
63
|
+
f"contract_id: validation:{validation_id}\n"
|
|
64
|
+
"contract_type: validation\n"
|
|
65
|
+
f"title: {q(title)}\n"
|
|
66
|
+
"status: active\n"
|
|
67
|
+
"source_artifacts:\n"
|
|
68
|
+
f"{yaml_list(source_artifacts, 2)}"
|
|
69
|
+
"depends_on:\n"
|
|
70
|
+
f" - {vision_ref}\n"
|
|
71
|
+
"produces: []\n"
|
|
72
|
+
f"core_question: {q(args.core_question)}\n"
|
|
73
|
+
"feature_classification:\n"
|
|
74
|
+
" existential:\n"
|
|
75
|
+
f"{yaml_list(args.existential, 4)}"
|
|
76
|
+
" supporting:\n"
|
|
77
|
+
f"{yaml_list(args.supporting, 4)}"
|
|
78
|
+
" later:\n"
|
|
79
|
+
f"{yaml_list(args.later, 4)}"
|
|
80
|
+
" out_of_scope:\n"
|
|
81
|
+
f"{yaml_list(args.out_of_scope, 4)}"
|
|
82
|
+
"critical_assumptions:\n"
|
|
83
|
+
f"{yaml_list(args.assumption, 2)}"
|
|
84
|
+
"prototype_scope:\n"
|
|
85
|
+
" include:\n"
|
|
86
|
+
f"{yaml_list(args.include, 4)}"
|
|
87
|
+
" exclude:\n"
|
|
88
|
+
f"{yaml_list(args.exclude, 4)}"
|
|
89
|
+
"acceptance:\n"
|
|
90
|
+
f"{yaml_list(args.acceptance, 2)}"
|
|
91
|
+
"decision_options:\n"
|
|
92
|
+
" - continue\n"
|
|
93
|
+
" - pivot\n"
|
|
94
|
+
" - stop\n"
|
|
95
|
+
" - needs_more_evidence\n"
|
|
96
|
+
"result_artifact: RESULT.md\n"
|
|
97
|
+
"prototype_brief: PROTOTYPE_BRIEF.md\n"
|
|
98
|
+
"updated_at: null\n"
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def prototype_brief(args: argparse.Namespace, validation_id: str) -> str:
|
|
103
|
+
return f"""# Prototype Brief: {args.title}
|
|
104
|
+
|
|
105
|
+
Validation id: `validation:{validation_id}`
|
|
106
|
+
|
|
107
|
+
## Core Question
|
|
108
|
+
|
|
109
|
+
{args.core_question}
|
|
110
|
+
|
|
111
|
+
## Include
|
|
112
|
+
|
|
113
|
+
{bullet_list(args.include)}
|
|
114
|
+
|
|
115
|
+
## Exclude
|
|
116
|
+
|
|
117
|
+
{bullet_list(args.exclude)}
|
|
118
|
+
|
|
119
|
+
## Acceptance Evidence
|
|
120
|
+
|
|
121
|
+
{bullet_list(args.acceptance)}
|
|
122
|
+
|
|
123
|
+
## Handoff
|
|
124
|
+
|
|
125
|
+
Build the smallest prototype that can answer the core question. Do not add
|
|
126
|
+
production features unless they directly affect the validation result.
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def result_doc(args: argparse.Namespace, validation_id: str) -> str:
|
|
131
|
+
return f"""# Validation Result: {args.title}
|
|
132
|
+
|
|
133
|
+
Validation id: `validation:{validation_id}`
|
|
134
|
+
|
|
135
|
+
Status: pending
|
|
136
|
+
|
|
137
|
+
## Evidence
|
|
138
|
+
|
|
139
|
+
- Pending prototype review.
|
|
140
|
+
|
|
141
|
+
## Decision
|
|
142
|
+
|
|
143
|
+
Pending. Choose one: continue, pivot, stop, needs_more_evidence.
|
|
144
|
+
"""
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def bullet_list(items: list[str]) -> str:
|
|
148
|
+
if not items:
|
|
149
|
+
return "- None."
|
|
150
|
+
return "\n".join(f"- {item}" for item in items)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def init_validation(args: argparse.Namespace) -> None:
|
|
154
|
+
root = Path(args.root).expanduser().resolve()
|
|
155
|
+
validation_id = args.validation_id or slugify(args.title)
|
|
156
|
+
target = root / ".codex" / "validation" / validation_id
|
|
157
|
+
archive = target / "archive"
|
|
158
|
+
ensure_dir(target, args.dry_run)
|
|
159
|
+
ensure_dir(archive, args.dry_run)
|
|
160
|
+
touch_gitkeep(archive, args.dry_run)
|
|
161
|
+
write_file(target / "VALIDATION.yaml", validation_yaml(args, validation_id), args.force, args.dry_run)
|
|
162
|
+
write_file(target / "PROTOTYPE_BRIEF.md", prototype_brief(args, validation_id), args.force, args.dry_run)
|
|
163
|
+
write_file(target / "RESULT.md", result_doc(args, validation_id), args.force, args.dry_run)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def parser() -> argparse.ArgumentParser:
|
|
167
|
+
p = argparse.ArgumentParser(description="Initialize validation-first artifacts.")
|
|
168
|
+
p.add_argument("--root", default=".", help="Repository root.")
|
|
169
|
+
p.add_argument("--validation-id", default=None, help="Stable validation slug.")
|
|
170
|
+
p.add_argument("--title", required=True, help="Validation title.")
|
|
171
|
+
p.add_argument("--vision-ref", default="vision:default", help="Upstream vision contract id.")
|
|
172
|
+
p.add_argument("--source-artifact", action="append", default=[], help="Source artifact path. Repeatable.")
|
|
173
|
+
p.add_argument("--core-question", required=True, help="The question the prototype must answer.")
|
|
174
|
+
p.add_argument("--existential", action="append", default=[], help="Existential feature. Repeatable.")
|
|
175
|
+
p.add_argument("--supporting", action="append", default=[], help="Supporting feature. Repeatable.")
|
|
176
|
+
p.add_argument("--later", action="append", default=[], help="Later feature. Repeatable.")
|
|
177
|
+
p.add_argument("--out-of-scope", action="append", default=[], help="Out-of-scope feature. Repeatable.")
|
|
178
|
+
p.add_argument("--assumption", action="append", default=[], help="Critical assumption. Repeatable.")
|
|
179
|
+
p.add_argument("--include", action="append", default=[], help="Prototype inclusion. Repeatable.")
|
|
180
|
+
p.add_argument("--exclude", action="append", default=[], help="Prototype exclusion. Repeatable.")
|
|
181
|
+
p.add_argument("--acceptance", action="append", default=[], help="Acceptance evidence. Repeatable.")
|
|
182
|
+
p.add_argument("--force", action="store_true", help="Overwrite existing artifacts.")
|
|
183
|
+
p.add_argument("--dry-run", action="store_true", help="Print writes without changing files.")
|
|
184
|
+
return p
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def main() -> int:
|
|
188
|
+
init_validation(parser().parse_args())
|
|
189
|
+
return 0
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
if __name__ == "__main__":
|
|
193
|
+
raise SystemExit(main())
|
|
194
|
+
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-workflow
|
|
3
|
+
description: Initialize or reconcile OpenWorkflow repo-local contract infrastructure. Use when the user invokes /ow:workflow CONTENT or asks Codex to set up workflow indexes, contract graph files, context, vision, decision, spec, and change folders before /ow:team execution.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Build Workflow
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Create the upstream OpenWorkflow contract foundation for a repository. This
|
|
11
|
+
skill initializes durable files that later skills can consume instead of relying
|
|
12
|
+
on chat history.
|
|
13
|
+
|
|
14
|
+
It owns workflow infrastructure only:
|
|
15
|
+
|
|
16
|
+
- `.codex/workflow/WORKFLOW_INDEX.yaml`
|
|
17
|
+
- `.codex/workflow/CONTRACT_GRAPH.yaml`
|
|
18
|
+
- `.codex/context/`
|
|
19
|
+
- `.codex/vision/`
|
|
20
|
+
- `.codex/decisions/`
|
|
21
|
+
- `.codex/spec/`
|
|
22
|
+
- `.codex/validation/`
|
|
23
|
+
- `.codex/prototypes/`
|
|
24
|
+
- `.codex/changes/`
|
|
25
|
+
|
|
26
|
+
It must not initialize `.codex/runtime/`; runtime remains owned by `/ow:team`.
|
|
27
|
+
|
|
28
|
+
## Required Scan
|
|
29
|
+
|
|
30
|
+
Before writing, inspect:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pwd
|
|
34
|
+
git status --short
|
|
35
|
+
rg --files -g '!node_modules' -g '!dist' -g '!build' -g '!coverage'
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Read the likely source artifacts:
|
|
39
|
+
|
|
40
|
+
- `AGENT.md`
|
|
41
|
+
- `README*`
|
|
42
|
+
- `build_system_vision.md`
|
|
43
|
+
- `docs/**`
|
|
44
|
+
- existing `.codex/workflow/**`, `.codex/context/**`, `.codex/vision/**`,
|
|
45
|
+
`.codex/decisions/**`, `.codex/spec/**`, and `.codex/changes/**`
|
|
46
|
+
|
|
47
|
+
## Workflow
|
|
48
|
+
|
|
49
|
+
1. Infer a project title from the repo or user content.
|
|
50
|
+
2. Load `references/workflow-layout.md`.
|
|
51
|
+
3. Run `scripts/init_workflow.py` from the repo root, or from the installed
|
|
52
|
+
skill path when the script is not repo-local.
|
|
53
|
+
4. Preserve existing contract files unless the user explicitly asks to
|
|
54
|
+
regenerate them.
|
|
55
|
+
5. Validate with the repository validator when available:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm run validate
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Handoff
|
|
62
|
+
|
|
63
|
+
After `/ow:workflow`, the next upstream skills may create context, vision,
|
|
64
|
+
decision, spec, change, and work item contracts. `/ow:team` should consume the
|
|
65
|
+
change and work item contracts when they exist.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Workflow Layout Reference
|
|
2
|
+
|
|
3
|
+
Use this reference when initializing or reconciling OpenWorkflow contract
|
|
4
|
+
infrastructure.
|
|
5
|
+
|
|
6
|
+
## Required Layout
|
|
7
|
+
|
|
8
|
+
```txt
|
|
9
|
+
.codex/
|
|
10
|
+
workflow/
|
|
11
|
+
WORKFLOW_INDEX.yaml
|
|
12
|
+
CONTRACT_GRAPH.yaml
|
|
13
|
+
archive/
|
|
14
|
+
context/
|
|
15
|
+
CONTEXT.md
|
|
16
|
+
CONTEXT_MAP.yaml
|
|
17
|
+
GLOSSARY.yaml
|
|
18
|
+
archive/
|
|
19
|
+
vision/
|
|
20
|
+
VISION.md
|
|
21
|
+
VISION_CONTRACT.yaml
|
|
22
|
+
archive/
|
|
23
|
+
decisions/
|
|
24
|
+
DECISION_INDEX.yaml
|
|
25
|
+
archive/
|
|
26
|
+
spec/
|
|
27
|
+
SPEC_INDEX.yaml
|
|
28
|
+
archive/
|
|
29
|
+
validation/
|
|
30
|
+
VALIDATION_INDEX.yaml
|
|
31
|
+
archive/
|
|
32
|
+
prototypes/
|
|
33
|
+
PROTOTYPE_INDEX.yaml
|
|
34
|
+
archive/
|
|
35
|
+
changes/
|
|
36
|
+
archive/
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Ownership
|
|
40
|
+
|
|
41
|
+
- `/ow:workflow` owns the folders and indexes above.
|
|
42
|
+
- `/ow:context` should update `.openworkflow/context/**`.
|
|
43
|
+
- `/ow:vision` should update `.openworkflow/vision/**`.
|
|
44
|
+
- `/ow:decision` should add decision records and update
|
|
45
|
+
`.openworkflow/decisions/DECISION_INDEX.yaml`.
|
|
46
|
+
- `/ow:spec` should add specs and update `.openworkflow/specs/SPEC_INDEX.yaml`.
|
|
47
|
+
- `/ow:validation` should add validation-first prioritization artifacts and
|
|
48
|
+
update `.openworkflow/validation/VALIDATION_INDEX.yaml`.
|
|
49
|
+
- `/ow:prototype` should add prototype discovery artifacts and update
|
|
50
|
+
`.openworkflow/prototypes/PROTOTYPE_INDEX.yaml`.
|
|
51
|
+
- `/ow:change` should write under `.openworkflow/changes/<id>/`.
|
|
52
|
+
- `/ow:team` owns `.openworkflow/runtime/**`.
|
|
53
|
+
|
|
54
|
+
## Initialization Rule
|
|
55
|
+
|
|
56
|
+
Create missing files and directories. Do not overwrite existing contract files
|
|
57
|
+
unless the user explicitly requests regeneration.
|