@seanyao/roll 3.613.1 → 3.613.2
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/CHANGELOG.md +10 -0
- package/dist/roll.mjs +14 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## v3.613.2 — 2026-06-13
|
|
6
|
+
|
|
7
|
+
### 稳定性
|
|
8
|
+
|
|
9
|
+
- `roll loop go` 的预算与运行上限改为每次启动显式设定:只取本次调用的 `--budget`/`--max-cycles`/`--for`,省略即本轮不设限,不再沿用上一次会话持久化的旧值(此前 flagless 连跑会继承几天前设的预算与单周期上限,一个 idle 周期即 budget_limited 收摊、整轮零产出);scope/review 仍按需沿用(FIX-279) `[loop]`
|
|
10
|
+
<!-- evidence: .roll/features/goal-mode/FIX-279/latest/FIX-279-report.html -->
|
|
11
|
+
|
|
12
|
+
- `roll index --rebuild` 不再把已合并故事页降级:delivered 判定补离线 git 合并真相(提交标题点名故事 id,或 `(#N)` PR 合并提交引用它),rebuild 无实时 PR 快照时也保住已合并卡的"已合主干·已验收"横幅与交付脊柱;选择器可提升但不再抹掉 git 证明已合的卡,Done 闸防止 Todo 卡被误提升(FIX-278) `[dossier]`
|
|
13
|
+
<!-- evidence: .roll/features/delivery-dossier/FIX-278/latest/FIX-278-report.html -->
|
|
14
|
+
|
|
5
15
|
## v3.613.1 — 2026-06-13
|
|
6
16
|
|
|
7
17
|
### 稳定性
|
package/dist/roll.mjs
CHANGED
|
@@ -8859,9 +8859,10 @@ function collectDossier(projectPath3, opts = {}) {
|
|
|
8859
8859
|
}
|
|
8860
8860
|
const status2 = backlogStatus.get(id);
|
|
8861
8861
|
const rawStatus = backlogRawStatus.get(id);
|
|
8862
|
+
const merged = opts.mergeEvidence?.(id) ?? false;
|
|
8862
8863
|
const storyTruth = rawStatus !== void 0 ? storyTruthFromBacklog(id, rawStatus, { prEvidence: opts.prEvidence?.[id], nowSec: opts.nowSec }) : void 0;
|
|
8863
8864
|
if (storyTruth !== void 0)
|
|
8864
|
-
delivered = storyTruth.delivered;
|
|
8865
|
+
delivered = storyTruth.delivered || status2 === "done" && merged;
|
|
8865
8866
|
const legacy = delivered && !hasLatest && !existsSync6(join4(dir, "ac-map.json"));
|
|
8866
8867
|
const story = {
|
|
8867
8868
|
id,
|
|
@@ -17164,6 +17165,13 @@ function factsSubjects(facts, storyId) {
|
|
|
17164
17165
|
function factsChangedFiles(facts, storyId) {
|
|
17165
17166
|
return factsCommitsFor(facts, storyId).flatMap((c2) => c2.files).map((l) => l.trim()).filter((l) => l !== "" && !l.includes(" ")).slice(0, 80);
|
|
17166
17167
|
}
|
|
17168
|
+
function storyHasMergeEvidence(facts, storyId) {
|
|
17169
|
+
if (facts === null)
|
|
17170
|
+
return false;
|
|
17171
|
+
if (facts.commits.some((c2) => c2.subject.includes(storyId)))
|
|
17172
|
+
return true;
|
|
17173
|
+
return factsPrNumbers(facts, storyId).length > 0;
|
|
17174
|
+
}
|
|
17167
17175
|
function factsPrNumbers(facts, storyId) {
|
|
17168
17176
|
const nums = /* @__PURE__ */ new Set();
|
|
17169
17177
|
for (const subject of factsSubjects(facts, storyId)) {
|
|
@@ -17510,9 +17518,9 @@ function generateDossierPages(cwd, rebuild) {
|
|
|
17510
17518
|
const featuresDir = join24(cwd, ".roll", "features");
|
|
17511
17519
|
if (!existsSync28(featuresDir))
|
|
17512
17520
|
return 0;
|
|
17513
|
-
const epics = collectDossier(cwd);
|
|
17514
|
-
const inputs = /* @__PURE__ */ new Map();
|
|
17515
17521
|
const runCache = buildDossierRunCache(cwd);
|
|
17522
|
+
const epics = collectDossier(cwd, { mergeEvidence: (id) => storyHasMergeEvidence(runCache.git, id) });
|
|
17523
|
+
const inputs = /* @__PURE__ */ new Map();
|
|
17516
17524
|
for (const epic of epics) {
|
|
17517
17525
|
for (const story of epic.stories) {
|
|
17518
17526
|
try {
|
|
@@ -21596,16 +21604,15 @@ function runSummaryFromGoal(goal) {
|
|
|
21596
21604
|
};
|
|
21597
21605
|
}
|
|
21598
21606
|
function applyRunOptions(goal, opts, at) {
|
|
21599
|
-
const
|
|
21607
|
+
const { budgetUsd: _staleBudget, limits: _staleLimits, ...rest } = goal;
|
|
21600
21608
|
return {
|
|
21601
|
-
...
|
|
21609
|
+
...rest,
|
|
21602
21610
|
scope: opts.scopeSpecified ? opts.scope : goal.scope,
|
|
21603
21611
|
...opts.budgetUsd !== void 0 ? { budgetUsd: opts.budgetUsd } : {},
|
|
21604
21612
|
review: opts.reviewModeSpecified ? { mode: opts.reviewMode } : goal.review,
|
|
21605
21613
|
limits: {
|
|
21606
|
-
...goal.limits,
|
|
21607
21614
|
...opts.maxCycles !== void 0 ? { maxCycles: opts.maxCycles } : {},
|
|
21608
|
-
...
|
|
21615
|
+
...opts.forSeconds !== void 0 ? { maxHours: opts.forSeconds / 3600 } : {}
|
|
21609
21616
|
},
|
|
21610
21617
|
updatedAt: at
|
|
21611
21618
|
};
|