@galda/cli 0.10.86 → 0.10.87
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/app/index.html +14 -7
- package/engine/server.mjs +6 -0
- package/package.json +1 -1
package/app/index.html
CHANGED
|
@@ -9859,6 +9859,11 @@ function saItemHtml(it, i){
|
|
|
9859
9859
|
// verification visible together while prior attempts stay in Conversation.
|
|
9860
9860
|
const attempt = it.attempt;
|
|
9861
9861
|
const activeText = String(attempt?.activeRequirement?.text || '').replace(/\s+/g, ' ').trim();
|
|
9862
|
+
const requestText = String(it.goalText || '').replace(/\s+/g, ' ').trim();
|
|
9863
|
+
// A single requirement is commonly recorded verbatim from the Request. Do
|
|
9864
|
+
// not make the review read it back as a second section; keep this section for
|
|
9865
|
+
// a narrowed retry requirement or concrete run evidence instead.
|
|
9866
|
+
const reviewText = activeText && activeText !== requestText ? activeText : '';
|
|
9862
9867
|
const attemptFiles = Array.isArray(attempt?.changedFiles) ? attempt.changedFiles.filter(Boolean) : [];
|
|
9863
9868
|
const attemptTests = attempt?.verification?.tests;
|
|
9864
9869
|
const attemptProof = attempt?.verification?.proof;
|
|
@@ -9867,8 +9872,8 @@ function saItemHtml(it, i){
|
|
|
9867
9872
|
attemptTests?.ran ? `Tests: ${attemptTests.passed ?? 0} passed${attemptTests.failed ? ` / ${attemptTests.failed} failed` : ''}` : '',
|
|
9868
9873
|
attemptProof?.pass === true ? 'Proof recorded' : '',
|
|
9869
9874
|
].filter(Boolean).join(' · ');
|
|
9870
|
-
const attemptSec =
|
|
9871
|
-
? `<section class="rsec"><div class="rsec-h">This review</div>${
|
|
9875
|
+
const attemptSec = reviewText || attemptEvidence
|
|
9876
|
+
? `<section class="rsec"><div class="rsec-h">This review</div>${reviewText ? `<p class="rbody rask">${esc(reviewText)}</p>` : ''}${attemptEvidence ? `<p class="rbody v">${esc(attemptEvidence)}</p>` : ''}</section>`
|
|
9872
9877
|
: '';
|
|
9873
9878
|
const reqVerify = it.requirementVerification;
|
|
9874
9879
|
const reqVerifyParts = [
|
|
@@ -9877,10 +9882,15 @@ function saItemHtml(it, i){
|
|
|
9877
9882
|
Array.isArray(reqVerify?.changedFiles) && reqVerify.changedFiles.length ? `Files: ${reqVerify.changedFiles.join(' · ')}` : '',
|
|
9878
9883
|
].filter(Boolean);
|
|
9879
9884
|
const reqVerifySec = reqVerifyParts.length ? `<section class="rsec"><div class="rsec-h">Requirement verification</div><p class="rbody v">${esc(reqVerifyParts.join(' · '))}</p></section>` : '';
|
|
9880
|
-
const
|
|
9885
|
+
const coverage = (it.requirementCoverage || []).filter((r) => r.text);
|
|
9886
|
+
// For one requirement copied from Request, its status is useful but the full
|
|
9887
|
+
// sentence is not. Multiple or narrowed requirements retain their text.
|
|
9888
|
+
const coverageIsSingleRequest = coverage.length === 1
|
|
9889
|
+
&& String(coverage[0].text).replace(/\s+/g, ' ').trim() === requestText;
|
|
9890
|
+
const coverageRows = coverage.map((r) => {
|
|
9881
9891
|
const status = r.evidenceStatus || r.taskStatus;
|
|
9882
9892
|
const tone = status === 'addressed' || status === 'done' ? 'ok' : status === 'partial' ? '' : 'dim';
|
|
9883
|
-
return `<p class="rbody v"><b class="${tone}">${esc(status)}</b
|
|
9893
|
+
return `<p class="rbody v"><b class="${tone}">${esc(status)}</b>${coverageIsSingleRequest ? '' : ` · ${esc(r.text)}`}</p>`;
|
|
9884
9894
|
}).join('');
|
|
9885
9895
|
const coverageSec = coverageRows ? `<section class="rsec"><div class="rsec-h">Requirement coverage</div>${coverageRows}</section>` : '';
|
|
9886
9896
|
// Worker-declared evidence is displayed verbatim as an auditable label, not
|
|
@@ -9890,8 +9900,6 @@ function saItemHtml(it, i){
|
|
|
9890
9900
|
return `<p class="rbody v"><b class="${tone}">${esc(entry.status)}</b> · ${esc(entry.evidence || entry.id)}</p>`;
|
|
9891
9901
|
}).join('');
|
|
9892
9902
|
const evidenceSec = evidenceRows ? `<section class="rsec"><div class="rsec-h">Requirement evidence</div>${evidenceRows}</section>` : '';
|
|
9893
|
-
const userCoverageRows = (it.requirementCoverage || []).filter((r) => r.text).map((r) => `<p class="rbody v"><b class="${r.status === 'done' ? 'ok' : 'dim'}">${esc(r.status)}</b> · ${esc(r.text)}</p>`).join('');
|
|
9894
|
-
const userCoverageSec = userCoverageRows ? `<section class="rsec"><div class="rsec-h">User requirements</div>${userCoverageRows}</section>` : '';
|
|
9895
9903
|
// ── Open it (Masa 2026-07-22): a plain section in the card's own typography — the same
|
|
9896
9904
|
// heading + body shape as Request and Result, not a chip in another vocabulary. The
|
|
9897
9905
|
// address the worker declared IS the control (press it → the process starts on demand →
|
|
@@ -10122,7 +10130,6 @@ function saItemHtml(it, i){
|
|
|
10122
10130
|
${coverageSec}
|
|
10123
10131
|
${evidenceSec}
|
|
10124
10132
|
${reqVerifySec}
|
|
10125
|
-
${userCoverageSec}
|
|
10126
10133
|
${S('Open it', openBody)}
|
|
10127
10134
|
${S('Run state', interruptedBody)}
|
|
10128
10135
|
${S('PR', prRepairBody)}
|
package/engine/server.mjs
CHANGED
|
@@ -5520,6 +5520,12 @@ async function answerGoalQuestion(goal, question) {
|
|
|
5520
5520
|
addGoalMessage(goal, { from: 'you', via: 'review', text });
|
|
5521
5521
|
goal.text = text.slice(0, 8000);
|
|
5522
5522
|
}
|
|
5523
|
+
// A PR request added during Review changes the deliverable, not the
|
|
5524
|
+
// worker's permissions. Workers deliberately cannot git add/commit; the
|
|
5525
|
+
// Manager close-out below owns commit/push/PR creation. Keep this
|
|
5526
|
+
// monotonic: an explicit later PR request upgrades a No-PR/auto goal,
|
|
5527
|
+
// while ordinary feedback never silently downgrades an existing PR goal.
|
|
5528
|
+
if (result.spawnsWorker && resolveWantsPR('auto', text, false)) goal.wantsPR = true;
|
|
5523
5529
|
goal.status = result.status;
|
|
5524
5530
|
saveGoal(goal);
|
|
5525
5531
|
// rescope はワーカーを起こさない——「いったん止めて考え直す」なので、走り出したら
|
package/package.json
CHANGED