okstra 0.195.0 → 0.195.1
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/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/prompts/profiles/_implementation-deliverable.md +1 -1
- package/runtime/templates/reports/html/macros/layout.html +4 -0
- package/runtime/templates/reports/html/tasks/implementation.template.html +2 -2
- package/runtime/templates/reports/html/tasks/release-handoff.template.html +2 -2
package/package.json
CHANGED
package/runtime/BUILD.json
CHANGED
|
@@ -12,7 +12,7 @@ are collected and convergence finished. Phase 1-5 do not need it.
|
|
|
12
12
|
|
|
13
13
|
- **Plan link & approval evidence**: path to the approved `final-report.md`, the exact quoted approval marker, AND the executed stage number / title quoted from the Stage Map row. For a selected-direction plan, also quote `selectedDirectionRef.optionId`, `snapshotPath`, and the validated snapshot digest; for a legacy plan, quote the effective `implementation-option` or the Recommended Option fallback.
|
|
14
14
|
- **Commit list**: each commit's SHA (or short SHA), message, and the plan step(s) / TDD cycle it satisfies
|
|
15
|
-
- **Diff summary**: `git diff --stat <base
|
|
15
|
+
- **Diff summary**: capture `git diff --stat <base>..<captured-head>` and `git diff --numstat <base>..<captured-head>` for the full implementation stage, including after a fix run. Supply both outputs to the report writer; populate each `diffSummary.files[].lines` with its added/deleted counts and a one-line change summary. Do not substitute a fix-run aggregate or carry forward older statistics. If the captured commits are unavailable, identify the missing reference in the evidence instead of inventing counts.
|
|
16
16
|
- **Out-of-plan edits block**: every file edited that was not in the approved plan's file list, with rationale (empty block is acceptable and preferred)
|
|
17
17
|
- **Clarification answers carried in**: when `instruction-set/clarification-response.md` exists, it holds the user's answers to the approved plan's `## 1. Clarification Items` rows. The report MUST render the `## 0. Clarification Response Carried In From Previous Run` section (set `clarificationCarryIn.sourceFile` to that path) and, for every carried-over `## 1.` row whose answer appears there, record the answer in the `User input` cell and flip `Status` to `resolved`. A row left `open`/`answered` despite a matching user answer is a contract violation; an answer that materially changes scope beyond the approved plan is routed to a new `implementation-planning` run, not silently executed.
|
|
18
18
|
- **Stage sidecar evidence**: the JSON payload of `runs/<impl-task-key>/carry/stage-<N>.json` is embedded verbatim in a fenced ```json``` block, AND the `consumers.jsonl` rows this run appended are quoted line-by-line, so reviewers can audit the carry surface without grepping artifact directories.
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
{% macro file_paths(value) -%}
|
|
2
|
+
{% for path in value.splitlines() if path | trim %}<div><code>{{ path }}</code></div>{% endfor %}
|
|
3
|
+
{%- endmacro %}
|
|
4
|
+
|
|
1
5
|
{% macro narrative(value, field_name) -%}
|
|
2
6
|
<div class="narrative" data-report-field="{{ field_name }}">
|
|
3
7
|
{{ value.text | paragraphs }}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% extends "html/base.template.html" %}
|
|
2
|
-
{% from "html/macros/layout.html" import narrative as render_narrative, summary_card, row_key %}
|
|
2
|
+
{% from "html/macros/layout.html" import narrative as render_narrative, summary_card, row_key, file_paths %}
|
|
3
3
|
{% from "html/macros/visualizations.html" import figure %}
|
|
4
4
|
|
|
5
5
|
{% block human_content %}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
<section data-report-section="shipped-commits" data-report-field="implementation.commitList">
|
|
37
37
|
<h2>{{ t('tasks.implementation.commits-delivered') }}</h2>
|
|
38
38
|
{% if implementation.commitList is mapping %}<p>{{ t('tasks.implementation.there-are-no-commits') }}</p>{% else %}
|
|
39
|
-
<table><thead><tr><th>{{ t('tasks.implementation.commit') }}</th><th>{{ t('tasks.implementation.subject') }}</th><th>{{ t('tasks.implementation.files') }}</th></tr></thead><tbody>{% for row in implementation.commitList %}<tr>{{ row_key(pairs=[(t('macros.layout.sha'), row.shortSha), (t('macros.layout.order'), row.number), (t('macros.layout.plan-step'), row.planStep)]) }}<td>{{ row.subject | inline_code }}</td><td>{
|
|
39
|
+
<table><thead><tr><th>{{ t('tasks.implementation.commit') }}</th><th>{{ t('tasks.implementation.subject') }}</th><th>{{ t('tasks.implementation.files') }}</th></tr></thead><tbody>{% for row in implementation.commitList %}<tr>{{ row_key(pairs=[(t('macros.layout.sha'), row.shortSha), (t('macros.layout.order'), row.number), (t('macros.layout.plan-step'), row.planStep)]) }}<td>{{ row.subject | inline_code }}</td><td>{{ file_paths(row.files) }}</td></tr>{% endfor %}</tbody></table>{% endif %}
|
|
40
40
|
<table data-report-field="implementation.approvedPlanReference"><tbody><tr><th>{{ t('tasks.implementation.approved-plan') }}</th><td><code>{{ implementation.approvedPlanReference.planFile }}</code></td></tr><tr><th>{{ t('tasks.implementation.approval-evidence') }}</th><td>{{ implementation.approvedPlanReference.approvalEvidence | inline_code }}</td></tr><tr><th>{{ t('tasks.implementation.worktree') }}</th><td><code>{{ implementation.approvedPlanReference.executorWorktreePath }}</code> @ <code>{{ implementation.approvedPlanReference.baseRefSha }}</code></td></tr></tbody></table>
|
|
41
41
|
</section>
|
|
42
42
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% extends "html/base.template.html" %}
|
|
2
|
-
{% from "html/macros/layout.html" import narrative as render_narrative, summary_card, row_key %}
|
|
2
|
+
{% from "html/macros/layout.html" import narrative as render_narrative, summary_card, row_key, file_paths %}
|
|
3
3
|
{% from "html/macros/visualizations.html" import figure %}
|
|
4
4
|
|
|
5
5
|
{% block human_content %}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
<section data-report-section="delivered-commits" data-report-field="releaseHandoff.commitList">
|
|
39
39
|
<h2>{{ t('tasks.release-handoff.commits-delivered') }}</h2>
|
|
40
40
|
{% if handoff.commitList is mapping %}<p>{{ t('tasks.release-handoff.there-are-no-commits') }}</p>{% else %}
|
|
41
|
-
<table><thead><tr><th>{{ t('tasks.release-handoff.commit') }}</th><th>{{ t('tasks.release-handoff.subject') }}</th><th>{{ t('tasks.release-handoff.files') }}</th></tr></thead><tbody>{% for row in handoff.commitList %}<tr>{{ row_key(pairs=[(t('macros.layout.sha'), row.shortSha), (t('macros.layout.order'), loop.index)]) }}<td>{{ row.subject | inline_code }}</td><td>{
|
|
41
|
+
<table><thead><tr><th>{{ t('tasks.release-handoff.commit') }}</th><th>{{ t('tasks.release-handoff.subject') }}</th><th>{{ t('tasks.release-handoff.files') }}</th></tr></thead><tbody>{% for row in handoff.commitList %}<tr>{{ row_key(pairs=[(t('macros.layout.sha'), row.shortSha), (t('macros.layout.order'), loop.index)]) }}<td>{{ row.subject | inline_code }}</td><td>{{ file_paths(row.files) }}</td></tr>{% endfor %}</tbody></table>{% endif %}
|
|
42
42
|
{% if handoff.get("sourceVerificationReports") %}<p data-report-field="releaseHandoff.sourceVerificationReports"><strong>{{ t('tasks.release-handoff.the-verification-report-this-rests-on') }}</strong>{% for row in handoff.sourceVerificationReports %} — stage {{ row.stage }}: <code>{{ row.path }}</code> · {{ row.verdictTokenQuote | inline_code }}{% endfor %}</p>
|
|
43
43
|
{% else %}<p data-report-field="releaseHandoff.sourceVerificationReport"><strong>{{ t('tasks.release-handoff.the-verification-report-this-rests-on') }}</strong> — <code>{{ handoff.sourceVerificationReport.path }}</code> · {{ handoff.sourceVerificationReport.verdictTokenQuote | inline_code }}</p>{% endif %}
|
|
44
44
|
</section>
|