okstra 0.136.0 → 0.137.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/docs/architecture/storage-model.md +1 -1
- package/docs/contributor-change-matrix.md +1 -1
- package/docs/project-structure-overview.md +8 -3
- package/package.json +2 -3
- package/runtime/BUILD.json +2 -2
- package/runtime/bin/lib/okstra-ctl/cmd-rerun.sh +1 -1
- package/runtime/bin/okstra-spawn-followups.py +4 -9
- package/runtime/prompts/lead/plan-body-verification.md +2 -2
- package/runtime/python/okstra_ctl/codex_dispatch.py +56 -331
- package/runtime/python/okstra_ctl/consumers.py +7 -5
- package/runtime/python/okstra_ctl/context_cost.py +4 -4
- package/runtime/python/okstra_ctl/dispatch_core.py +54 -175
- package/runtime/python/okstra_ctl/dispatch_state.py +231 -0
- package/runtime/python/okstra_ctl/error_report.py +2 -7
- package/runtime/python/okstra_ctl/implementation_outcome.py +12 -23
- package/runtime/python/okstra_ctl/implementation_stage.py +7 -2
- package/runtime/python/okstra_ctl/path_hints.py +3 -3
- package/runtime/python/okstra_ctl/paths.py +17 -2
- package/runtime/python/okstra_ctl/recap.py +5 -12
- package/runtime/python/okstra_ctl/render.py +9 -15
- package/runtime/python/okstra_ctl/report_finalize.py +8 -4
- package/runtime/python/okstra_ctl/report_language.py +83 -0
- package/runtime/python/okstra_ctl/run.py +222 -239
- package/runtime/python/okstra_ctl/set_work_status.py +2 -1
- package/runtime/python/okstra_ctl/stage_targets.py +98 -55
- package/runtime/python/okstra_ctl/time_report.py +4 -9
- package/runtime/python/okstra_ctl/wizard.py +45 -47
- package/runtime/python/okstra_ctl/work_categories.py +2 -2
- package/runtime/python/okstra_ctl/worker_prompt_body.py +82 -0
- package/runtime/python/okstra_ctl/worker_prompt_contract.py +0 -13
- package/runtime/python/okstra_ctl/worker_prompt_headers.py +7 -0
- package/runtime/python/okstra_project/__init__.py +4 -0
- package/runtime/python/okstra_project/dirs.py +7 -0
- package/runtime/python/okstra_project/state.py +78 -8
- package/runtime/validators/validate-run.py +3 -21
- package/src/commands/inspect/stage-map.mjs +12 -19
|
@@ -236,7 +236,7 @@ Main contents:
|
|
|
236
236
|
This document is only a quick summary and is not the source of truth.
|
|
237
237
|
Always use `task-manifest.json` when checking canonical metadata.
|
|
238
238
|
|
|
239
|
-
The rendered `task-index.md` is an English-literal artifact. The headings, field labels, and `## Notes` footnote of the template (`templates/project-docs/task-index.template.md`) ship as English literals regardless of the `reportLanguage` setting, matching the okstra-schedule-gen schedule contract.
|
|
239
|
+
The rendered `task-index.md` is an English-literal artifact. The headings, field labels, and `## Notes` footnote of the template (`templates/project-docs/task-index.template.md`) ship as English literals regardless of the `reportLanguage` setting, matching the okstra-schedule-gen schedule contract. `tests/contract/test_docs_runtime_contract.py` enforces this contract.
|
|
240
240
|
|
|
241
241
|
## Run manifest contract
|
|
242
242
|
|
|
@@ -11,6 +11,6 @@ Use this matrix before changing high-risk repo contracts. Update the source file
|
|
|
11
11
|
| Add phase | `scripts/okstra_ctl/workflow.py`, `prompts/profiles/`, `validators/`, `tests/` | workflow and validation contract tests |
|
|
12
12
|
| Change worker roster | `prompts/profiles/*.md`, `scripts/okstra_ctl/workers.py`, `tests/contract/test_repo_contracts.py` | worker roster contract tests |
|
|
13
13
|
| Change report section | `schemas/final-report-v1.0.schema.json`, `templates/reports/final-report.template.md`, `scripts/okstra_ctl/render_final_report.py`, `validators/validate-run.py` | final-report schema, renderer, and validator tests |
|
|
14
|
-
|
|
|
14
|
+
| Maintain Korean review mirrors | `config/korean-sources.json`, `tools/korean-sources/`, `.agents/skills/sync-korean-sources/`, `.claude/skills/sync-korean-sources/` | `tests-js/korean-sources-*.test.mjs` |
|
|
15
15
|
|
|
16
16
|
`runtime/` is build output. Never edit it directly; change source files and rebuild the runtime payload instead.
|
|
@@ -55,6 +55,10 @@ okstra/
|
|
|
55
55
|
│ ├── lib/okstra/ Bash helpers for okstra.sh
|
|
56
56
|
│ └── lib/okstra-ctl/ Bash control-center subcommands
|
|
57
57
|
├── skills/ Claude Code skills (13); `_fragments/` holds shared marker blocks
|
|
58
|
+
├── .agents/skills/ Codex repo-local maintainer skills
|
|
59
|
+
├── .claude/skills/ Claude Code project-only mirror-sync surface
|
|
60
|
+
├── .claude/settings.json Claude Code project-only mirror-sync surface
|
|
61
|
+
├── .codex/hooks.json Codex project lifecycle hooks
|
|
58
62
|
├── agents/ lead SKILL.md + worker agent specs
|
|
59
63
|
├── prompts/ launch template, phase profiles, wizard prompt JSON
|
|
60
64
|
├── schemas/ JSON schema for final-report data.json
|
|
@@ -62,8 +66,8 @@ okstra/
|
|
|
62
66
|
├── validators/ run / brief / schedule / view validators
|
|
63
67
|
├── tools/build.mjs source → runtime sync
|
|
64
68
|
├── tools/sync-skill-fragments.mjs expand shared fragment blocks into skills/*/SKILL.md
|
|
65
|
-
├── tools/
|
|
66
|
-
├── config/
|
|
69
|
+
├── tools/korean-sources/ maintainer-only Korean mirror sync engine
|
|
70
|
+
├── config/korean-sources.json configured English Markdown source roots
|
|
67
71
|
├── runtime/ generated install payload; do not edit directly
|
|
68
72
|
├── tests/ pytest unit suite
|
|
69
73
|
├── tests-e2e/ Bash end-to-end scenarios
|
|
@@ -289,6 +293,7 @@ Important modules:
|
|
|
289
293
|
| `team_reconcile.py` | stale team-member reconciliation at run-end teardown |
|
|
290
294
|
| `worker_prompt_headers.py` | shared rendering of phase-aware worker prompt anchors (`worker_prompt_headers`): coding-preflight only for implementation and compact target identity for final-verification |
|
|
291
295
|
| `worker_prompt_body.py` | provider-neutral initial analysis body/input renderer shared by Codex and external/team dispatch paths |
|
|
296
|
+
| `report_language.py` | report-writer `**Report Language:**` resolution (`resolve_report_language`) — precedence project config → global config → task-brief inference, shared by both dispatchers so the stamped language does not depend on which dispatch path ran |
|
|
292
297
|
| `worker_prompt_policy.py` | `PromptPlan` generating SSOT — resolves functional audience, equality group, packet-only input, coding-preflight eligibility, required headers, and size limits without consulting provider/model identity |
|
|
293
298
|
| `worker_prompt_contract.py` | deterministic cross-task initial-prompt validator and normalized cross-worker equality SSOT, reused by dispatch adapters and the Phase 7 persisted-artifact validator |
|
|
294
299
|
| `convergence_engine.py` | pure `ConvergenceEngine` reducer — seeds Round 0 working state, plans roster-aware rounds, applies structured outcomes and one critic-gap batch, finalizes schema v1.3, and validates replayable state without dispatch or filesystem ownership |
|
|
@@ -558,7 +563,7 @@ When changing code, keep these docs in sync:
|
|
|
558
563
|
- New report field/section: update schema, template, report-writer worker, validator tests, this file's report model if user-visible.
|
|
559
564
|
- New phase/profile behavior: update `prompts/profiles/*`, `docs/architecture.md`, `docs/cli.md`, and `README.md` if user-facing.
|
|
560
565
|
|
|
561
|
-
|
|
566
|
+
Edit English canonical Markdown sources directly. After changing a path registered in `config/korean-sources.json`, process the local Korean mirror queue with `$sync-korean-sources` or `/sync-korean-sources`. `.project-docs/ko-sources/**` is maintainer-local only: it is neither published nor committed.
|
|
562
567
|
|
|
563
568
|
---
|
|
564
569
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "okstra",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.137.0",
|
|
4
4
|
"description": "Multi-agent cross-verification orchestrator runtime + Claude Code skills.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "devonshin",
|
|
@@ -35,10 +35,9 @@
|
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "node tools/build.mjs",
|
|
37
37
|
"prepack": "node tools/build.mjs",
|
|
38
|
-
"docs:validate": "python3 -m tools.docs_publication validate --repo .",
|
|
39
38
|
"test:js": "node --test tests-js/*.test.mjs",
|
|
40
39
|
"test:py": "python3 -m pytest tests/",
|
|
41
40
|
"test:workflow": "bash validators/validate-workflow.sh",
|
|
42
|
-
"check": "npm run
|
|
41
|
+
"check": "npm run build && npm run test:js && npm run test:py && npm run test:workflow"
|
|
43
42
|
}
|
|
44
43
|
}
|
package/runtime/BUILD.json
CHANGED
|
@@ -151,7 +151,7 @@ batch_reserved = {}
|
|
|
151
151
|
for original in targets:
|
|
152
152
|
row = find_row_by_run_id(home, original)
|
|
153
153
|
# implementation 은 stage 격리 task-type 이다. 한 run = 런타임에 live
|
|
154
|
-
# registry/consumers 상태로 auto-resolve 되는 단일 stage(
|
|
154
|
+
# registry/consumers 상태로 auto-resolve 되는 단일 stage(stage_targets.resolve_effective_stages)
|
|
155
155
|
# 이므로, cmd-rerun 은 spawn 전에 어느 stage-<N> 가 선택될지 알 수 없어
|
|
156
156
|
# runs/implementation/stage-<N> 경로도 per-stage run_seq 도 예측할 수 없다.
|
|
157
157
|
# OKSTRA_RUN_SEQ_OVERRIDE(run 전체에 단일 seq) 는 per-stage seq 카운터와
|
|
@@ -51,19 +51,14 @@ from pathlib import Path
|
|
|
51
51
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
52
52
|
|
|
53
53
|
from okstra_ctl.final_report_paths import final_report_markdown_path # noqa: E402
|
|
54
|
+
from okstra_ctl.paths import task_manifest_file # noqa: E402
|
|
55
|
+
from okstra_ctl.workflow import PHASE_SEQUENCE # noqa: E402
|
|
54
56
|
from okstra_project.dirs import tasks_root # noqa: E402
|
|
55
57
|
|
|
56
58
|
|
|
57
59
|
SLUG_RE = re.compile(r"[^a-zA-Z0-9-]+")
|
|
58
60
|
|
|
59
|
-
ALLOWED_TASK_TYPES =
|
|
60
|
-
"requirements-discovery",
|
|
61
|
-
"error-analysis",
|
|
62
|
-
"implementation-planning",
|
|
63
|
-
"implementation",
|
|
64
|
-
"final-verification",
|
|
65
|
-
"release-handoff",
|
|
66
|
-
}
|
|
61
|
+
ALLOWED_TASK_TYPES = set(PHASE_SEQUENCE)
|
|
67
62
|
ALLOWED_ORIGINS = {
|
|
68
63
|
"phase-continuation",
|
|
69
64
|
"out-of-plan",
|
|
@@ -193,7 +188,7 @@ def _spawn_one(
|
|
|
193
188
|
"routingStatus": "follow-up-spawned",
|
|
194
189
|
},
|
|
195
190
|
}
|
|
196
|
-
_write_manifest(task_root
|
|
191
|
+
_write_manifest(task_manifest_file(task_root), manifest_payload)
|
|
197
192
|
|
|
198
193
|
brief_path = task_root / "instruction-set" / "task-brief.md"
|
|
199
194
|
brief_path.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -244,7 +244,7 @@ Plan-body verification stays **lightweight** even under this posture — the `ve
|
|
|
244
244
|
|
|
245
245
|
Required prompt anchor headers are identical to finding convergence (see [convergence](./convergence.md) §"Required reverify-prompt anchor headers"). The prompt body changes from F-* listing to P-* listing:
|
|
246
246
|
|
|
247
|
-
|
|
247
|
+
````
|
|
248
248
|
You are <worker-role> performing plan-body verification for <task-key> (round 1).
|
|
249
249
|
|
|
250
250
|
## Instructions
|
|
@@ -342,7 +342,7 @@ rerun a free-form requirements analysis. Every DISAGREE includes Fixability.
|
|
|
342
342
|
**Fixability** (DISAGREE only): planner-fixable | needs-user-input. Fixability is not applicable for `UNVERIFIABLE`.
|
|
343
343
|
**Note**: <the falsification candidate considered and why it is excluded; required even for AGREE>
|
|
344
344
|
**Explanation**: <2-3 sentences applying the disposition-specific rule>
|
|
345
|
-
|
|
345
|
+
````
|
|
346
346
|
|
|
347
347
|
When `config.adversarial == true`, the lead prepends the adversarial framing from §"Adversarial plan-body posture" to the `## Instructions` block: the burden of proof is on the plan, the verifier opens and confirms every accessible cited path / command, and evidence that was opened but is insufficient yields the applicable `DISAGREE(<kind>)` rather than `AGREE`. Inability to inspect because of capability, credential, network, or service state yields `UNVERIFIABLE`, not DISAGREE. The verdict tokens, breakage kinds (a–f), classification, and the majority gate threshold are unchanged. This prepended framing supersedes the template's "Judge solely from plan internal consistency" instruction for the adversarial round.
|
|
348
348
|
|