scrum-skills 0.2.4 → 0.2.6
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/.agents/skills/scrum-planning/references/schema.md +84 -1
- package/.agents/skills/scrum-report/SKILL.md +1 -0
- package/.agents/skills/scrum-tdd/SKILL.md +45 -0
- package/README.md +21 -2
- package/assets/board/200.html +1 -1
- package/assets/board/404.html +1 -1
- package/assets/board/_nuxt/{RJtjdZeG.js → 13F3FZJq.js} +1 -1
- package/assets/board/_nuxt/{DsNkyZPc.js → 4G46xON2.js} +1 -1
- package/assets/board/_nuxt/7DnHvJyr.js +1 -0
- package/assets/board/_nuxt/B8d-LQbt.js +13 -0
- package/assets/board/_nuxt/{CNbS93H9.js → BGRxZnwm.js} +1 -1
- package/assets/board/_nuxt/BMRYIH0I.js +1 -0
- package/assets/board/_nuxt/Bi9Axj3V.js +1 -0
- package/assets/board/_nuxt/Bk5o5EMW.js +1 -0
- package/assets/board/_nuxt/BsNk4K6P.js +1 -0
- package/assets/board/_nuxt/BtzBJuQU.js +1 -0
- package/assets/board/_nuxt/{DwcwzwSx.js → BvwhGSdZ.js} +1 -1
- package/assets/board/_nuxt/{Bh7eUS6e.js → C4MZsmn0.js} +1 -1
- package/assets/board/_nuxt/{DJUwhJ8T.js → C7AVymkF.js} +1 -1
- package/assets/board/_nuxt/{DrbU50Zd.js → C7wdFLdw.js} +1 -1
- package/assets/board/_nuxt/{CUnX_QKi.js → C8xxmt66.js} +1 -1
- package/assets/board/_nuxt/{CD0uJuyA.js → CB66hjP7.js} +1 -1
- package/assets/board/_nuxt/{D8Bpf7sE.js → CNCQ_RRC.js} +1 -1
- package/assets/board/_nuxt/CSF_x8S0.js +1 -0
- package/assets/board/_nuxt/CcCIS_4Q.js +1 -0
- package/assets/board/_nuxt/{Bu60uYgs.js → CnWxhsmi.js} +1 -1
- package/assets/board/_nuxt/{DmKZi-Wo.js → Cp9-r9Yz.js} +1 -1
- package/assets/board/_nuxt/CqT7Crsj.js +95 -0
- package/assets/board/_nuxt/CqhzGRpQ.js +1 -0
- package/assets/board/_nuxt/{D1Yxjnz9.js → CurAl_-I.js} +1 -1
- package/assets/board/_nuxt/{CjRYYbsC.js → D2zrOcWn.js} +1 -1
- package/assets/board/_nuxt/{CHZ_IHOa.js → DCRsKQUZ.js} +1 -1
- package/assets/board/_nuxt/{obNw9aRV.js → DDF25zwT.js} +1 -1
- package/assets/board/_nuxt/DIAPFfZA.js +2 -0
- package/assets/board/_nuxt/DMZvQhvU.js +1 -0
- package/assets/board/_nuxt/{BNKWWG8o.js → DNJ5OliG.js} +1 -1
- package/assets/board/_nuxt/{CvFE1CeN.js → DPeEWyPC.js} +1 -1
- package/assets/board/_nuxt/DZXukN7r.js +6 -0
- package/assets/board/_nuxt/{CyAQx5wv.js → D_dkfQp-.js} +1 -1
- package/assets/board/_nuxt/{BSov4ehT.js → Dp5MbiLe.js} +1 -1
- package/assets/board/_nuxt/FxbXzpZ6.js +1 -0
- package/assets/board/_nuxt/{DaqxYsbV.js → HUproyl7.js} +1 -1
- package/assets/board/_nuxt/{C9MiPNdJ.js → J9NS0_M_.js} +1 -1
- package/assets/board/_nuxt/builds/latest.json +1 -1
- package/assets/board/_nuxt/builds/meta/ceebd758-b616-48d8-872b-0de05659de19.json +1 -0
- package/assets/board/_nuxt/burndown.Do6IbM6o.css +1 -0
- package/assets/board/_nuxt/{KhBLkIKl.js → dI2CahwK.js} +1 -1
- package/assets/board/_nuxt/entry.DUA8YVRM.css +2 -0
- package/assets/board/_nuxt/epics.Dmessplu.css +1 -0
- package/assets/board/_nuxt/gantt.Dmp00GUo.css +1 -0
- package/assets/board/_nuxt/last-change.CaSxA-Z0.css +1 -0
- package/assets/board/_nuxt/milestones.U0xKCsEo.css +1 -0
- package/assets/board/_nuxt/pages.Dbj2IVk8.css +1 -0
- package/assets/board/_nuxt/{BuuAjxsV.js → rV_oonhV.js} +1 -1
- package/assets/board/_nuxt/x-PrcVk4.js +1 -0
- package/assets/board/burndown/index.html +1 -1
- package/assets/board/epics/index.html +1 -1
- package/assets/board/gantt/index.html +1 -1
- package/assets/board/index.html +1 -1
- package/assets/board/last-change/index.html +1 -0
- package/assets/board/milestones/index.html +1 -1
- package/bin/scrum-skills.mjs +3 -0
- package/package.json +41 -40
- package/templates/AGENTS.md +15 -2
- package/tools/last-change.mjs +326 -0
- package/tools/projects.mjs +66 -12
- package/tools/serve.mjs +1 -1
- package/tools/validate.mjs +124 -0
- package/assets/board/_nuxt/0VBLkWnu.js +0 -1
- package/assets/board/_nuxt/BTxVIV74.js +0 -1
- package/assets/board/_nuxt/C-GYjxwr.js +0 -13
- package/assets/board/_nuxt/CDL4GvLz.js +0 -1
- package/assets/board/_nuxt/CeiBZIn1.js +0 -95
- package/assets/board/_nuxt/Cfk_R787.js +0 -1
- package/assets/board/_nuxt/DhhR1iR4.js +0 -1
- package/assets/board/_nuxt/HrhQecsY.js +0 -6
- package/assets/board/_nuxt/RM4VQc4e.js +0 -1
- package/assets/board/_nuxt/builds/meta/ecbff4a6-6538-49b0-9844-64f03ebd103a.json +0 -1
- package/assets/board/_nuxt/burndown.BCLMmigw.css +0 -1
- package/assets/board/_nuxt/entry.nk2xQ-sa.css +0 -2
- package/assets/board/_nuxt/epics.B4-eK1Py.css +0 -1
- package/assets/board/_nuxt/fFGyRlCx.js +0 -1
- package/assets/board/_nuxt/gantt.DATOqoZf.css +0 -1
- package/assets/board/_nuxt/l05SqxhY.js +0 -1
- package/assets/board/_nuxt/milestones.z-UuT44X.css +0 -1
- package/assets/board/_nuxt/pages.Bi6nErnd.css +0 -1
- package/assets/board/_nuxt/uGmbQYdY.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-4bf98db6]{grid-template-columns:repeat(auto-fill,minmax(470px,1fr));gap:14px;display:grid}.epic[data-v-4bf98db6]{border-radius:var(--r-xl);overflow:hidden}.hero[data-v-4bf98db6]{border-bottom:1px solid var(--line);background:linear-gradient(165deg,#f4f0fe,#faf8ff 70%,#fff);padding:15px 17px 14px}.hero-top[data-v-4bf98db6]{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.hero-pct[data-v-4bf98db6]{letter-spacing:-.04em;color:var(--violet-ink);margin-left:auto;font-size:26px;font-weight:670;line-height:1}.hero-pct small[data-v-4bf98db6]{letter-spacing:0;margin-left:1px;font-size:12px;font-weight:620}.epic-title[data-v-4bf98db6]{letter-spacing:-.02em;margin:10px 0 4px;font-size:16px;font-weight:660}.goal[data-v-4bf98db6]{color:var(--ink-3);margin-bottom:11px;font-size:12.2px;line-height:1.55}.hero-bar>i[data-v-4bf98db6]{background:linear-gradient(90deg,#8a63f7,#b9a5f5)}.hero-foot[data-v-4bf98db6]{color:var(--ink-3);flex-wrap:wrap;align-items:center;gap:7px;margin-top:8px;font-size:11.2px;display:flex}.hero-foot b[data-v-4bf98db6]{color:var(--ink);font-weight:660}.sep[data-v-4bf98db6]{background:var(--line-2);width:1px;height:10px}.bd[data-v-4bf98db6]{padding:14px 17px 15px}.kr[data-v-4bf98db6]{margin-top:9px}.kr-top[data-v-4bf98db6]{align-items:baseline;gap:8px;margin-bottom:5px;font-size:12.2px;display:flex}.kr-text[data-v-4bf98db6]{flex:1;min-width:0;line-height:1.45}.kr-num[data-v-4bf98db6]{color:var(--ink-3);white-space:nowrap;font-size:11px}.stories-hd[data-v-4bf98db6]{border-top:1px dashed var(--line-2);margin-top:15px;padding-top:12px}.stlist[data-v-4bf98db6]{gap:1px;margin:7px 0 0;padding:0;list-style:none;display:grid}.strow[data-v-4bf98db6]{border-radius:9px;align-items:center;gap:6px;min-width:0;margin:0 -6px;padding:5px 6px;font-size:12.2px;transition:background .14s;display:flex}.strow[data-v-4bf98db6]:hover{background:var(--sunken)}.strow:hover .st-title[data-v-4bf98db6]{color:var(--violet-ink)}.sdot[data-v-4bf98db6]{border-radius:999px;flex:none;width:6px;height:6px}.st-id[data-v-4bf98db6]{color:var(--ink-4);font-size:10.4px}.st-title[data-v-4bf98db6]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.st-pts[data-v-4bf98db6],.st-state[data-v-4bf98db6]{white-space:nowrap;font-size:10.6px}.st-chev[data-v-4bf98db6]{width:13px;height:13px;color:var(--ink-4);flex:none}.empty[data-v-4bf98db6]{margin-top:6px;font-size:11.6px}@media (width<=620px){.grid[data-v-4bf98db6]{grid-template-columns:1fr}.st-state[data-v-4bf98db6]{display:none}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.gantt[data-v-719eb5d7]{border-radius:var(--r-xl);margin-bottom:14px;overflow:hidden}.gantt-hd[data-v-719eb5d7]{border-bottom:1px solid var(--line);align-items:center;gap:14px;padding:12px 16px}.gantt-hd[data-v-719eb5d7],.legend[data-v-719eb5d7]{flex-wrap:wrap;display:flex}.legend[data-v-719eb5d7]{color:var(--ink-3);gap:13px;margin-left:auto;font-size:11.2px}.lg[data-v-719eb5d7]{align-items:center;gap:5px;display:inline-flex}.sw[data-v-719eb5d7]{border-radius:3px;width:15px;height:8px;display:inline-block}.sw.plan[data-v-719eb5d7]{background:#ece4fd;border:1px solid #d9cbfa}.sw.real[data-v-719eb5d7]{background:var(--grad)}.sw.ms[data-v-719eb5d7]{background:#8a63f7}.sw.ms[data-v-719eb5d7],.sw.mvp[data-v-719eb5d7]{border-radius:2px;width:8px;height:8px;transform:rotate(45deg)}.sw.mvp[data-v-719eb5d7]{background:#a9dd63}.sw.today[data-v-719eb5d7]{background:var(--rose);border-radius:2px;width:2px;height:12px}.ticks[data-v-719eb5d7]{border-bottom:1px solid var(--line);height:32px;margin:0 22px 0 300px;position:relative}.tick[data-v-719eb5d7]{color:var(--ink-4);white-space:nowrap;font-size:9.6px;top:10px;transform:translate(-50%)}.tick[data-v-719eb5d7],.today-flag[data-v-719eb5d7],.today-line[data-v-719eb5d7]{position:absolute}.today-line[data-v-719eb5d7]{pointer-events:none;background:#cf475952;width:1.5px;height:1200px;top:22px}.today-flag[data-v-719eb5d7]{color:#a5382f;white-space:nowrap;background:#fdeae7;border:1px solid #f5cfc8;border-radius:999px;padding:0 7px;font-size:9.6px;font-weight:620;line-height:16px;top:3px;transform:translate(-50%)}.track[data-v-719eb5d7]{border-bottom:1px solid var(--line)}.track[data-v-719eb5d7]:last-child{border-bottom:0}.track-hd[data-v-719eb5d7]{color:var(--ink-3);align-items:center;gap:7px;padding:7px 16px 4px;font-size:11.2px;font-weight:650;display:flex}.grow-row[data-v-719eb5d7]{border-radius:7px;grid-template-columns:300px 1fr;align-items:center;min-height:29px;transition:background .14s;display:grid}.grow-row[data-v-719eb5d7]:hover{background:var(--sunken-2)}.label[data-v-719eb5d7]{align-items:center;gap:6px;min-width:0;padding:0 10px 0 16px;display:flex}.lbl-txt[data-v-719eb5d7]{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:12px;overflow:hidden}.lbl-txt[data-v-719eb5d7]:hover,.link[data-v-719eb5d7]:hover{color:var(--violet-ink)}.sdot[data-v-719eb5d7]{border-radius:999px;flex:none;width:6px;height:6px}.pts[data-v-719eb5d7]{white-space:nowrap;font-size:10px}.lane[data-v-719eb5d7]{height:22px;margin-right:16px;position:relative}.grid-lines span[data-v-719eb5d7]{background:#f2f1ec;width:1px;position:absolute;top:0;bottom:0}.band[data-v-719eb5d7]{background:#f7f4ff;border:1px dashed #ddd2fb;height:7px;top:8px}.band[data-v-719eb5d7],.g-plan[data-v-719eb5d7]{border-radius:999px;position:absolute}.g-plan[data-v-719eb5d7]{background:#ece4fd;border:1px solid #d9cbfa;height:11px;top:4px}.g-real[data-v-719eb5d7]{background:var(--grad);border-radius:999px;height:7px;top:12px;box-shadow:0 3px 8px -4px #6d4ff0b3}.diamond[data-v-719eb5d7],.g-real[data-v-719eb5d7]{position:absolute}.diamond[data-v-719eb5d7]{cursor:help;background:#8a63f7;border-radius:2px;width:9px;height:9px;margin-left:-4.5px;top:7px;transform:rotate(45deg)}.diamond.mvp[data-v-719eb5d7]{background:#a9dd63;box-shadow:0 0 0 3px #a9dd6347}.extra[data-v-719eb5d7]{grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:12px;display:grid}.list[data-v-719eb5d7]{gap:7px;margin:0;padding:0;font-size:12px;list-style:none;display:grid}.list li[data-v-719eb5d7]{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.link[data-v-719eb5d7]{font-weight:640}.dep-txt[data-v-719eb5d7]{text-overflow:ellipsis;white-space:nowrap;max-width:40ch;overflow:hidden}@media (width<=900px){.grow-row[data-v-719eb5d7]{grid-template-columns:180px 1fr}.ticks[data-v-719eb5d7]{margin-left:180px}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.lc[data-v-dbac9077]{gap:14px;display:grid}.lc-rule[data-v-dbac9077]{border:1px solid var(--line);box-shadow:var(--shadow-1);background:linear-gradient(#fbfaff,#fff);border-radius:14px;align-items:center;gap:10px;margin-bottom:14px;padding:10px 14px;display:flex}.rule-ic[data-v-dbac9077]{border:1px solid var(--violet-line);background:var(--violet-soft);width:26px;height:26px;color:var(--violet-ink);border-radius:9px;flex:none;place-items:center;display:grid}.rule-svg[data-v-dbac9077]{width:14px;height:14px}.rule-text[data-v-dbac9077]{min-width:0;color:var(--ink-2);flex:1;font-size:11.6px;line-height:1.62}.rule-text b[data-v-dbac9077]{color:var(--ink);font-weight:660}.rule-state[data-v-dbac9077]{border-left:1px solid var(--line);flex:none;justify-items:end;gap:1px;padding-left:12px;display:grid}.rule-state b[data-v-dbac9077]{color:var(--ink-2);font-size:10.8px;font-weight:680}.rule-state i[data-v-dbac9077]{color:var(--ink-4);font-size:10.2px;font-style:normal}.is-ok .rule-ic[data-v-dbac9077]{color:#4f6f24;background:#f0fbdf;border-color:#dcf0bb}.is-ok .rule-state b[data-v-dbac9077]{color:#4b7a2c}.is-warn .rule-ic[data-v-dbac9077]{color:#8a6116;background:#fdf4e2;border-color:#f3e2b8}.is-warn .rule-state b[data-v-dbac9077]{color:#8a6116}.sec[data-v-dbac9077]{border-radius:20px;overflow:hidden}.two[data-v-dbac9077]{flex-wrap:wrap;align-items:stretch;gap:14px;display:flex}.two[data-v-dbac9077]>*{flex:336px;min-width:0}.s-hd[data-v-dbac9077]{align-items:center;gap:9px;padding:13px 18px 12px;display:flex}.s-hd.solo[data-v-dbac9077]{padding:2px 2px 0}.s-ic[data-v-dbac9077]{border:1px solid var(--violet-line);background:var(--violet-soft);width:26px;height:26px;color:var(--violet-ink);border-radius:9px;flex:none;place-items:center;display:grid}.s-ic.tone-mint[data-v-dbac9077]{color:#4f6f24;background:#f0fbdf;border-color:#dcf0bb}.s-ic.tone-amber[data-v-dbac9077]{color:#8a6116;background:#fdf4e2;border-color:#f3e2b8}.s-ic.tone-sky[data-v-dbac9077]{color:#2c5f96;background:#eef5fd;border-color:#d7e6f9}.s-svg[data-v-dbac9077]{width:14px;height:14px}.s-title[data-v-dbac9077]{letter-spacing:-.012em;white-space:nowrap;font-size:14px;font-weight:650}.s-count[data-v-dbac9077]{border:1px solid var(--line-2);background:var(--sunken);color:var(--ink-3);border-radius:999px;flex:none;padding:0 6px;font-size:10px;font-weight:660;line-height:16px}.s-hint[data-v-dbac9077]{color:var(--ink-4);text-align:right;margin-left:auto;font-size:11px}.sec-bd[data-v-dbac9077],.sec-empty[data-v-dbac9077]{padding:0 18px 16px}.sec-empty[data-v-dbac9077]{font-size:12px}.micro[data-v-dbac9077]{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-size:9.6px;font-weight:660}.lc-hero[data-v-dbac9077]{isolation:isolate;background:radial-gradient(120% 150% at 0 0,#fdfbff,#fff0 52%),radial-gradient(100% 140% at 100% 110%,#ece1ff,#ece1ff00 60%),linear-gradient(152deg,#f8f4ff,#f1eaff 64%,#faf7ff);border:1px solid #e6dcfb;border-radius:24px;align-items:center;gap:26px;padding:20px 22px;display:flex;position:relative;overflow:hidden}.lc-hero[data-v-dbac9077]:after{content:"";filter:blur(6px);z-index:-1;background:radial-gradient(circle,#8b68f229,#8b68f200 70%);border-radius:50%;width:240px;height:240px;position:absolute;bottom:-90px;right:-70px}.hero-body[data-v-dbac9077]{flex:1;min-width:0}.hero-kicker[data-v-dbac9077]{letter-spacing:.1em;text-transform:uppercase;color:#7a63b8;align-items:center;gap:8px;font-size:10px;font-weight:680;display:flex}.k-dot[data-v-dbac9077]{background:var(--violet);border-radius:999px;width:6px;height:6px;box-shadow:0 0 0 3px #6d4ff024}.k-sep[data-v-dbac9077]{background:#dbd0f6;width:1px;height:10px}.k-date[data-v-dbac9077]{text-transform:none;color:#6f5aa8;font-size:10.6px;font-weight:600}.k-date[data-v-dbac9077],.k-time[data-v-dbac9077]{letter-spacing:.02em}.k-time[data-v-dbac9077]{color:var(--ink-3);font-variant-numeric:tabular-nums;align-items:center;gap:5px;font-size:10.4px;font-weight:620;display:inline-flex}.k-time[data-v-dbac9077]:before{content:"";background:#c9bce6;border-radius:999px;width:3px;height:3px}.k-today[data-v-dbac9077]{border:1px solid var(--violet-line);letter-spacing:.06em;color:var(--violet-ink);background:#fff}.k-merged[data-v-dbac9077],.k-today[data-v-dbac9077]{border-radius:999px;padding:0 6px;font-size:9.4px;line-height:15px}.k-merged[data-v-dbac9077]{color:#8a6116;letter-spacing:.03em;text-transform:none;cursor:help;background:#fdf4e2;border:1px solid #f3e2b8}.hero-title[data-v-dbac9077]{letter-spacing:-.026em;color:#241b3f;margin:9px 0 0;font-size:21px;font-weight:665;line-height:1.34}.hero-sum[data-v-dbac9077]{color:#574c72;max-width:92ch;margin-top:7px;font-size:12.8px;line-height:1.68}.hero-meta[data-v-dbac9077]{color:#6b5f85;flex-wrap:wrap;align-items:center;gap:11px;margin-top:13px;font-size:11.4px;display:flex}.hero-meta b[data-v-dbac9077]{color:#2c2246;margin-right:2px;font-weight:690}.meta-sep[data-v-dbac9077]{background:#c3b4e2;border-radius:999px;width:3px;height:3px}.hero-aside[data-v-dbac9077]{flex:none;justify-items:center;display:grid}.ring[data-v-dbac9077]{--pct:0;background:conic-gradient(from -90deg,#7f5cf2 calc(var(--pct) * 1%),#e7dffa 0);border-radius:50%;place-items:center;width:98px;height:98px;display:grid;box-shadow:0 10px 26px -18px #5836ba8c}.ring.warn[data-v-dbac9077]{background:conic-gradient(from -90deg,#dfa437 calc(var(--pct) * 1%),#f4e8d2 0)}.ring-in[data-v-dbac9077]{text-align:center;background:#fff;border-radius:50%;place-content:center;gap:1px;width:78px;height:78px;display:grid}.ring-in b[data-v-dbac9077]{letter-spacing:-.03em;color:#2a1f47;font-size:17px;font-weight:680;line-height:1.15}.ring-in b small[data-v-dbac9077]{letter-spacing:0;color:var(--ink-4);font-size:10.5px;font-weight:600}.ring-in span[data-v-dbac9077]{letter-spacing:.04em;color:var(--ink-3);white-space:nowrap;font-size:9.2px}.tbl-wrap[data-v-dbac9077]{padding:0 8px 8px;overflow-x:auto}.lc-tbl[data-v-dbac9077]{min-width:640px}.lc-tbl .c-ent[data-v-dbac9077]{width:246px}.lc-tbl .c-act[data-v-dbac9077]{width:92px}.lc-tbl .c-file[data-v-dbac9077]{width:218px}.lc-tbl thead th[data-v-dbac9077]{border-bottom:1px solid var(--line);letter-spacing:.1em;padding:6px 12px 8px;font-size:9.4px;font-weight:660}.lc-tbl tbody tr[data-v-dbac9077]{cursor:default}.lc-tbl tbody td[data-v-dbac9077]{border-top:0;border-bottom:1px solid var(--line);vertical-align:top;padding:11px 12px 12px}.lc-tbl tbody tr:last-child td[data-v-dbac9077]{border-bottom:0}.lc-tbl tbody tr:hover td[data-v-dbac9077]{background:#fbfaff}.ent-top[data-v-dbac9077]{align-items:center;gap:6px;display:flex}.kind[data-v-dbac9077]{letter-spacing:.03em;border-radius:5px;flex:none;padding:0 5px;font-size:9.4px;font-weight:680;line-height:15px}.kind-story[data-v-dbac9077]{color:#5433cf;background:#efe9fe}.kind-task[data-v-dbac9077]{color:#6b6f77;background:#f1f1ee}.ent-id[data-v-dbac9077]{color:#6d5aa8;white-space:nowrap;font-size:10.6px}.ent-id[data-v-dbac9077]:hover{color:var(--violet-ink);text-underline-offset:2px;text-decoration:underline}.ent-title[data-v-dbac9077]{color:var(--ink);margin-top:4px;font-size:12.5px;font-weight:590;line-height:1.5}.act[data-v-dbac9077]{white-space:nowrap;border-radius:999px;padding:0 7px;font-size:10px;font-weight:660;line-height:17px;display:inline-block}.act-added[data-v-dbac9077]{color:#46742a;background:#e9f8dd}.act-updated[data-v-dbac9077]{color:#2a5f9e;background:#e8f1fd}.act-removed[data-v-dbac9077]{color:#a83a32;background:#fdeae9}.flow[data-v-dbac9077]{color:var(--ink-3);flex-wrap:wrap;align-items:center;gap:3px;margin-top:5px;font-size:10px;line-height:1.4;display:flex}.fchip[data-v-dbac9077],.fl[data-v-dbac9077],.u-url[data-v-dbac9077]{white-space:nowrap}.flow i[data-v-dbac9077]{color:var(--ink-4);font-style:normal}.cell-note[data-v-dbac9077]{color:var(--ink-2);font-size:12.1px;line-height:1.62}.chips[data-v-dbac9077]{flex-wrap:wrap;gap:4px;display:flex}.fchip[data-v-dbac9077]{border:1px solid var(--line-2);background:var(--sunken);max-width:100%;color:var(--ink-2);text-overflow:ellipsis;border-radius:5px;padding:0 5px;font-size:9.9px;line-height:16px;overflow:hidden}.lc-extras[data-v-dbac9077]{display:grid}.x-item[data-v-dbac9077]{border-top:1px dashed var(--line-2);gap:9px;padding:11px 0;display:flex}.x-item[data-v-dbac9077]:first-child{border-top:0;padding-top:0}.x-mark[data-v-dbac9077]{background:#b9a5f5;border-radius:999px;flex:none;width:5px;height:5px;margin-top:7px;box-shadow:0 0 0 3px #b9a5f529}.step-bd[data-v-dbac9077],.u-link[data-v-dbac9077],.v-body[data-v-dbac9077],.x-body[data-v-dbac9077]{min-width:0}.x-title[data-v-dbac9077]{font-size:12.4px;font-weight:600;line-height:1.55}.x-detail[data-v-dbac9077]{color:var(--ink-2);margin-top:3px;font-size:11.8px;line-height:1.62}.x-files[data-v-dbac9077]{margin-top:6px}.lc-checks[data-v-dbac9077]{display:grid}.v-item[data-v-dbac9077]{border-top:1px dashed var(--line-2);align-items:flex-start;gap:9px;padding:10px 0;display:flex}.v-item[data-v-dbac9077]:first-child{border-top:0;padding-top:0}.v-ic[data-v-dbac9077]{border-radius:7px;flex:none;place-items:center;width:20px;height:20px;margin-top:1px;display:grid}.u-go[data-v-dbac9077],.v-svg[data-v-dbac9077]{width:12px;height:12px}.v-ic.v-pass[data-v-dbac9077]{color:#4b7a2c;background:#e9f8dd}.v-ic.v-fail[data-v-dbac9077]{color:#ab3a32;background:#fdeae9}.v-ic.v-partial[data-v-dbac9077]{color:#8a6116;background:#fdf3dd}.v-ic.v-skipped[data-v-dbac9077]{color:#82868e;background:#f1f1ee}.v-body[data-v-dbac9077]{flex:1}.v-what[data-v-dbac9077]{word-break:break-word;font-size:12.2px;font-weight:590;line-height:1.5}.v-detail[data-v-dbac9077]{color:var(--ink-3);margin-top:2px;font-size:11.4px;line-height:1.55}.v-res[data-v-dbac9077]{letter-spacing:.02em;flex:none;margin-top:2px;font-size:10.2px;font-weight:660}.v-res.v-pass[data-v-dbac9077]{color:#4b7a2c}.v-res.v-fail[data-v-dbac9077]{color:#ab3a32}.v-res.v-partial[data-v-dbac9077]{color:#8a6116}.v-res.v-skipped[data-v-dbac9077]{color:#82868e}.acc-grid[data-v-dbac9077]{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));align-items:start;gap:16px 22px;display:grid}.acc-col[data-v-dbac9077]{align-content:start;gap:9px;display:grid}.a-item[data-v-dbac9077],.u-item[data-v-dbac9077]{border-radius:var(--r-md);border:1px solid var(--line);background:var(--sunken-2);padding:10px 12px;transition:border-color .14s,background .14s}.a-item[data-v-dbac9077]:hover,.u-item[data-v-dbac9077]:hover{border-color:var(--line-3);background:#fff}.a-head[data-v-dbac9077],.u-head[data-v-dbac9077]{align-items:center;gap:6px;display:flex}.u-link[data-v-dbac9077]{align-items:center;gap:4px;display:inline-flex}.u-label[data-v-dbac9077]{font-size:12.2px;font-weight:640}.u-go[data-v-dbac9077]{color:var(--violet);flex:none;transition:transform .14s}.u-link:hover .u-go[data-v-dbac9077]{transform:translate(1px,-1px)}.u-link:hover .u-label[data-v-dbac9077]{color:var(--violet-ink)}.u-url[data-v-dbac9077]{color:var(--sky);text-overflow:ellipsis;margin-top:3px;font-size:11.3px;overflow:hidden}.u-note[data-v-dbac9077]{color:var(--ink-3);margin-top:3px;font-size:10.9px;line-height:1.5}.a-role[data-v-dbac9077]{border:1px solid var(--violet-line);background:var(--violet-soft);color:var(--violet-ink);letter-spacing:.03em;border-radius:999px;padding:0 6px;font-size:9.6px;font-weight:680;line-height:16px}.a-user[data-v-dbac9077]{color:var(--ink);font-size:11.8px}.a-line[data-v-dbac9077]{align-items:center;gap:8px;margin-top:6px;display:flex}.a-key[data-v-dbac9077]{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-size:9.4px;font-weight:660}.a-pass[data-v-dbac9077]{border:1px solid var(--line-2);color:var(--ink);background:#fff;border-radius:6px;padding:1px 7px;font-size:11.4px}.a-none[data-v-dbac9077]{font-size:11.2px}.a-note[data-v-dbac9077]{margin-top:5px;font-size:10.9px}.a-note[data-v-dbac9077],.cpy[data-v-dbac9077]{color:var(--ink-3)}.cpy[data-v-dbac9077]{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;flex:none;align-items:center;gap:4px;height:23px;margin-left:auto;padding:0 8px;font-size:10.6px;font-weight:600;transition:background .14s,border-color .14s,color .14s;display:inline-flex}.cpy[data-v-dbac9077]:hover{border-color:var(--line-2);color:var(--ink);background:#fff}.cpy.ok[data-v-dbac9077]{color:#47762b;background:#e9f8dd;border-color:#d5efc2}.cpy-ic[data-v-dbac9077]{width:11px;height:11px}.steps[data-v-dbac9077]{counter-reset:st;gap:13px;margin:0;padding:2px 18px 16px;list-style:none;display:grid}.steps>li[data-v-dbac9077]{counter-increment:st;padding-left:33px;position:relative}.steps>li[data-v-dbac9077]:before{content:counter(st);border:1px solid var(--violet-line);width:22px;height:22px;color:var(--violet-ink);background:#fff;border-radius:999px;place-items:center;font-size:10.4px;font-weight:700;display:grid;position:absolute;top:0;left:0}.steps>li[data-v-dbac9077]:not(:last-child):after{content:"";background:linear-gradient(#ded2fb,#efeaf9);width:1px;position:absolute;top:26px;bottom:-13px;left:10.5px}.step-text[data-v-dbac9077]{padding-top:1px;font-size:12.5px;font-weight:590;line-height:1.5}.cmd-row[data-v-dbac9077]{flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;display:flex}.cmd[data-v-dbac9077]{color:#f4f3ef;white-space:pre-wrap;word-break:break-all;background:#1b1c20;border-radius:7px;padding:4px 9px;font-size:11.1px;line-height:1.5}.cmd-row .cpy[data-v-dbac9077]{margin-left:0}.step-note[data-v-dbac9077]{color:var(--ink-3);margin-top:4px;font-size:11.2px;line-height:1.55}.lc-sc-sec[data-v-dbac9077]{gap:11px;display:grid}.lc-sc-grid[data-v-dbac9077]{flex-wrap:wrap;align-items:stretch;gap:12px;display:flex}.lc-sc-grid[data-v-dbac9077]>*{flex:330px;min-width:0}.sc[data-v-dbac9077]{border-radius:var(--r-lg);border:1px solid var(--line);box-shadow:var(--shadow-1);background:#fff;flex-direction:column;transition:transform .16s,box-shadow .16s,border-color .16s;display:flex;overflow:hidden}.sc[data-v-dbac9077]:hover{border-color:#e3d9f8;transform:translateY(-1px);box-shadow:0 16px 34px -26px #231a3d73}.sc-hd[data-v-dbac9077]{align-items:flex-start;gap:8px;padding:12px 14px 9px;display:flex}.sc-id[data-v-dbac9077]{border:1px solid var(--line-2);background:var(--sunken);color:var(--ink-3);border-radius:5px;flex:none;margin-top:1px;padding:0 5px;font-size:9.6px;font-weight:660;line-height:16px}.sc-title[data-v-dbac9077]{letter-spacing:-.008em;font-size:12.9px;font-weight:630;line-height:1.45}.sc-body[data-v-dbac9077]{padding:0 14px 10px}.lc-sc-steps[data-v-dbac9077]{counter-reset:ss;gap:5px;margin:6px 0 0;padding:0;list-style:none;display:grid}.lc-sc-steps li[data-v-dbac9077]{counter-increment:ss;color:var(--ink-2);padding-left:19px;font-size:12px;line-height:1.55;position:relative}.lc-sc-steps li[data-v-dbac9077]:before{content:counter(ss) ".";color:#a58cf8;font-variant-numeric:tabular-nums;font-size:10.6px;font-weight:680;position:absolute;top:0;left:0}.sc-acc[data-v-dbac9077]{border-top:1px dashed var(--line-2);background:linear-gradient(#fbfdf6,#fff);margin-top:auto;padding:10px 14px 12px}.sc-acc-h[data-v-dbac9077]{letter-spacing:.1em;text-transform:uppercase;color:#6b7a45;align-items:center;gap:4px;font-size:9.4px;font-weight:700;display:flex}.sc-acc-ic[data-v-dbac9077]{flex:none;width:11px;height:11px}.sc-acc-t[data-v-dbac9077]{color:#33401c;margin-top:4px;font-size:12px;line-height:1.62}.sc-foot[data-v-dbac9077]{color:var(--ink-4);flex-wrap:wrap;align-items:center;gap:10px;margin-top:7px;font-size:10.6px;display:flex}.sc-ids[data-v-dbac9077]{gap:6px;display:flex}.lc-notes[data-v-dbac9077]{gap:8px;margin:0;padding:0;list-style:none;display:grid}.lc-notes li[data-v-dbac9077]{color:var(--ink-2);padding-left:13px;font-size:12.1px;line-height:1.66;position:relative}.lc-notes li[data-v-dbac9077]:before{content:"";background:#c3b2f7;border-radius:999px;width:4.5px;height:4.5px;position:absolute;top:7.5px;left:1px}.lc-notes.warn li[data-v-dbac9077]:before{background:#e8bb5e}.sec-warn .s-ic[data-v-dbac9077]{color:#8a6116;background:#fdf4e2;border-color:#f3e2b8}.lc-empty[data-v-dbac9077]{text-align:center;border-radius:24px;justify-items:center;gap:9px;padding:52px 24px 46px;display:grid}.em-ic[data-v-dbac9077]{background:var(--grad-lilac);width:48px;height:48px;color:var(--violet-ink);border:1px solid #dbcdfb;border-radius:16px;place-items:center;display:grid}.em-svg[data-v-dbac9077]{width:21px;height:21px}.em-title[data-v-dbac9077]{letter-spacing:-.02em;margin-top:2px;font-size:16px;font-weight:660}.em-sub[data-v-dbac9077]{max-width:54ch;font-size:12.6px;line-height:1.7}.em-path[data-v-dbac9077],.em-sub[data-v-dbac9077]{color:var(--ink-2)}.em-path[data-v-dbac9077]{border:1px dashed var(--line-3);background:var(--sunken);border-radius:999px;margin-top:3px;padding:4px 12px;font-size:11.4px}.em-note[data-v-dbac9077]{color:var(--ink-4);font-size:11px}.rule-btn[data-v-dbac9077]{border:1px solid var(--line-2);height:24px;color:var(--ink-2);cursor:pointer;background:#fff;border-radius:999px;flex:none;align-items:center;gap:4px;padding:0 9px;font-size:10.8px;font-weight:620;transition:border-color .14s,color .14s,background .14s;display:inline-flex}.rule-btn[data-v-dbac9077]:hover{border-color:var(--violet-line);background:var(--violet-soft);color:var(--violet-ink)}.rule-btn i[data-v-dbac9077]{background:var(--sunken);color:var(--ink-3);border-radius:999px;padding:0 4px;font-size:9.4px;font-style:normal;line-height:15px}.hist-badge-ic[data-v-dbac9077],.rule-btn-ic[data-v-dbac9077]{width:12px;height:12px}.lc-hist-bar[data-v-dbac9077]{box-shadow:var(--shadow-1);background:linear-gradient(#faf7ff,#fff);border-radius:14px;flex-wrap:wrap;gap:10px;margin-bottom:14px;padding:9px 12px;display:flex}.hist-badge[data-v-dbac9077],.lc-hist-bar[data-v-dbac9077]{border:1px solid var(--violet-line);align-items:center}.hist-badge[data-v-dbac9077]{background:var(--violet-soft);color:var(--violet-ink);border-radius:999px;flex:none;gap:4px;padding:1px 8px;font-size:10.4px;font-weight:680;line-height:18px;display:inline-flex}.hist-readonly[data-v-dbac9077]{color:var(--ink-4);flex:none;font-size:10.2px}.lc-hist-tabs[data-v-dbac9077]{flex:1;align-items:center;gap:4px;min-width:0;padding:1px 0;display:flex;overflow-x:auto}.lc-hist-tabs[data-v-dbac9077]::-webkit-scrollbar{height:3px}.lc-hist-tabs[data-v-dbac9077]::-webkit-scrollbar-thumb{background:#dcd8ef;border-radius:999px}.hist-tab[data-v-dbac9077]{border:1px solid var(--line-2);height:24px;color:var(--ink-2);cursor:pointer;white-space:nowrap;background:#fff;border-radius:999px;flex:none;align-items:center;gap:4px;padding:0 9px;font-size:10.6px;font-weight:620;transition:background .14s,border-color .14s,color .14s;display:inline-flex}.hist-tab[data-v-dbac9077]:hover{border-color:var(--violet-line);color:var(--violet-ink)}.hist-tab.on[data-v-dbac9077]{border-color:var(--violet);background:var(--violet-soft);color:var(--violet-ink);font-weight:680}.hist-tab i[data-v-dbac9077]{color:var(--ink-4);font-size:9.2px;font-style:normal;font-weight:560}.hist-tab.on i[data-v-dbac9077]{color:#7a63b8}.lc-hist-mask[data-v-dbac9077]{z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#14121e6b;place-items:center;padding:24px;animation:.14s lc-fade-dbac9077;display:grid;position:fixed;inset:0}.lc-hist[data-v-dbac9077]{border:1px solid var(--line);background:#fff;border-radius:20px;flex-direction:column;width:min(680px,100%);max-height:calc(min(76vh,720px));animation:.16s lc-pop-dbac9077;display:flex;overflow:hidden;box-shadow:0 40px 80px -40px #14121e8c}@keyframes lc-fade-dbac9077{0%{opacity:0}to{opacity:1}}@keyframes lc-pop-dbac9077{0%{opacity:0;transform:translateY(6px)scale(.99)}to{opacity:1;transform:none}}.lc-hist-hd[data-v-dbac9077]{border-bottom:1px solid var(--line);align-items:flex-start;gap:12px;padding:16px 18px 12px;display:flex}.lc-hist-hd-txt[data-v-dbac9077]{min-width:0}.lc-hist-title[data-v-dbac9077]{letter-spacing:-.015em;font-size:15px;font-weight:660}.lc-hist-sub[data-v-dbac9077]{color:var(--ink-3);margin-top:3px;font-size:11.2px}.lc-hist-x[data-v-dbac9077]{width:26px;height:26px;color:var(--ink-3);cursor:pointer;border-radius:9px;flex:none;place-items:center;margin-left:auto;transition:background .14s,color .14s;display:grid}.lc-hist-x[data-v-dbac9077]:hover{background:var(--sunken);color:var(--ink)}.lc-hist-x-ic[data-v-dbac9077]{width:14px;height:14px}.lc-hist-list[data-v-dbac9077]{gap:2px;padding:8px;display:grid;overflow-y:auto}.hist-item[data-v-dbac9077]{text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:10px;align-items:center;gap:10px;width:100%;padding:9px 11px;transition:background .14s,border-color .14s;display:flex}.hist-item[data-v-dbac9077]:hover{background:var(--sunken-2);border-color:var(--line)}.hist-item.on[data-v-dbac9077]{background:var(--violet-soft);border-color:var(--violet-line)}.hist-item[data-v-dbac9077]:disabled{opacity:.6;cursor:wait}.hist-item-dot[data-v-dbac9077]{background:#d3cfe6;border-radius:999px;flex:none;width:6px;height:6px}.hist-item-dot.live[data-v-dbac9077]{background:#6aa844;box-shadow:0 0 0 3px #6aa84429}.hist-item-main[data-v-dbac9077]{flex:1;gap:2px;min-width:0;display:grid}.hist-item-main b[data-v-dbac9077]{text-overflow:ellipsis;white-space:nowrap;font-size:12.4px;font-weight:600;overflow:hidden}.hist-item-main i[data-v-dbac9077]{color:var(--ink-4);font-size:10.2px;font-style:normal}.hist-item-hash[data-v-dbac9077]{border:1px solid var(--line-2);color:var(--ink-3);background:#fff;border-radius:6px;flex:none;padding:0 6px;font-size:9.8px;line-height:16px}.lc-hist-hint[data-v-dbac9077]{text-align:center;padding:18px 12px;font-size:12px}.lc-hist-err[data-v-dbac9077]{border-radius:var(--r-md);color:#a5382f;background:#fdeae7;border:1px solid #f6d2cb;margin:12px 18px;padding:9px 11px;font-size:11.8px}.lc-hist-ft[data-v-dbac9077]{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;padding:11px 18px;font-size:10.8px;display:flex}.hist-close[data-v-dbac9077]{border:1px solid var(--ink-card);background:var(--ink-card);color:#fff;cursor:pointer;border-radius:999px;flex:none;height:26px;padding:0 12px;font-size:11px;font-weight:620}.hist-close[data-v-dbac9077]:hover{background:#000}@media (width<=900px){.lc-hero[data-v-dbac9077]{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:4px 14px;padding:18px;display:grid}.hero-body[data-v-dbac9077]{grid-column:1}.hero-aside[data-v-dbac9077]{grid-area:1/2}.ring[data-v-dbac9077]{width:72px;height:72px}.ring-in[data-v-dbac9077]{width:58px;height:58px}.ring-in b[data-v-dbac9077]{font-size:14px}.ring-in span[data-v-dbac9077]{font-size:8.2px}.s-hint[data-v-dbac9077]{display:none}.s-hd[data-v-dbac9077]{padding:12px 14px 10px}.sec-bd[data-v-dbac9077],.sec-empty[data-v-dbac9077],.steps[data-v-dbac9077]{padding-left:14px;padding-right:14px}}@media (width<=700px){.hist-readonly[data-v-dbac9077]{display:none}.lc-hist-bar .rule-btn[data-v-dbac9077]{order:2;margin-left:auto}.lc-hist-tabs[data-v-dbac9077]{flex-basis:100%;order:3}}@media (width<=560px){.lc-rule[data-v-dbac9077]{flex-wrap:wrap;padding:10px 12px}.rule-state[data-v-dbac9077]{border-left:0;flex-basis:100%;align-items:baseline;gap:6px;margin-left:36px;padding-left:0;display:flex}.lc-hero[data-v-dbac9077]{gap:4px 10px;padding:15px}.hero-title[data-v-dbac9077]{letter-spacing:-.02em;font-size:17.5px}.hero-sum[data-v-dbac9077]{font-size:12.2px;line-height:1.62}.hero-meta[data-v-dbac9077]{gap:8px;margin-top:10px;font-size:10.8px}.ring[data-v-dbac9077]{width:56px;height:56px}.ring-in[data-v-dbac9077]{width:46px;height:46px}.ring-in b[data-v-dbac9077]{font-size:12.5px}.ring-in span[data-v-dbac9077]{display:none}.s-title[data-v-dbac9077]{font-size:13.2px}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.tl-wrap[data-v-fcd79590]{border-radius:var(--r-xl);overflow:hidden}.tl-hd[data-v-fcd79590]{padding:12px 16px}.tip[data-v-fcd79590]{font-size:11px}.legend[data-v-fcd79590]{color:var(--ink-3);flex-wrap:wrap;gap:11px;margin-left:auto;font-size:10.5px;display:flex}.legend[data-v-fcd79590],.lg[data-v-fcd79590]{align-items:center}.lg[data-v-fcd79590]{gap:4px;display:inline-flex}.sw[data-v-fcd79590]{border:1px solid var(--line-2);border-radius:4px;width:11px;height:11px}.sw.mint[data-v-fcd79590]{background:var(--grad-mint);border-color:var(--mint-line)}.sw.lilac[data-v-fcd79590]{background:var(--grad-lilac);border-color:#dbcdfb}.sw.white[data-v-fcd79590]{background:#fff}.dot[data-v-fcd79590]{border-radius:999px;width:7px;height:7px}.dot.ok[data-v-fcd79590]{background:#6aa844}.dot.risk[data-v-fcd79590]{background:#e0a33a}.dot.plan[data-v-fcd79590]{background:#fff;border:1.5px solid #c9c8c2}.sep[data-v-fcd79590]{background:var(--line-2);width:1px;height:11px}.timeline[data-v-fcd79590]{padding:14px 16px 18px}.tl-item[data-v-fcd79590]{grid-template-columns:56px 26px minmax(0,1fr);align-items:start;display:grid}.when[data-v-fcd79590]{text-align:right;padding:13px 10px 0 0}.when-date[data-v-fcd79590]{letter-spacing:-.01em;color:var(--ink);font-size:12.2px;font-weight:660}.when-year[data-v-fcd79590]{color:var(--ink-4);font-size:9.6px}.axis[data-v-fcd79590]{justify-content:center;align-self:stretch;align-items:flex-start;padding-top:15px;display:flex;position:relative}.axis[data-v-fcd79590]:before{content:"";background:#d8d5cb;width:2px;margin-left:-1px;position:absolute;top:21px;bottom:-12px;left:50%}.tl-item:last-child .axis[data-v-fcd79590]:before{display:none}.dot-lg[data-v-fcd79590]{z-index:1;color:#fff;background:#c9c8c2;border:2px solid #fff;border-radius:999px;place-items:center;width:13px;height:13px;display:grid;position:relative;box-shadow:0 0 0 1.5px #dedcd5}.dot-lg.ok[data-v-fcd79590]{background:#6aa844;box-shadow:0 0 0 3px #6aa84429}.dot-lg.risk[data-v-fcd79590]{background:#e0a33a;box-shadow:0 0 0 3px #e0a33a2e}.dot-lg.plan[data-v-fcd79590]{background:#fff;box-shadow:0 0 0 1.5px #d6d4cd}.dot-lg.miss[data-v-fcd79590]{background:var(--rose);box-shadow:0 0 0 3px #cf475929}.node[data-v-fcd79590]{border-radius:var(--r-lg);border:1px solid var(--line);box-shadow:var(--shadow-1);background:#fff;margin-bottom:10px;padding:13px 15px 12px;transition:transform .16s,box-shadow .16s,border-color .16s}.node[data-v-fcd79590]:hover{transform:translateY(-1px);box-shadow:0 14px 30px -20px #17181b59}.node-mint[data-v-fcd79590]{border-color:var(--mint-line);background:radial-gradient(115% 150% at 0 0,#ffffffe6,#fff0 46%),radial-gradient(95% 130% at 104% 108%,#b8de76f2,#b8de7600 62%),linear-gradient(150deg,#edfcd7,#d7f3a8)}.node-lilac[data-v-fcd79590]{background:radial-gradient(115% 150% at 0 0,#ffffffeb,#fff0 46%),radial-gradient(95% 130% at 104% 108%,#c6b2faf2,#c6b2fa00 62%),linear-gradient(150deg,#f5f0ff,#e0d3fc);border-color:#dbcdfb}.node-ink[data-v-fcd79590]{background:radial-gradient(120% 160% at 100% 0,#f5f1ff,#f5f1ff00 52%),linear-gradient(150deg,#fff,#fbfaf6)}.node-top[data-v-fcd79590]{flex-wrap:wrap;align-items:center;gap:5px;margin-bottom:7px;display:flex}.days[data-v-fcd79590]{color:var(--ink-2);white-space:nowrap;background:#ffffffc7;border:1px solid #17181b12;border-radius:999px;margin-left:auto;padding:2px 8px;font-size:10.4px;font-weight:650}.days.soon[data-v-fcd79590]{color:#8d6210;background:#fdf1d7;border-color:#f2dfae}.days.over[data-v-fcd79590]{color:#a5382f;background:#fdeae7;border-color:#f6d2cb}.node-title[data-v-fcd79590]{letter-spacing:-.015em;align-items:center;gap:6px;font-size:14.6px;font-weight:660;line-height:1.35;display:flex}.criteria[data-v-fcd79590]{margin-top:5px;font-size:12px;line-height:1.55}.criteria[data-v-fcd79590],.nums[data-v-fcd79590]{color:var(--ink-2)}.nums[data-v-fcd79590]{align-items:center;gap:5px;margin:10px 0 5px;font-size:11.4px;display:flex}.mpct[data-v-fcd79590],.nums b[data-v-fcd79590]{font-weight:660}.mpct[data-v-fcd79590]{color:var(--ink);margin-left:auto}.bar.mint[data-v-fcd79590]{background:#46521f24}.mss[data-v-fcd79590]{border-top:1px dashed #17181b1f;gap:1px;margin:10px 0 0;padding:9px 0 0;list-style:none;display:grid}.srow[data-v-fcd79590]{border-radius:8px;align-items:center;gap:6px;margin:0 -6px;padding:4px 6px;font-size:11.8px;transition:background .14s;display:flex}.srow[data-v-fcd79590]:hover{background:#ffffffb8}.srow:hover .st-title[data-v-fcd79590]{color:var(--violet-ink)}.sdot[data-v-fcd79590]{border-radius:999px;flex:none;width:6px;height:6px}.st-id[data-v-fcd79590]{color:var(--ink-4);font-size:10px}.st-title[data-v-fcd79590]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.st-pts[data-v-fcd79590],.st-state[data-v-fcd79590]{white-space:nowrap;font-size:10.2px}.node-lilac .dim[data-v-fcd79590],.node-mint .dim[data-v-fcd79590]{color:#2226128c}.tl-today[data-v-fcd79590]{grid-template-columns:56px 26px minmax(0,1fr);align-items:center;padding:2px 0;display:grid}.today-when[data-v-fcd79590]{text-align:right;letter-spacing:.04em;color:var(--rose);padding-right:10px;font-size:10.8px;font-weight:700}.today-axis[data-v-fcd79590]{justify-content:center;align-self:stretch;display:flex;position:relative}.today-axis[data-v-fcd79590]:before{content:"";background:#cf475947;width:2px;margin-left:-1px;position:absolute;top:0;bottom:0;left:50%}.today-axis i[data-v-fcd79590]{z-index:1;background:var(--rose);border-radius:999px;align-self:center;width:9px;height:9px;position:relative;box-shadow:0 0 0 3px #cf475929}.today-line[data-v-fcd79590]{border-top:1px dashed #cf475959;align-self:center;height:0}@media (width<=760px){.tl-item[data-v-fcd79590],.tl-today[data-v-fcd79590]{grid-template-columns:44px 22px minmax(0,1fr)}.when-date[data-v-fcd79590]{font-size:11px}.legend[data-v-fcd79590],.st-state[data-v-fcd79590]{display:none}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.split[data-v-3d44e42e]{grid-template-columns:1fr 1fr;gap:10px;margin-top:auto;padding-top:12px;display:grid}.split>div[data-v-3d44e42e]{gap:1px;min-width:0;display:grid}.split>div+div[data-v-3d44e42e]{border-left:1px solid #17181b1a;padding-left:10px}.split .k[data-v-3d44e42e]{letter-spacing:.08em;text-transform:uppercase;color:#6b6f78;font-size:9.4px;font-weight:650}.split b[data-v-3d44e42e]{letter-spacing:-.025em;color:#2b3312;font-size:14.5px;font-weight:660}.split b small[data-v-3d44e42e]{letter-spacing:0;color:#6b6f78;margin-left:1px;font-size:10px;font-weight:600}.dot[data-v-3d44e42e]{border-radius:999px;flex:none;width:6px;height:6px;display:inline-block}.tb[data-v-3d44e42e]{border-radius:var(--r-md);justify-content:space-between;gap:12px;margin-bottom:12px;padding:10px 12px 10px 16px}.tb[data-v-3d44e42e],.tb-l[data-v-3d44e42e]{flex-wrap:wrap;align-items:center;display:flex}.tb-l[data-v-3d44e42e]{gap:8px}.tb-l[data-v-3d44e42e] .skin-select{max-width:212px}.tb-r[data-v-3d44e42e]{color:var(--ink-3);align-items:center;gap:6px;font-size:11.6px;display:flex}.tb-r .mono[data-v-3d44e42e]{color:var(--ink);font-weight:660}.sep[data-v-3d44e42e]{background:var(--line-2);width:1px;height:12px;margin:0 3px}.board[data-v-3d44e42e]{border-radius:var(--r-xl);padding:12px}.lanes[data-v-3d44e42e]{gap:10px;padding-bottom:2px;display:flex}.lane[data-v-3d44e42e]{flex-direction:column;flex:1 1 0;min-width:0;display:flex}.lane.folded[data-v-3d44e42e]{flex:0 0 46px}.lane-stub[data-v-3d44e42e]{border-radius:var(--r-md);background:var(--sunken-2);border:1px dashed var(--line-2);cursor:pointer;flex-direction:column;flex:1;align-items:center;gap:7px;min-height:120px;padding:11px 4px 9px;transition:background .14s,border-color .14s;display:flex}.lane-stub[data-v-3d44e42e]:hover{background:#fff;border-color:#ded4fb}.stub-name[data-v-3d44e42e]{writing-mode:vertical-rl;letter-spacing:.12em;color:var(--ink-2);font-size:11.6px;font-weight:650}.stub-ct[data-v-3d44e42e]{border:1px solid var(--line);min-width:16px;height:16px;color:var(--ink-3);background:#fff;border-radius:999px;place-items:center;padding:0 4px;font-size:9.6px;font-weight:700;display:grid}.stub-pts[data-v-3d44e42e]{writing-mode:vertical-rl;letter-spacing:.06em;font-size:9.6px}.lane-fold[data-v-3d44e42e],.stub-ic[data-v-3d44e42e],.stub-pts[data-v-3d44e42e]{color:var(--ink-4)}.stub-ic[data-v-3d44e42e]{width:11px;height:11px}.lane-fold[data-v-3d44e42e]{border-radius:6px;place-items:center;width:18px;height:18px;margin-left:2px;transition:background .14s,color .14s;display:grid}.lane-fold[data-v-3d44e42e]:hover{color:var(--ink-2);background:#f1f0eb}.lane-hd[data-v-3d44e42e]{align-items:center;gap:6px;padding:0 4px 9px;display:flex}.lane-dot[data-v-3d44e42e]{border-radius:999px;width:6px;height:6px}.lane-hd b[data-v-3d44e42e]{letter-spacing:-.01em;font-size:12.2px;font-weight:650}.lane-ct[data-v-3d44e42e]{color:var(--ink-3);background:#f1f0eb;border-radius:999px;padding:0 5px;font-size:10px;font-weight:650}.lane-pts[data-v-3d44e42e]{color:var(--ink-4);margin-left:auto;font-size:10.4px}.lane-bd[data-v-3d44e42e]{border-radius:var(--r-md);background:var(--sunken-2);border:1px solid #f1f0ec;flex:1;grid-template-columns:minmax(0,1fr);align-content:start;gap:8px;min-height:120px;padding:8px;display:grid}.scard[data-v-3d44e42e]{border:1px solid var(--line);background:#fff;border-radius:13px;min-width:0;padding:9px 10px 8px;transition:transform .16s,box-shadow .16s,border-color .16s;display:block;position:relative;box-shadow:0 1px 2px #17181b08}.scard[data-v-3d44e42e]:hover{border-color:#ded4fb;transform:translateY(-1.5px);box-shadow:0 12px 24px -16px #6d4ff080}.sc-actions[data-v-3d44e42e]{z-index:2;opacity:0;visibility:hidden;background:linear-gradient(#ffffff3d,#ffffff85 54%,#ffffffc7);border-radius:0 0 12px 12px;justify-content:flex-end;align-items:center;gap:2px;height:32px;padding:0 5px;transition:transform .16s,opacity .16s,visibility .16s;display:flex;position:absolute;bottom:0;left:0;right:0;transform:translateY(100%);-webkit-mask-image:linear-gradient(#0000,#000 22%);mask-image:linear-gradient(#0000,#000 22%)}.scard:focus-within .sc-actions[data-v-3d44e42e],.scard:hover .sc-actions[data-v-3d44e42e]{opacity:1;visibility:visible;transform:translateY(0)}.sc-act[data-v-3d44e42e]{min-width:22px;height:22px;color:var(--ink-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:7px;place-items:center;padding:0 5px;font-size:10.4px;font-weight:650;transition:background .14s,color .14s;display:grid}.sc-act[data-v-3d44e42e]:hover{color:var(--ink);background:#17181b14}.sc-act.danger[data-v-3d44e42e]:hover{color:#fff;background:#e5484de6}.sc-act.off[data-v-3d44e42e]{opacity:.45;cursor:not-allowed}.sc-act.off[data-v-3d44e42e]:hover{color:var(--ink-2);background:0 0}.sc-ask[data-v-3d44e42e]{color:var(--ink-2);margin-right:auto;font-size:10.2px;font-weight:640}.act-error[data-v-3d44e42e]{border-radius:var(--r-md);background:var(--peach);color:#a5382f;border-color:#f2d3cf;align-items:center;gap:8px;margin-bottom:12px;padding:9px 12px;font-size:11.8px;display:flex}.act-error-txt[data-v-3d44e42e]{flex:1;min-width:0}.scard-compact[data-v-3d44e42e]{border-radius:10px;flex-wrap:wrap;align-items:center;gap:1px 6px;padding:5px 8px;display:flex}.scard-compact[data-v-3d44e42e]:hover{transform:none}.scard-compact .sc-id[data-v-3d44e42e]{margin-right:0}.sc-c-title[data-v-3d44e42e]{white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--ink-2);flex:1 0 100%;font-size:11.4px;font-weight:560;line-height:1.4;overflow:hidden}.sc-c-pts[data-v-3d44e42e]{color:var(--ink-4);flex:none;margin-left:auto;font-size:9.6px;font-weight:660}.sc-top[data-v-3d44e42e]{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.sc-id[data-v-3d44e42e]{color:var(--ink-4);margin-right:2px;font-size:10px}.sc-wsjf[data-v-3d44e42e]{white-space:nowrap;margin-left:auto;font-size:9.6px}.sc-title[data-v-3d44e42e]{letter-spacing:-.005em;-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:7px 0 5px;font-size:12.5px;font-weight:620;line-height:1.42;display:-webkit-box;overflow:hidden}.sc-meta[data-v-3d44e42e]{color:var(--ink-3);margin-bottom:7px;font-size:10.4px}.sc-meta[data-v-3d44e42e],.sc-tags[data-v-3d44e42e]{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.sc-tags[data-v-3d44e42e]{margin-bottom:8px}.sc-bar[data-v-3d44e42e]{margin-top:1px}.lane-empty[data-v-3d44e42e]{text-align:center;color:var(--ink-4);padding:14px 6px;font-size:10.6px}@media (width<=1180px){.lanes[data-v-3d44e42e]{overflow-x:auto}.lane[data-v-3d44e42e]{flex:1 0 178px}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{On as e,Zn as t,g as n,mt as r,v as i}from"./DZo3dYLJ.js";import{r as a}from"./oXSDGTSr.js";import{n as o,t as s}from"./Baq-Hrpf.js";import{t as c}from"./
|
|
1
|
+
import{On as e,Zn as t,g as n,mt as r,v as i}from"./DZo3dYLJ.js";import{r as a}from"./oXSDGTSr.js";import{n as o,t as s}from"./Baq-Hrpf.js";import{t as c}from"./D2zrOcWn.js";var l={base:`size-4 shrink-0 align-sub`},u={__name:`ProseIcon`,props:{name:{type:String,required:!0},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(u){let d=o(`prose.icon`,u),f=a(),p=n(()=>s({extend:l,...f.ui?.prose?.icon||{}}));return(n,a)=>(r(),i(c,{name:e(d).name,class:t(p.value({class:[e(d).ui?.base,e(d).class]}))},null,8,[`name`,`class`]))}};export{u as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{D as e,E as t,On as n,Zn as r,_ as i,b as a,bt as o,er as s,g as c,k as l,mt as u,o as d,qt as f,tr as p,un as m,v as h,vn as g,y as _}from"./DZo3dYLJ.js";import{C as v,w as y}from"./51OWHj8c.js";import{t as ee}from"./BJW3UkS7.js";import{t as te}from"./CqhzGRpQ.js";import{t as ne}from"./D2zrOcWn.js";import{O as b,a as x,i as S,n as re,o as C,r as ie,s as w}from"#entry";var ae={class:`stats`},oe={class:`stat-top`},se={class:`stat-label`},ce={class:`stat-pill`},le={class:`stat-value`},ue={class:`stat-sub`},de={class:`stat-delta`},fe={class:`split`},pe={class:`spark`},me=[`title`],he={class:`stat-top`},ge={class:`stat-label`},_e={class:`stat-pill`},ve={class:`stat-value`},ye={class:`stat-sub`},be={class:`stat-rows`},xe={class:`stat-row`},Se={class:`v`},Ce={class:`stat-row`},we={class:`v`},Te={class:`stat-row`},Ee={class:`v`},De={class:`stat-row`},Oe={class:`v`},ke={class:`stat-foot`},Ae={class:`row`},je={class:`bar`},Me={class:`stat-top`},Ne={class:`stat-label`},Pe={class:`stat-value`},Fe={class:`unit`},Ie={class:`stat-sub`},Le={class:`stat-rows`},Re={class:`stat-row`},ze={class:`v`},Be={class:`stat-row`},Ve={class:`v`},He={class:`stat-row`},Ue={class:`v`},We={class:`stat-row`},Ge={class:`v`},Ke={class:`stat-foot`},qe={class:`row`},Je={class:`bar lilac`},Ye={class:`stat-top`},Xe={class:`stat-label`},Ze={class:`stat-value`},Qe={class:`stat-rows`},$e={class:`stat-row`},et={class:`v`},tt={class:`stat-row`},nt={class:`v`},rt={class:`stat-row`},it={class:`v`},at={class:`stat-row`},ot={class:`v`},st={class:`stat-foot`},ct={class:`row`},lt={class:`bar on-dark`},ut={class:`card tb`},dt={class:`tb-l`},ft={class:`tb-r`},pt={class:`mono`},mt={class:`mono`},ht={key:0,class:`card act-error`},gt={class:`act-error-txt`},_t={class:`card board`},vt={class:`lanes`},yt=[`title`,`onClick`],bt={class:`stub-name`},xt={class:`stub-ct`},St={class:`stub-pts`},Ct={class:`lane-hd`},wt={class:`lane-ct`},Tt={class:`lane-pts`},Et=[`aria-expanded`,`title`,`onClick`],Dt={class:`lane-bd`},Ot={class:`sc-id mono`},kt={class:`sc-c-pts`},At=[`title`],jt={class:`sc-top`},Mt={class:`sc-id mono`},Nt={class:`dim sc-wsjf`},Pt=[`title`],Ft={class:`sc-title`},It={class:`sc-meta`},Lt={class:`sc-tags`},Rt={class:`tag tag-ghost`},zt={key:0,class:`tag tag-neutral mono`},Bt=[`title`],Vt=[`title`],Ht={class:`bar slim sc-bar`},Ut={class:`sc-ask`},Wt=[`aria-label`,`onClick`,`onKeydown`],Gt=[`aria-label`,`onClick`,`onKeydown`],Kt=[`aria-label`,`onClick`,`onKeydown`],qt=[`aria-label`,`onClick`,`onKeydown`],Jt={key:0,class:`lane-empty`},T=`board.foldedLanes.v1`,E=S(l({__name:`index`,setup(l){let{stories:S,epics:E,states:D,progress:O,milestoneOfStory:Yt,pointsOf:Xt,milestones:Zt,refresh:Qt,STATE_LABEL:k,STATE_SHORT:$t,STATE_DOT:A,TYPE_LABEL:en,TYPE_COLOR:tn,TYPE_ICON:nn,PRIORITY_COLOR:rn,SCOPE_LABEL:an,wsjf:j,blockedStories:on}=w(),M=g(`all`),N=g(`all`),P=g(`rank`),sn=c(()=>[{label:`全部史诗`,value:`all`,icon:`i-lucide-layers`},...E.value.map(e=>({label:`${e.id} ${e.title}`,value:e.id,icon:`i-lucide-layer-group`}))]),cn=c(()=>[{label:`全部里程碑`,value:`all`,icon:`i-lucide-flag`},...Zt.value.map(e=>({label:`${e.id} ${e.title}`,value:e.id,icon:e.kind===`mvp`?`i-lucide-star`:`i-lucide-map-pin`}))]),ln=[{label:`默认顺序`,value:`rank`,icon:`i-lucide-list-ordered`},{label:`按优先级 P0 → P3`,value:`priority`,icon:`i-lucide-alert-circle`},{label:`按 WSJF 价值/点数`,value:`wsjf`,icon:`i-lucide-scale`},{label:`按点数`,value:`points`,icon:`i-lucide-signal`}],un={P0:0,P1:1,P2:2,P3:3},F=[`done`,`cancelled`],I=[`done`,`cancelled`],L=g((()=>{try{if(typeof localStorage>`u`)return[...I];let e=localStorage.getItem(T);if(!e)return[...I];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>F.includes(e)):[...I]}catch{return[...I]}})()),R=e=>F.includes(e),z=e=>L.value.includes(e),B=e=>F.includes(e),dn=e=>{if(R(e)){L.value=z(e)?L.value.filter(t=>t!==e):[...L.value,e];try{localStorage.setItem(T,JSON.stringify(L.value))}catch{}}},V=c(()=>{let e=S.value.filter(e=>!(M.value!==`all`&&e.epicId!==M.value||N.value!==`all`&&!Yt(e.id).some(e=>e.id===N.value)));return P.value===`priority`?[...e].sort((e,t)=>(un[e.priority]??9)-(un[t.priority]??9)||j(t)-j(e)):P.value===`wsjf`?[...e].sort((e,t)=>j(t)-j(e)):P.value===`points`?[...e].sort((e,t)=>t.points-e.points):e}),H=e=>V.value.filter(t=>t.status===e),U=e=>Xt(H(e).map(e=>e.id)),W=c(()=>{let e=V.value,t=e.filter(e=>e.status===`done`),n=e.filter(e=>e.status===`in-progress`||e.status===`review`),r=e.filter(e=>e.status===`ready`||e.status===`draft`),i=e.filter(e=>e.status===`cancelled`),a=e.filter(e=>e.status!==`cancelled`),o=e.flatMap(e=>e.tasks??[]),s=e=>o.filter(t=>t.status===e).length;return{count:e.length,points:e.reduce((e,t)=>e+t.points,0),liveCount:a.length,livePoints:a.reduce((e,t)=>e+t.points,0),donePoints:t.reduce((e,t)=>e+t.points,0),done:t.length,running:n.length,idle:r.length,cancelled:i.length,cancelledPoints:i.reduce((e,t)=>e+t.points,0),tasks:o.length,tasksDone:s(`done`),taskRed:s(`red`),taskGreen:s(`green`),taskRefactor:s(`refactored`),taskTodo:s(`todo`),bugs:e.filter(e=>e.type===`bug`).length,debt:e.filter(e=>e.type===`debt`).length,scope:e.filter(e=>e.scopeChange).length}}),G=c(()=>W.value.livePoints?Math.round(W.value.donePoints/W.value.livePoints*100):0),fn=c(()=>W.value.liveCount?Math.round(W.value.livePoints/W.value.liveCount*10)/10:0),K=c(()=>W.value.tasks?Math.round(W.value.tasksDone/W.value.tasks*100):0),pn=c(()=>on.value.length+W.value.bugs),mn=c(()=>Math.max(1,...D.map(e=>H(e).length))),hn=e=>8+Math.round(H(e).length/mn.value*34),q=[`draft`,`ready`,`in-progress`,`review`,`done`],gn=e=>q[q.indexOf(e)+1]??null,_n=e=>q.indexOf(e)>0?q[q.indexOf(e)-1]:null,J=e=>(e.tasks??[]).filter(e=>e.status!==`done`).length,vn=e=>{let t=gn(e.status);return t?!(t===`done`&&J(e)>0):!1},yn=e=>{let t=gn(e.status);return t?t===`done`&&J(e)?`还有 ${J(e)} 个任务没完成,先做完再收尾`:`推进到「${k[t]}」`:`已经是最后一个状态`},bn=e=>_n(e.status)!==null,Y={content:`bg-[#1b1526]! text-white! ring-0 shadow-lg`},xn=g(``),X=g(``),Z=g(``),Q=g(``);async function $(e,t){if(!X.value&&(t!==`next`||vn(e))&&(t!==`prev`||bn(e))){X.value=e.id,Q.value=``;try{xn.value||=(await b(`/api/projects`)).token,await b(`/api/agile/story-status`,{method:`POST`,headers:{"x-project-token":xn.value},body:{id:e.id,action:t}}),Z.value=``,await Qt()}catch(t){Q.value=`${e.id}:${t?.data?.error??t?.message??`改状态失败`}`}finally{X.value=``}}}let Sn=c(()=>{if(M.value===`all`)return`全部史诗`;let e=E.value.find(e=>e.id===M.value);return e?e.title.slice(0,6):`全部史诗`}),Cn=e=>Yt(e).filter(e=>e.kind===`mvp`);return(c,l)=>{let g=ie,b=ne,S=te,w=re,T=ee;return u(),a(`div`,null,[i(`div`,ae,[i(`article`,{class:r([`stat`,(`cardToneClass`in c?c.cardToneClass:n(C))(0)])},[e(g,{tone:(`cardTone`in c?c.cardTone:n(x))(0)},null,8,[`tone`]),i(`div`,oe,[i(`span`,se,[e(b,{name:`i-lucide-gauge`,class:`size-3.5`}),l[7]||=t(`看板完成度`,-1)]),i(`span`,ce,p(n(Sn)),1)]),i(`div`,le,[t(p(n(G)),1),l[8]||=i(`span`,{class:`unit`},`%`,-1)]),i(`div`,ue,[i(`span`,de,[e(b,{name:`i-lucide-check`,class:`size-3`}),t(p(n(W).donePoints)+` 点`,1)]),t(` 已交付 · 共 `+p(n(W).livePoints)+` 点 `,1)]),i(`div`,fe,[i(`div`,null,[l[9]||=i(`span`,{class:`k`},`完成故事`,-1),i(`b`,null,[t(p(n(W).done),1),i(`small`,null,`/`+p(n(W).liveCount),1)])]),i(`div`,null,[l[11]||=i(`span`,{class:`k`},`剩余点`,-1),i(`b`,null,[t(p(n(W).livePoints-n(W).donePoints),1),l[10]||=i(`small`,null,`点`,-1)])])]),i(`div`,pe,[(u(!0),a(d,null,o(n(D),e=>(u(),a(`div`,{key:e,class:`spark-col`,title:`${n(k)[e]}:${H(e).length} 个`},[i(`div`,{class:r([`spark-bar`,{done:e===`done`,cancel:e===`cancelled`}]),style:s({height:hn(e)+`px`})},null,6),i(`span`,null,p(n($t)[e]),1)],8,me))),128))])],2),i(`article`,{class:r([`stat`,(`cardToneClass`in c?c.cardToneClass:n(C))(1)])},[e(g,{tone:(`cardTone`in c?c.cardTone:n(x))(1)},null,8,[`tone`]),i(`div`,he,[i(`span`,ge,[e(b,{name:`i-lucide-book-open`,class:`size-3.5`}),l[12]||=t(`故事`,-1)]),i(`span`,_e,p(Math.round(n(fn)))+` 点/个`,1)]),i(`div`,ve,[t(p(n(W).count),1),l[13]||=i(`span`,{class:`unit`},`个`,-1)]),i(`div`,ye,`共 `+p(n(W).livePoints)+` 点 · 任务 `+p(n(W).tasks)+` 个`,1),i(`div`,be,[i(`div`,xe,[l[14]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#6aa844`}}),t(`已完成`)],-1),i(`span`,Se,p(n(W).done),1)]),i(`div`,Ce,[l[15]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#3f7fd4`}}),t(`进行中`)],-1),i(`span`,we,p(n(W).running),1)]),i(`div`,Te,[l[16]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#b6bac1`}}),t(`未开始`)],-1),i(`span`,Ee,p(n(W).idle),1)]),i(`div`,De,[l[17]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#cf4759`}}),t(`已取消`)],-1),i(`span`,Oe,p(n(W).cancelled)+p(n(W).cancelledPoints?` · ${n(W).cancelledPoints} 点`:``),1)])]),i(`div`,ke,[i(`div`,Ae,[i(`span`,null,`任务完成 `+p(n(W).tasksDone)+`/`+p(n(W).tasks),1),i(`span`,null,p(n(K))+`%`,1)]),i(`div`,je,[i(`i`,{style:s({width:n(K)+`%`})},null,4)])])],2),i(`article`,{class:r([`stat`,(`cardToneClass`in c?c.cardToneClass:n(C))(2)])},[e(g,{tone:(`cardTone`in c?c.cardTone:n(x))(2)},null,8,[`tone`]),i(`div`,Me,[i(`span`,Ne,[e(b,{name:`i-lucide-list-checks`,class:`size-3.5`}),l[18]||=t(`TDD 任务`,-1)]),l[19]||=i(`span`,{class:`stat-pill`},`红 → 绿 → 重构`,-1)]),i(`div`,Pe,[t(p(n(W).tasksDone),1),i(`span`,Fe,`/ `+p(n(W).tasks)+` 项`,1)]),i(`div`,Ie,`已完成任务占 `+p(n(K))+`%`,1),i(`div`,Le,[i(`div`,Re,[l[20]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#cf4759`}}),t(`红(测试失败)`)],-1),i(`span`,ze,p(n(W).taskRed),1)]),i(`div`,Be,[l[21]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#6aa844`}}),t(`绿(测试通过)`)],-1),i(`span`,Ve,p(n(W).taskGreen),1)]),i(`div`,He,[l[22]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#6d4ff0`}}),t(`已重构`)],-1),i(`span`,Ue,p(n(W).taskRefactor),1)]),i(`div`,We,[l[23]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#b6bac1`}}),t(`待办`)],-1),i(`span`,Ge,p(n(W).taskTodo),1)])]),i(`div`,Ke,[i(`div`,qe,[i(`span`,null,`已完成 `+p(n(W).tasksDone)+`/`+p(n(W).tasks),1),i(`span`,null,p(n(K))+`%`,1)]),i(`div`,Je,[i(`i`,{style:s({width:n(K)+`%`})},null,4)])])],2),i(`article`,{class:r([`stat`,(`cardToneClass`in c?c.cardToneClass:n(C))(3)])},[e(g,{tone:(`cardTone`in c?c.cardTone:n(x))(3)},null,8,[`tone`]),i(`div`,Ye,[i(`span`,Xe,[e(b,{name:`i-lucide-shield-alert`,class:`size-3.5`}),l[24]||=t(`风险面`,-1)]),l[25]||=i(`span`,{class:`stat-pill`},`需处理`,-1)]),i(`div`,Ze,[t(p(n(pn)),1),l[26]||=i(`span`,{class:`unit`},`项`,-1)]),l[32]||=i(`div`,{class:`stat-sub`},`阻塞故事与缺陷合计`,-1),i(`div`,Qe,[i(`div`,$e,[l[27]||=i(`span`,{class:`k`},`阻塞故事`,-1),i(`span`,et,p(n(on).length),1)]),i(`div`,tt,[l[28]||=i(`span`,{class:`k`},`缺陷`,-1),i(`span`,nt,p(n(W).bugs),1)]),i(`div`,rt,[l[29]||=i(`span`,{class:`k`},`技术债`,-1),i(`span`,it,p(n(W).debt),1)]),i(`div`,at,[l[30]||=i(`span`,{class:`k`},`范围变更`,-1),i(`span`,ot,p(n(W).scope),1)])]),i(`div`,st,[i(`div`,ct,[l[31]||=i(`span`,null,`完成度`,-1),i(`span`,null,p(n(G))+`%`,1)]),i(`div`,lt,[i(`i`,{style:s({width:n(G)+`%`})},null,4)])])],2)]),i(`div`,ut,[i(`div`,dt,[l[33]||=i(`span`,{class:`lbl`},`筛选`,-1),e(S,{modelValue:n(M),"onUpdate:modelValue":l[0]||=e=>m(M)?M.value=e:null,items:n(sn),icon:`i-lucide-layers`,"aria-label":`按史诗筛选`},null,8,[`modelValue`,`items`]),e(S,{modelValue:n(N),"onUpdate:modelValue":l[1]||=e=>m(N)?N.value=e:null,items:n(cn),icon:`i-lucide-flag`,"aria-label":`按里程碑筛选`},null,8,[`modelValue`,`items`]),e(S,{modelValue:n(P),"onUpdate:modelValue":l[2]||=e=>m(P)?P.value=e:null,items:ln,icon:`i-lucide-arrow-up-down`,"aria-label":`排序方式`},null,8,[`modelValue`])]),i(`div`,ft,[i(`span`,pt,p(n(V).length),1),l[34]||=t(` 个故事 `,-1),l[35]||=i(`i`,{class:`sep`},null,-1),i(`span`,mt,p(n(Xt)(n(V).map(e=>e.id))),1),l[36]||=t(` 点 `,-1)])]),n(Q)?(u(),a(`div`,ht,[e(b,{name:`i-lucide-circle-alert`,class:`size-4`}),i(`span`,gt,p(n(Q)),1),i(`button`,{class:`btn btn-sm`,onClick:l[3]||=e=>Q.value=``},`知道了`)])):_(``,!0),i(`div`,_t,[i(`div`,vt,[(u(!0),a(d,null,o(n(D),c=>(u(),a(`section`,{key:c,class:r([`lane`,{folded:z(c)}])},[z(c)?(u(),a(`button`,{key:0,class:`lane-stub`,title:`展开${n(k)[c]}:${H(c).length} 个 · ${U(c)} 点`,onClick:e=>dn(c)},[i(`i`,{class:`lane-dot`,style:s({background:n(A)[c]})},null,4),i(`span`,bt,p(n(k)[c]),1),i(`span`,xt,p(H(c).length),1),i(`span`,St,p(U(c))+` 点`,1),e(b,{name:`i-lucide-chevrons-right`,class:`stub-ic`})],8,yt)):(u(),a(d,{key:1},[i(`header`,Ct,[i(`i`,{class:`lane-dot`,style:s({background:n(A)[c]})},null,4),i(`b`,null,p(n(k)[c]),1),i(`span`,wt,p(H(c).length),1),i(`span`,Tt,p(U(c))+` 点`,1),R(c)?(u(),a(`button`,{key:0,class:`lane-fold`,"aria-expanded":!z(c),title:`收起${n(k)[c]}`,onClick:e=>dn(c)},[e(b,{name:`i-lucide-chevron-left`,class:`size-3`})],8,Et)):_(``,!0)]),i(`div`,Dt,[(u(!0),a(d,null,o(H(c),m=>(u(),h(T,{key:m.id,to:`/story/${m.id}`,class:r([`scard`,{"scard-compact":B(c)}])},{default:f(()=>[B(c)?(u(),a(d,{key:0},[i(`span`,Ot,p(m.id),1),i(`span`,kt,p(m.points)+` 点`,1),i(`span`,{class:`sc-c-title`,title:m.title},p(m.title),9,At)],64)):(u(),a(d,{key:1},[i(`div`,jt,[i(`span`,Mt,p(m.id),1),i(`span`,{class:r([`tag`,`tag-${n(rn)[m.priority]}`])},p(m.priority),3),i(`span`,Nt,`WSJF `+p(n(j)(m)),1),m.blocked?(u(),a(`span`,{key:0,class:`tag tag-error tag-dot`,title:`阻塞中:${m.blocked.reason}(自 ${m.blocked.since})`},`阻塞`,8,Pt)):_(``,!0)]),i(`p`,Ft,p(m.title),1),i(`div`,It,[i(`span`,null,p(m.points)+` 点`,1),l[37]||=i(`span`,{class:`dim`},`·`,-1),i(`span`,null,`任务 `+p(n(O)(m).done)+`/`+p(n(O)(m).total),1)]),i(`div`,Lt,[i(`span`,{class:r([`tag`,`tag-${n(tn)[m.type]}`])},[e(b,{name:n(nn)[m.type],class:`size-3`},null,8,[`name`]),t(p(n(en)[m.type]),1)],2),i(`span`,Rt,p(m.epicId),1),m.sprintId?(u(),a(`span`,zt,p(m.sprintId),1)):_(``,!0),(u(!0),a(d,null,o(Cn(m.id),e=>(u(),a(`span`,{key:e.id,class:`tag tag-mint`,title:`${e.id} ${e.title} · ${e.criteria}`},`MVP`,8,Bt))),128)),m.scopeChange?(u(),a(`span`,{key:1,class:`tag tag-info`,title:`${n(an)[m.scopeChange.kind]}(${m.scopeChange.at}):${m.scopeChange.reason}`},p(n(an)[m.scopeChange.kind]),9,Vt)):_(``,!0)]),i(`div`,Ht,[i(`i`,{style:s({width:n(O)(m).pct+`%`})},null,4)]),i(`div`,{class:`sc-actions`,style:{backdropFilter:`blur(10px) saturate(125%)`},onMouseleave:l[6]||=e=>Z.value=``},[n(Z)===m.id?(u(),a(d,{key:0},[i(`span`,Ut,`取消 `+p(m.id)+`?`,1),i(`span`,{class:`sc-act danger`,role:`button`,tabindex:`0`,"data-act":`cancel-confirm`,"aria-label":`确认取消 ${m.id}`,onClick:y(e=>$(m,`cancel`),[`stop`,`prevent`]),onKeydown:v(y(e=>$(m,`cancel`),[`prevent`]),[`enter`])},`确认`,40,Wt),i(`span`,{class:`sc-act`,role:`button`,tabindex:`0`,"data-act":`cancel-abort`,onClick:l[4]||=y(e=>Z.value=``,[`stop`,`prevent`]),onKeydown:l[5]||=v(y(e=>Z.value=``,[`prevent`]),[`enter`])},`返回`,32)],64)):(u(),a(d,{key:1},[bn(m)?(u(),h(w,{key:0,text:`退回「${n(k)[_n(m.status)??``]}」`,"delay-duration":150,ui:Y},{default:f(()=>[i(`span`,{class:`sc-act`,role:`button`,tabindex:`0`,"data-act":`prev`,"aria-label":`退回 ${m.id}`,onClick:y(e=>$(m,`prev`),[`stop`,`prevent`]),onKeydown:v(y(e=>$(m,`prev`),[`prevent`]),[`enter`])},[e(b,{name:`i-lucide-arrow-left`,class:`size-3.5`})],40,Gt)]),_:2},1032,[`text`])):_(``,!0),e(w,{text:yn(m),"delay-duration":150,ui:Y},{default:f(()=>[i(`span`,{class:r([`sc-act`,{off:!vn(m)}]),role:`button`,tabindex:`0`,"data-act":`next`,"aria-label":`推进 ${m.id}`,onClick:y(e=>$(m,`next`),[`stop`,`prevent`]),onKeydown:v(y(e=>$(m,`next`),[`prevent`]),[`enter`])},[e(b,{name:`i-lucide-arrow-right`,class:`size-3.5`})],42,Kt)]),_:2},1032,[`text`]),e(w,{text:`标记 ${m.id} 已取消`,"delay-duration":150,ui:Y},{default:f(()=>[i(`span`,{class:`sc-act danger`,role:`button`,tabindex:`0`,"data-act":`cancel`,"aria-label":`取消 ${m.id}`,onClick:y(e=>Z.value=m.id,[`stop`,`prevent`]),onKeydown:v(y(e=>Z.value=m.id,[`prevent`]),[`enter`])},[e(b,{name:`i-lucide-x`,class:`size-3.5`})],40,qt)]),_:2},1032,[`text`])],64))],32)],64))]),_:2},1032,[`to`,`class`]))),128)),H(c).length?_(``,!0):(u(),a(`p`,Jt,`暂无故事`))])],64))],2))),128))])])])}}}),[[`__scopeId`,`data-v-3d44e42e`]]);export{E as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CqT7Crsj.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DUA8YVRM.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CqT7Crsj.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZXukN7r.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FxbXzpZ6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2zrOcWn.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CNCQ_RRC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BsNk4K6P.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/CqT7Crsj.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8d-LQbt.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ceebd758-b616-48d8-872b-0de05659de19",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793099665691,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CqT7Crsj.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DUA8YVRM.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CqT7Crsj.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZXukN7r.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FxbXzpZ6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2zrOcWn.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CNCQ_RRC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BsNk4K6P.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/CqT7Crsj.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8d-LQbt.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ceebd758-b616-48d8-872b-0de05659de19",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793099665692,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CqT7Crsj.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DUA8YVRM.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CqT7Crsj.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZXukN7r.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FxbXzpZ6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2zrOcWn.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CNCQ_RRC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BsNk4K6P.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/CqT7Crsj.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8d-LQbt.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ceebd758-b616-48d8-872b-0de05659de19",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793099665693,false]</script></body></html>
|
package/assets/board/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CqT7Crsj.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DUA8YVRM.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CqT7Crsj.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZXukN7r.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FxbXzpZ6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2zrOcWn.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CNCQ_RRC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BsNk4K6P.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/CqT7Crsj.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8d-LQbt.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ceebd758-b616-48d8-872b-0de05659de19",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793099665693,false]</script></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CqT7Crsj.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DUA8YVRM.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CqT7Crsj.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZXukN7r.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FxbXzpZ6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2zrOcWn.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CNCQ_RRC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BsNk4K6P.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/CqT7Crsj.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8d-LQbt.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ceebd758-b616-48d8-872b-0de05659de19",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793099665693,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/CqT7Crsj.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.DUA8YVRM.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CqT7Crsj.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZXukN7r.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FxbXzpZ6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2zrOcWn.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CNCQ_RRC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BsNk4K6P.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/CqT7Crsj.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8d-LQbt.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"ceebd758-b616-48d8-872b-0de05659de19",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793099665693,false]</script></body></html>
|
package/bin/scrum-skills.mjs
CHANGED
|
@@ -61,6 +61,8 @@ function init() {
|
|
|
61
61
|
|
|
62
62
|
mkdirSync(join(dir, 'tools'), { recursive: true });
|
|
63
63
|
cpSync(join(PKG_ROOT, 'tools/validate.mjs'), join(dir, 'tools/validate.mjs'));
|
|
64
|
+
// 交付说明的写入工具:纪律要求「写之前先看 git」,工具得跟着装过去
|
|
65
|
+
cpSync(join(PKG_ROOT, 'tools/last-change.mjs'), join(dir, 'tools/last-change.mjs'));
|
|
64
66
|
|
|
65
67
|
// 数据骨架:schema v2 三文件结构(已有文件不覆盖,避免踩坏真实数据)
|
|
66
68
|
mkdirSync(join(dir, 'agile'), { recursive: true });
|
|
@@ -107,6 +109,7 @@ function frameworkFiles() {
|
|
|
107
109
|
out.push({ rel: `.agents/${f.rel}`, src: f.abs });
|
|
108
110
|
out.push({ rel: 'AGENTS.md', src: join(PKG_ROOT, 'templates/AGENTS.md') });
|
|
109
111
|
out.push({ rel: 'tools/validate.mjs', src: join(PKG_ROOT, 'tools/validate.mjs') });
|
|
112
|
+
out.push({ rel: 'tools/last-change.mjs', src: join(PKG_ROOT, 'tools/last-change.mjs') });
|
|
110
113
|
return out;
|
|
111
114
|
}
|
|
112
115
|
|
package/package.json
CHANGED
|
@@ -1,40 +1,41 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "scrum-skills",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "结构化敏捷开发管理 skills + CLI:AI 对话产出结构化敏捷数据,TDD 驱动实施,Nuxt 看板可视化",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"keywords": [
|
|
7
|
-
"agile",
|
|
8
|
-
"scrum",
|
|
9
|
-
"sprint",
|
|
10
|
-
"tdd",
|
|
11
|
-
"kanban",
|
|
12
|
-
"gantt",
|
|
13
|
-
"burndown",
|
|
14
|
-
"skills",
|
|
15
|
-
"cli"
|
|
16
|
-
],
|
|
17
|
-
"bin": {
|
|
18
|
-
"scrum-skills": "./bin/scrum-skills.mjs",
|
|
19
|
-
"scsk": "./bin/scrum-skills.mjs"
|
|
20
|
-
},
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"tools/",
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
}
|
|
40
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "scrum-skills",
|
|
3
|
+
"version": "0.2.6",
|
|
4
|
+
"description": "结构化敏捷开发管理 skills + CLI:AI 对话产出结构化敏捷数据,TDD 驱动实施,Nuxt 看板可视化",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"agile",
|
|
8
|
+
"scrum",
|
|
9
|
+
"sprint",
|
|
10
|
+
"tdd",
|
|
11
|
+
"kanban",
|
|
12
|
+
"gantt",
|
|
13
|
+
"burndown",
|
|
14
|
+
"skills",
|
|
15
|
+
"cli"
|
|
16
|
+
],
|
|
17
|
+
"bin": {
|
|
18
|
+
"scrum-skills": "./bin/scrum-skills.mjs",
|
|
19
|
+
"scsk": "./bin/scrum-skills.mjs"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"validate": "node tools/validate.mjs",
|
|
23
|
+
"serve": "node tools/serve.mjs",
|
|
24
|
+
"test": "node --test",
|
|
25
|
+
"dev": "pnpm --dir apps/board run dev",
|
|
26
|
+
"build": "node scripts/build-board.mjs",
|
|
27
|
+
"prepublishOnly": "node scripts/build-board.mjs"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"bin/",
|
|
31
|
+
"tools/",
|
|
32
|
+
"templates/",
|
|
33
|
+
".agents/",
|
|
34
|
+
"assets/",
|
|
35
|
+
"docs/"
|
|
36
|
+
],
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18"
|
|
39
|
+
},
|
|
40
|
+
"license": "MIT"
|
|
41
|
+
}
|
package/templates/AGENTS.md
CHANGED
|
@@ -30,6 +30,17 @@
|
|
|
30
30
|
node tools/serve.mjs # http://localhost:4173 看板 / 燃尽图 / story 追溯链
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
7. **每次功能开发完毕必须交工汇报**。task 推到 `done` 之后、向用户回话之前,把本次交付写进 **`agile/last-change.json`**(结构见 `.agents/skills/scrum-planning/references/schema.md` 第 4 节)。**写之前先查 git**:文件已提交就整份覆盖;还有没提交的改动就把本次结果并进旧记录,别冲掉还没入库的那一次。用 `node tools/last-change.mjs write <记录.json>` 写,它自己判状态、合并、写后校验、失败回滚。然后按同一顺序告诉用户:
|
|
34
|
+
1. 本次涉及的故事与任务:新增还是状态变更、变更内容、对应涉及文件(用表格);
|
|
35
|
+
2. 额外做了什么事情(计划外的修复、文档、重构);
|
|
36
|
+
3. 验证了哪些结果(命令 / 手工核对的结论,含没验到的边界);
|
|
37
|
+
4. 调试访问地址与账号密码;
|
|
38
|
+
5. 测试前的准备动作(装依赖、起服务、灌数据,带命令);
|
|
39
|
+
6. 单独列出每个测试场景:测试步骤 + 验收标准;
|
|
40
|
+
7. 最后的说明(口径、已知限制、遗留项)。
|
|
41
|
+
|
|
42
|
+
这七项按项目实际情况给——没有账号体系就不提账号,没有前端入口就不提地址,没有的就省略,**但不许编,也不许只回一句「做完了」**。看板「最后更新」(`/last-change`)页渲染的就是这个文件。
|
|
43
|
+
|
|
33
44
|
## 状态机(摘要)
|
|
34
45
|
|
|
35
46
|
- story: `draft → ready → in-progress → review → done`;不做就走 `cancelled`(已取消,终态,不要求验收与任务全 done)
|
|
@@ -44,9 +55,11 @@
|
|
|
44
55
|
| `agile/backlog.json` | 史诗 epics + 用户故事 stories(story 内联 tasks) |
|
|
45
56
|
| `agile/sprints.json` | 迭代 sprints + 里程碑 milestones(MVP 节点 = `kind: "mvp"`) |
|
|
46
57
|
| `agile/journal.json` | 每个 task 一条 TDD 实施日志(内联 entries) |
|
|
47
|
-
| `
|
|
58
|
+
| `agile/last-change.json` | 最近一次交付的汇报(已提交才覆盖,未提交则合并):变更清单 / 额外工作 / 验证 / 入口与账号 / 测试前准备 / 测试场景 / 说明 |
|
|
59
|
+
| `tools/validate.mjs` | 数据校验(引用完整性 / 状态机 / TDD 纪律 / 里程碑达成 / 交付说明) |
|
|
60
|
+
| `tools/last-change.mjs` | 交付说明的写入工具:`check` 判 git 状态、`write` 自动覆盖或合并 + 写后校验回滚 |
|
|
48
61
|
| `tools/serve.mjs` | 看板 server(`/api/agile` + 托管 Nuxt 静态产物) |
|
|
49
|
-
| `apps/board/` | Nuxt 看板源码(看板 / 甘特图 / 里程碑 / 燃尽图 / 故事追溯) |
|
|
62
|
+
| `apps/board/` | Nuxt 看板源码(看板 / 最后更新 / 甘特图 / 里程碑 / 燃尽图 / 故事追溯) |
|
|
50
63
|
| `assets/board/` | 看板静态产物,由 `serve` 托管;**不进 git**,用 `pnpm board:build` 重建(`npm publish` 的 prepack 会自动跑一次) |
|
|
51
64
|
| `scripts/build-board.mjs` | 构建看板:`apps/board` → `assets/board` |
|
|
52
65
|
| `tests/` | 校验器回归测试(`pnpm test`,18 个用例) |
|