scrum-skills 0.3.0 → 0.3.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.
Files changed (33) hide show
  1. package/.agents/skills/scrum-planning/references/schema.md +82 -4
  2. package/.agents/skills/scrum-report/SKILL.md +4 -1
  3. package/.agents/skills/scrum-sprint/SKILL.md +1 -1
  4. package/.agents/skills/scrum-tdd/SKILL.md +19 -5
  5. package/README.md +11 -7
  6. package/assets/board/200.html +1 -1
  7. package/assets/board/404.html +1 -1
  8. package/assets/board/_nuxt/BbwJq5pb.js +1 -0
  9. package/assets/board/_nuxt/{CkF353aX.js → DkI1Qxpp.js} +49 -49
  10. package/assets/board/_nuxt/S08nFESZ.js +3 -0
  11. package/assets/board/_nuxt/builds/latest.json +1 -1
  12. package/assets/board/_nuxt/builds/meta/8e23aec9-5b67-4569-b8bf-d4f07e50ffdf.json +1 -0
  13. package/assets/board/_nuxt/{entry.Dx3CNA--.css → entry.CKHePurH.css} +1 -1
  14. package/assets/board/_nuxt/last-change.1Su4GrCN.css +1 -0
  15. package/assets/board/_nuxt/tests.dXlUX16A.css +1 -0
  16. package/assets/board/burndown/index.html +1 -1
  17. package/assets/board/epics/index.html +1 -1
  18. package/assets/board/gantt/index.html +1 -1
  19. package/assets/board/index.html +1 -1
  20. package/assets/board/last-change/index.html +1 -1
  21. package/assets/board/milestones/index.html +1 -1
  22. package/assets/board/tests/index.html +1 -0
  23. package/bin/scrum-skills.mjs +4 -2
  24. package/package.json +1 -1
  25. package/templates/AGENTS.md +12 -7
  26. package/tools/agile-tools.mjs +9 -3
  27. package/tools/ai.mjs +5 -5
  28. package/tools/git-commit.mjs +216 -0
  29. package/tools/projects.mjs +23 -2
  30. package/tools/validate.mjs +161 -0
  31. package/assets/board/_nuxt/DrprggWq.js +0 -3
  32. package/assets/board/_nuxt/builds/meta/d7f0931f-32b3-4c23-b05f-7cbf5851b226.json +0 -1
  33. package/assets/board/_nuxt/last-change.8FndoiOt.css +0 -1
@@ -0,0 +1 @@
1
+ .lc[data-v-0c6b2b03]{gap:14px;display:grid}.lc [id^=lc-][data-v-0c6b2b03]{scroll-margin-top:14px}.lc-nav[data-v-0c6b2b03]{flex-wrap:wrap;gap:6px;padding:0 2px;display:flex}.lc-nav-link[data-v-0c6b2b03]{border:1px solid var(--nv-line,var(--line));background:var(--nv-bg,#fff);height:28px;color:var(--nv-ink,var(--ink-3));border-radius:999px;align-items:center;gap:6px;padding:0 9px;font-size:11.4px;font-weight:580;transition:box-shadow .16s,transform .16s;display:inline-flex}.lc-nav-link.tone-violet[data-v-0c6b2b03]{--nv-bg:var(--violet-soft);--nv-line:var(--violet-line);--nv-ink:var(--violet-ink)}.lc-nav-link.tone-peach[data-v-0c6b2b03]{--nv-bg:var(--peach);--nv-line:var(--peach-line);--nv-ink:#a5382f}.lc-nav-link.tone-mint[data-v-0c6b2b03]{--nv-bg:#f0fbdf;--nv-line:#dcf0bb;--nv-ink:#4f6f24}.lc-nav-link.tone-sky[data-v-0c6b2b03]{--nv-bg:#eef5fd;--nv-line:var(--sky-line);--nv-ink:#2c5f96}.lc-nav-link.tone-amber[data-v-0c6b2b03]{--nv-bg:#fdf4e2;--nv-line:var(--amber-line);--nv-ink:#8a6116}.lc-nav-link.tone-teal[data-v-0c6b2b03]{--nv-bg:#e4f6f3;--nv-line:#bce5de;--nv-ink:#1f6f63}.lc-nav-link.tone-slate[data-v-0c6b2b03]{--nv-bg:var(--sunken);--nv-line:var(--line-2);--nv-ink:var(--ink-2)}.lc-nav-link.tone-rose[data-v-0c6b2b03]{--nv-bg:#fdeceb;--nv-line:var(--rose-line);--nv-ink:#b23a4b}.lc-nav-link[data-v-0c6b2b03]:hover{box-shadow:0 7px 16px -12px var(--nv-ink,#8a8a8a);transform:translateY(-1px)}.lc-nav-ic[data-v-0c6b2b03]{opacity:.72;flex:none;width:13px;height:13px}.act[data-v-0c6b2b03],.ent-id[data-v-0c6b2b03],.fchip[data-v-0c6b2b03],.fl[data-v-0c6b2b03],.lc-nav-lb[data-v-0c6b2b03],.ring-in span[data-v-0c6b2b03],.rule-state[data-v-0c6b2b03],.s-title[data-v-0c6b2b03],.u-url[data-v-0c6b2b03]{white-space:nowrap}.lc-nav-ct[data-v-0c6b2b03]{min-width:16px;color:inherit;text-align:center;font-variant-numeric:tabular-nums;background:#ffffffd1;border-radius:999px;flex:none;padding:0 5px;font-size:9.6px;font-weight:700;line-height:15px}.lc-nav-link:hover .lc-nav-ct[data-v-0c6b2b03]{background:#fff}.lc-rule[data-v-0c6b2b03]{border:1px solid var(--line);box-shadow:var(--shadow-1);background:linear-gradient(#fbfaff,#fff);border-radius:14px;gap:7px;margin-bottom:14px;padding:10px 13px 11px;display:grid}.rule-top[data-v-0c6b2b03]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.rule-ic[data-v-0c6b2b03]{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-0c6b2b03]{width:14px;height:14px}.rule-title[data-v-0c6b2b03]{letter-spacing:.01em;color:var(--ink);font-size:12px;font-weight:680}.rule-file[data-v-0c6b2b03]{color:var(--ink-4);font-size:10px}.rule-state[data-v-0c6b2b03]{border:1px solid var(--line-2);height:22px;color:var(--ink-2);background:#fff;border-radius:999px;align-items:center;gap:5px;margin-left:auto;padding:0 9px;font-size:10.4px;font-weight:640;display:inline-flex}.rule-state .mono[data-v-0c6b2b03]{color:var(--ink-3);font-size:9.8px;font-weight:560}.rule-dot[data-v-0c6b2b03]{background:var(--ink-4);border-radius:999px;flex:none;width:6px;height:6px}.rule-dot.tone-ok[data-v-0c6b2b03]{background:#74a53c;box-shadow:0 0 0 3px #74a53c24}.rule-dot.tone-warn[data-v-0c6b2b03]{background:#d79a2b;box-shadow:0 0 0 3px #d79a2b24}.rule-dot.tone-neutral[data-v-0c6b2b03]{background:#b3b1aa;box-shadow:0 0 0 3px #b3b1aa24}.rule-cases[data-v-0c6b2b03]{gap:3px;margin:0;padding:0;list-style:none;display:grid}.rule-case[data-v-0c6b2b03]{color:var(--ink-3);border:1px solid #0000;border-radius:9px;align-items:baseline;gap:7px;padding:4px 9px;font-size:11.2px;line-height:1.55;display:flex}.rule-case.on[data-v-0c6b2b03]{color:var(--ink-2);background:var(--sunken)}.case-when[data-v-0c6b2b03]{flex:none;min-width:40px;font-weight:680}.rule-case.on .case-when[data-v-0c6b2b03]{color:var(--ink)}.case-arrow[data-v-0c6b2b03]{width:11px;height:11px;color:var(--ink-4);flex:none;align-self:center}.rule-case.on .case-arrow[data-v-0c6b2b03]{color:var(--ink-3)}.case-then[data-v-0c6b2b03],.hero-body[data-v-0c6b2b03],.two[data-v-0c6b2b03]>*{min-width:0}.is-ok .rule-ic[data-v-0c6b2b03]{color:#4f6f24;background:#f0fbdf;border-color:#dcf0bb}.is-ok .rule-case.on[data-v-0c6b2b03]{background:#f4fbea;border-color:#dcf0bb}.is-warn .rule-ic[data-v-0c6b2b03]{color:#8a6116;background:#fdf4e2;border-color:#f3e2b8}.is-warn .rule-case.on[data-v-0c6b2b03]{background:#fdf6e8;border-color:#f3e2b8}.sec[data-v-0c6b2b03]{border-radius:20px;overflow:hidden}.two[data-v-0c6b2b03]{flex-wrap:wrap;align-items:stretch;gap:14px;display:flex}.two[data-v-0c6b2b03]>*{flex:336px}.s-hd[data-v-0c6b2b03]{align-items:center;gap:9px;padding:13px 18px 12px;display:flex}.s-hd.solo[data-v-0c6b2b03]{padding:2px 2px 0}.s-ic[data-v-0c6b2b03]{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-0c6b2b03]{color:#4f6f24;background:#f0fbdf;border-color:#dcf0bb}.s-ic.tone-amber[data-v-0c6b2b03]{color:#8a6116;background:#fdf4e2;border-color:#f3e2b8}.s-ic.tone-sky[data-v-0c6b2b03]{color:#2c5f96;background:#eef5fd;border-color:#d7e6f9}.s-svg[data-v-0c6b2b03]{width:14px;height:14px}.s-title[data-v-0c6b2b03]{letter-spacing:-.012em;font-size:14px;font-weight:650}.s-count[data-v-0c6b2b03]{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-0c6b2b03]{color:var(--ink-4);text-align:right;margin-left:auto;font-size:11px}.s-copy[data-v-0c6b2b03]{margin-left:2px}.s-copy.ok[data-v-0c6b2b03]{color:#47762b;background:#e9f8dd;border-color:#d5efc2}.rule-btn.s-commit[data-v-0c6b2b03]{border-color:var(--ink-card);background:var(--ink-card);color:#fff}.rule-btn.s-commit[data-v-0c6b2b03]:hover{color:#fff;background:#000;border-color:#000}.s-commit .rule-btn-ic[data-v-0c6b2b03]{color:#fff;opacity:.88}.sec-bd[data-v-0c6b2b03],.sec-empty[data-v-0c6b2b03]{padding:0 18px 16px}.sec-empty[data-v-0c6b2b03]{font-size:12px}.micro[data-v-0c6b2b03]{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-size:9.6px;font-weight:660}.lc-hero[data-v-0c6b2b03]{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-0c6b2b03]: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-0c6b2b03]{flex:1}.hero-kicker[data-v-0c6b2b03]{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-0c6b2b03]{background:var(--violet);border-radius:999px;width:6px;height:6px;box-shadow:0 0 0 3px #6d4ff024}.k-sep[data-v-0c6b2b03]{background:#dbd0f6;width:1px;height:10px}.k-date[data-v-0c6b2b03]{text-transform:none;color:#6f5aa8;font-size:10.6px;font-weight:600}.k-date[data-v-0c6b2b03],.k-time[data-v-0c6b2b03]{letter-spacing:.02em}.k-time[data-v-0c6b2b03]{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-0c6b2b03]:before{content:"";background:#c9bce6;border-radius:999px;width:3px;height:3px}.k-today[data-v-0c6b2b03]{border:1px solid var(--violet-line);letter-spacing:.06em;color:var(--violet-ink);background:#fff}.k-merged[data-v-0c6b2b03],.k-today[data-v-0c6b2b03]{border-radius:999px;padding:0 6px;font-size:9.4px;line-height:15px}.k-merged[data-v-0c6b2b03]{color:#8a6116;letter-spacing:.03em;text-transform:none;cursor:help;background:#fdf4e2;border:1px solid #f3e2b8}.hero-title[data-v-0c6b2b03]{letter-spacing:-.026em;color:#241b3f;margin:9px 0 0;font-size:21px;font-weight:665;line-height:1.34}.hero-sum[data-v-0c6b2b03]{color:#574c72;max-width:92ch;margin-top:7px;font-size:12.8px;line-height:1.68}.hero-meta[data-v-0c6b2b03]{color:#6b5f85;flex-wrap:wrap;align-items:center;gap:11px;margin-top:13px;font-size:11.4px;display:flex}.hero-meta b[data-v-0c6b2b03]{color:#2c2246;margin-right:2px;font-weight:690}.meta-sep[data-v-0c6b2b03]{background:#c3b4e2;border-radius:999px;width:3px;height:3px}.hero-aside[data-v-0c6b2b03]{flex:none;justify-items:center;display:grid}.ring[data-v-0c6b2b03]{--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-0c6b2b03]{background:conic-gradient(from -90deg,#dfa437 calc(var(--pct) * 1%),#f4e8d2 0)}.ring-in[data-v-0c6b2b03]{text-align:center;background:#fff;border-radius:50%;place-content:center;gap:1px;width:78px;height:78px;display:grid}.ring-in b[data-v-0c6b2b03]{letter-spacing:-.03em;color:#2a1f47;font-size:17px;font-weight:680;line-height:1.15}.ring-in b small[data-v-0c6b2b03]{letter-spacing:0;color:var(--ink-4);font-size:10.5px;font-weight:600}.ring-in span[data-v-0c6b2b03]{letter-spacing:.04em;color:var(--ink-3);font-size:9.2px}.tbl-wrap[data-v-0c6b2b03]{padding:0 8px 8px;overflow-x:auto}.lc-tbl[data-v-0c6b2b03]{min-width:640px}.lc-tbl .c-ent[data-v-0c6b2b03]{width:246px}.lc-tbl .c-act[data-v-0c6b2b03]{width:92px}.lc-tbl .c-file[data-v-0c6b2b03]{width:218px}.lc-tbl thead th[data-v-0c6b2b03]{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-0c6b2b03]{cursor:default}.lc-tbl tbody td[data-v-0c6b2b03]{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-0c6b2b03]{border-bottom:0}.lc-tbl tbody tr:hover td[data-v-0c6b2b03]{background:#fbfaff}.ent-top[data-v-0c6b2b03]{align-items:center;gap:6px;display:flex}.kind[data-v-0c6b2b03]{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-0c6b2b03]{color:#5433cf;background:#efe9fe}.kind-task[data-v-0c6b2b03]{color:#6b6f77;background:#f1f1ee}.ent-id[data-v-0c6b2b03]{color:#6d5aa8;font-size:10.6px}.ent-id[data-v-0c6b2b03]:hover{color:var(--violet-ink);text-underline-offset:2px;text-decoration:underline}.ent-title[data-v-0c6b2b03]{color:var(--ink);margin-top:4px;font-size:12.5px;font-weight:590;line-height:1.5}.act[data-v-0c6b2b03]{border-radius:999px;padding:0 7px;font-size:10px;font-weight:660;line-height:17px;display:inline-block}.act-added[data-v-0c6b2b03]{color:#46742a;background:#e9f8dd}.act-updated[data-v-0c6b2b03]{color:#2a5f9e;background:#e8f1fd}.act-removed[data-v-0c6b2b03]{color:#a83a32;background:#fdeae9}.flow[data-v-0c6b2b03]{color:var(--ink-3);flex-wrap:wrap;align-items:center;gap:3px;margin-top:5px;font-size:10px;line-height:1.4;display:flex}.flow i[data-v-0c6b2b03]{color:var(--ink-4);font-style:normal}.cell-note[data-v-0c6b2b03]{color:var(--ink-2);font-size:12.1px;line-height:1.62}.chips[data-v-0c6b2b03]{flex-wrap:wrap;gap:4px;display:flex}.fchip[data-v-0c6b2b03]{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-0c6b2b03]{display:grid}.x-item[data-v-0c6b2b03]{border-top:1px dashed var(--line-2);gap:9px;padding:11px 0;display:flex}.x-item[data-v-0c6b2b03]:first-child{border-top:0;padding-top:0}.x-mark[data-v-0c6b2b03]{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-0c6b2b03],.u-link[data-v-0c6b2b03],.v-body[data-v-0c6b2b03],.x-body[data-v-0c6b2b03]{min-width:0}.x-title[data-v-0c6b2b03]{font-size:12.4px;font-weight:600;line-height:1.55}.x-detail[data-v-0c6b2b03]{color:var(--ink-2);margin-top:3px;font-size:11.8px;line-height:1.62}.x-files[data-v-0c6b2b03]{margin-top:6px}.lc-checks[data-v-0c6b2b03]{display:grid}.v-item[data-v-0c6b2b03]{border-top:1px dashed var(--line-2);align-items:flex-start;gap:9px;padding:10px 0;display:flex}.v-item[data-v-0c6b2b03]:first-child{border-top:0;padding-top:0}.v-ic[data-v-0c6b2b03]{border-radius:7px;flex:none;place-items:center;width:20px;height:20px;margin-top:1px;display:grid}.u-go[data-v-0c6b2b03],.v-svg[data-v-0c6b2b03]{width:12px;height:12px}.v-ic.v-pass[data-v-0c6b2b03]{color:#4b7a2c;background:#e9f8dd}.v-ic.v-fail[data-v-0c6b2b03]{color:#ab3a32;background:#fdeae9}.v-ic.v-partial[data-v-0c6b2b03]{color:#8a6116;background:#fdf3dd}.v-ic.v-skipped[data-v-0c6b2b03]{color:#82868e;background:#f1f1ee}.v-body[data-v-0c6b2b03]{flex:1}.v-what[data-v-0c6b2b03]{word-break:break-word;font-size:12.2px;font-weight:590;line-height:1.5}.v-detail[data-v-0c6b2b03]{color:var(--ink-3);margin-top:2px;font-size:11.4px;line-height:1.55}.v-res[data-v-0c6b2b03]{letter-spacing:.02em;flex:none;margin-top:2px;font-size:10.2px;font-weight:660}.v-res.v-pass[data-v-0c6b2b03]{color:#4b7a2c}.v-res.v-fail[data-v-0c6b2b03]{color:#ab3a32}.v-res.v-partial[data-v-0c6b2b03]{color:#8a6116}.v-res.v-skipped[data-v-0c6b2b03]{color:#82868e}.acc-grid[data-v-0c6b2b03]{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));align-items:start;gap:16px 22px;display:grid}.acc-col[data-v-0c6b2b03]{align-content:start;gap:9px;display:grid}.a-item[data-v-0c6b2b03],.u-item[data-v-0c6b2b03]{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-0c6b2b03]:hover,.u-item[data-v-0c6b2b03]:hover{border-color:var(--line-3);background:#fff}.a-head[data-v-0c6b2b03],.u-head[data-v-0c6b2b03]{align-items:center;gap:6px;display:flex}.u-link[data-v-0c6b2b03]{align-items:center;gap:4px;display:inline-flex}.u-label[data-v-0c6b2b03]{font-size:12.2px;font-weight:640}.u-go[data-v-0c6b2b03]{color:var(--violet);flex:none;transition:transform .14s}.u-link:hover .u-go[data-v-0c6b2b03]{transform:translate(1px,-1px)}.u-link:hover .u-label[data-v-0c6b2b03]{color:var(--violet-ink)}.u-url[data-v-0c6b2b03]{color:var(--sky);text-overflow:ellipsis;margin-top:3px;font-size:11.3px;overflow:hidden}.u-note[data-v-0c6b2b03]{color:var(--ink-3);margin-top:3px;font-size:10.9px;line-height:1.5}.a-role[data-v-0c6b2b03]{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-0c6b2b03]{color:var(--ink);font-size:11.8px}.a-line[data-v-0c6b2b03]{align-items:center;gap:8px;margin-top:6px;display:flex}.a-key[data-v-0c6b2b03]{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-size:9.4px;font-weight:660}.a-pass[data-v-0c6b2b03]{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-0c6b2b03]{font-size:11.2px}.a-note[data-v-0c6b2b03]{margin-top:5px;font-size:10.9px}.a-note[data-v-0c6b2b03],.cpy[data-v-0c6b2b03]{color:var(--ink-3)}.cpy[data-v-0c6b2b03]{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-0c6b2b03]:hover{border-color:var(--line-2);color:var(--ink);background:#fff}.cpy.ok[data-v-0c6b2b03]{color:#47762b;background:#e9f8dd;border-color:#d5efc2}.cpy-ic[data-v-0c6b2b03]{width:11px;height:11px}.steps[data-v-0c6b2b03]{counter-reset:st;gap:13px;margin:0;padding:2px 18px 16px;list-style:none;display:grid}.steps>li[data-v-0c6b2b03]{counter-increment:st;padding-left:33px;position:relative}.steps>li[data-v-0c6b2b03]: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-0c6b2b03]: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-0c6b2b03]{padding-top:1px;font-size:12.5px;font-weight:590;line-height:1.5}.cmd-row[data-v-0c6b2b03]{flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;display:flex}.cmd[data-v-0c6b2b03]{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-0c6b2b03]{margin-left:0}.step-note[data-v-0c6b2b03]{color:var(--ink-3);margin-top:4px;font-size:11.2px;line-height:1.55}.lc-sc-sec[data-v-0c6b2b03]{gap:11px;display:grid}.lc-sc-grid[data-v-0c6b2b03]{flex-wrap:wrap;align-items:stretch;gap:12px;display:flex}.lc-sc-grid[data-v-0c6b2b03]>*{flex:330px;min-width:0}.sc[data-v-0c6b2b03]{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-0c6b2b03]:hover{border-color:#e3d9f8;transform:translateY(-1px);box-shadow:0 16px 34px -26px #231a3d73}.sc-hd[data-v-0c6b2b03]{align-items:flex-start;gap:8px;padding:12px 14px 9px;display:flex}.sc-id[data-v-0c6b2b03]{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-0c6b2b03]{letter-spacing:-.008em;font-size:12.9px;font-weight:630;line-height:1.45}.sc-body[data-v-0c6b2b03]{padding:0 14px 10px}.lc-sc-steps[data-v-0c6b2b03]{counter-reset:ss;gap:5px;margin:6px 0 0;padding:0;list-style:none;display:grid}.lc-sc-steps li[data-v-0c6b2b03]{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-0c6b2b03]: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-0c6b2b03]{border-top:1px dashed var(--line-2);background:linear-gradient(#fbfdf6,#fff);margin-top:auto;padding:10px 14px 12px}.sc-acc-h[data-v-0c6b2b03]{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-0c6b2b03]{flex:none;width:11px;height:11px}.sc-acc-t[data-v-0c6b2b03]{color:#33401c;margin-top:4px;font-size:12px;line-height:1.62}.sc-foot[data-v-0c6b2b03]{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-0c6b2b03]{gap:6px;display:flex}.lc-notes[data-v-0c6b2b03]{gap:8px;margin:0;padding:0;list-style:none;display:grid}.lc-notes li[data-v-0c6b2b03]{color:var(--ink-2);padding-left:13px;font-size:12.1px;line-height:1.66;position:relative}.lc-notes li[data-v-0c6b2b03]: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-0c6b2b03]:before{background:#e8bb5e}.sec-warn .s-ic[data-v-0c6b2b03]{color:#8a6116;background:#fdf4e2;border-color:#f3e2b8}.lc-empty[data-v-0c6b2b03]{text-align:center;border-radius:24px;justify-items:center;gap:9px;padding:52px 24px 46px;display:grid}.em-ic[data-v-0c6b2b03]{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-0c6b2b03]{width:21px;height:21px}.em-title[data-v-0c6b2b03]{letter-spacing:-.02em;margin-top:2px;font-size:16px;font-weight:660}.em-sub[data-v-0c6b2b03]{max-width:54ch;font-size:12.6px;line-height:1.7}.em-path[data-v-0c6b2b03],.em-sub[data-v-0c6b2b03]{color:var(--ink-2)}.em-path[data-v-0c6b2b03]{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-0c6b2b03]{color:var(--ink-4);font-size:11px}.rule-btn[data-v-0c6b2b03]{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-0c6b2b03]:hover{border-color:var(--violet-line);background:var(--violet-soft);color:var(--violet-ink)}.rule-btn i[data-v-0c6b2b03]{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-0c6b2b03],.rule-btn-ic[data-v-0c6b2b03]{width:12px;height:12px}.lc-hist-bar[data-v-0c6b2b03]{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-0c6b2b03],.lc-hist-bar[data-v-0c6b2b03]{border:1px solid var(--violet-line);align-items:center}.hist-badge[data-v-0c6b2b03]{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-0c6b2b03]{color:var(--ink-4);flex:none;font-size:10.2px}.lc-hist-tabs[data-v-0c6b2b03]{flex:1;align-items:center;gap:4px;min-width:0;padding:1px 0;display:flex;overflow-x:auto}.lc-hist-tabs[data-v-0c6b2b03]::-webkit-scrollbar{height:3px}.lc-hist-tabs[data-v-0c6b2b03]::-webkit-scrollbar-thumb{background:#dcd8ef;border-radius:999px}.hist-tab[data-v-0c6b2b03]{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-0c6b2b03]:hover{border-color:var(--violet-line);color:var(--violet-ink)}.hist-tab.on[data-v-0c6b2b03]{border-color:var(--violet);background:var(--violet-soft);color:var(--violet-ink);font-weight:680}.hist-tab i[data-v-0c6b2b03]{color:var(--ink-4);font-size:9.2px;font-style:normal;font-weight:560}.hist-tab.on i[data-v-0c6b2b03]{color:#7a63b8}.lc-hist-mask[data-v-0c6b2b03]{z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#14121e6b;place-items:center;padding:24px;animation:.14s lc-fade-0c6b2b03;display:grid;position:fixed;inset:0}.lc-hist[data-v-0c6b2b03]{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-0c6b2b03;display:flex;overflow:hidden;box-shadow:0 40px 80px -40px #14121e8c}@keyframes lc-fade-0c6b2b03{0%{opacity:0}to{opacity:1}}@keyframes lc-pop-0c6b2b03{0%{opacity:0;transform:translateY(6px)scale(.99)}to{opacity:1;transform:none}}.lc-hist-hd[data-v-0c6b2b03]{border-bottom:1px solid var(--line);align-items:flex-start;gap:12px;padding:16px 18px 12px;display:flex}.lc-hist-hd-txt[data-v-0c6b2b03]{min-width:0}.lc-hist-title[data-v-0c6b2b03]{letter-spacing:-.015em;font-size:15px;font-weight:660}.lc-hist-sub[data-v-0c6b2b03]{color:var(--ink-3);margin-top:3px;font-size:11.2px}.lc-hist-x[data-v-0c6b2b03]{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-0c6b2b03]:hover{background:var(--sunken);color:var(--ink)}.lc-hist-x-ic[data-v-0c6b2b03]{width:14px;height:14px}.lc-hist-list[data-v-0c6b2b03]{gap:2px;padding:8px;display:grid;overflow-y:auto}.hist-item[data-v-0c6b2b03]{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-0c6b2b03]:hover{background:var(--sunken-2);border-color:var(--line)}.hist-item.on[data-v-0c6b2b03]{background:var(--violet-soft);border-color:var(--violet-line)}.hist-item[data-v-0c6b2b03]:disabled{opacity:.6;cursor:wait}.hist-item-dot[data-v-0c6b2b03]{background:#d3cfe6;border-radius:999px;flex:none;width:6px;height:6px}.hist-item-dot.live[data-v-0c6b2b03]{background:#6aa844;box-shadow:0 0 0 3px #6aa84429}.hist-item-main[data-v-0c6b2b03]{flex:1;gap:2px;min-width:0;display:grid}.hist-item-main b[data-v-0c6b2b03]{text-overflow:ellipsis;white-space:nowrap;font-size:12.4px;font-weight:600;overflow:hidden}.hist-item-main i[data-v-0c6b2b03]{color:var(--ink-4);font-size:10.2px;font-style:normal}.hist-item-hash[data-v-0c6b2b03]{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-0c6b2b03]{text-align:center;padding:18px 12px;font-size:12px}.lc-hist-err[data-v-0c6b2b03]{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-0c6b2b03]{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-0c6b2b03]{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-0c6b2b03]:hover{background:#000}.lc-commit[data-v-0c6b2b03]{width:min(640px,100%)}.cm-body[data-v-0c6b2b03]{gap:7px;padding:12px 18px 14px;display:grid;overflow-y:auto}.cm-msg[data-v-0c6b2b03]{background:var(--sunken);color:var(--ink-2);white-space:pre-wrap;word-break:break-word;padding:10px 12px;font-size:11.4px;line-height:1.68;overflow:auto}.cm-files[data-v-0c6b2b03],.cm-msg[data-v-0c6b2b03]{border-radius:var(--r-md);border:1px solid var(--line-2);max-height:168px;margin:0}.cm-files[data-v-0c6b2b03]{background:#fff;gap:0;padding:0;list-style:none;display:grid;overflow-y:auto}.cm-file[data-v-0c6b2b03]{border-top:1px dashed var(--line-2);align-items:baseline;gap:7px;padding:5px 10px;display:flex}.cm-file[data-v-0c6b2b03]:first-child{border-top:0}.cm-code[data-v-0c6b2b03]{text-align:center;border-radius:4px;flex:none;min-width:20px;padding:0 4px;font-size:9.4px;font-weight:700;line-height:15px}.cm-new[data-v-0c6b2b03]{color:#46742a;background:#e9f8dd}.cm-mod[data-v-0c6b2b03]{color:#2a5f9e;background:#e8f1fd}.cm-path[data-v-0c6b2b03]{color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;font-size:10.9px;overflow:hidden}.cm-hint[data-v-0c6b2b03]{margin:0;font-size:11.6px;line-height:1.55}.cm-hint.warn[data-v-0c6b2b03]{color:#a5382f}.cm-done[data-v-0c6b2b03]{gap:10px;padding:16px 18px 18px;display:flex}.cm-done-ic[data-v-0c6b2b03]{color:#4b7a2c;background:#e9f8dd;border:1px solid #d5efc2;border-radius:10px;flex:none;place-items:center;width:30px;height:30px;display:grid}.cm-done-svg[data-v-0c6b2b03]{width:16px;height:16px}.cm-done-bd[data-v-0c6b2b03]{min-width:0}.cm-done-t[data-v-0c6b2b03]{font-size:13.4px;font-weight:660}.cm-done-s[data-v-0c6b2b03]{color:var(--ink-2);margin-top:3px;font-size:12.2px;line-height:1.55}.cm-done-n[data-v-0c6b2b03]{color:var(--ink-4);margin-top:4px;font-size:10.8px}.cm-acts[data-v-0c6b2b03]{align-items:center;gap:8px;display:inline-flex}.cm-go[data-v-0c6b2b03]{border:1px solid var(--violet);background:var(--violet);color:#fff;cursor:pointer;border-radius:999px;flex:none;height:26px;padding:0 14px;font-size:11.4px;font-weight:620;transition:filter .14s}.cm-go[data-v-0c6b2b03]:hover:not(:disabled){filter:brightness(1.08)}.cm-go[data-v-0c6b2b03]:disabled{opacity:.45;cursor:not-allowed}.hist-close[data-v-0c6b2b03]:disabled{opacity:.5;cursor:not-allowed}@media (width<=900px){.lc-hero[data-v-0c6b2b03]{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:4px 14px;padding:18px;display:grid}.hero-body[data-v-0c6b2b03]{grid-column:1}.hero-aside[data-v-0c6b2b03]{grid-area:1/2}.ring[data-v-0c6b2b03]{width:72px;height:72px}.ring-in[data-v-0c6b2b03]{width:58px;height:58px}.ring-in b[data-v-0c6b2b03]{font-size:14px}.ring-in span[data-v-0c6b2b03]{font-size:8.2px}.s-hint[data-v-0c6b2b03]{display:none}.s-copy[data-v-0c6b2b03]{margin-left:auto}.s-hd[data-v-0c6b2b03]{padding:12px 14px 10px}.sec-bd[data-v-0c6b2b03],.sec-empty[data-v-0c6b2b03],.steps[data-v-0c6b2b03]{padding-left:14px;padding-right:14px}}@media (width<=700px){.hist-readonly[data-v-0c6b2b03]{display:none}.lc-hist-bar .rule-btn[data-v-0c6b2b03]{order:2;margin-left:auto}.lc-hist-tabs[data-v-0c6b2b03]{flex-basis:100%;order:3}}@media (width<=560px){.lc-rule[data-v-0c6b2b03]{padding:10px 12px}.ring-in span[data-v-0c6b2b03],.rule-file[data-v-0c6b2b03]{display:none}.lc-hero[data-v-0c6b2b03]{gap:4px 10px;padding:15px}.hero-title[data-v-0c6b2b03]{letter-spacing:-.02em;font-size:17.5px}.hero-sum[data-v-0c6b2b03]{font-size:12.2px;line-height:1.62}.hero-meta[data-v-0c6b2b03]{gap:8px;margin-top:10px;font-size:10.8px}.ring[data-v-0c6b2b03]{width:56px;height:56px}.ring-in[data-v-0c6b2b03]{width:46px;height:46px}.ring-in b[data-v-0c6b2b03]{font-size:12.5px}.s-title[data-v-0c6b2b03]{font-size:13.2px}}
@@ -0,0 +1 @@
1
+ .tests-page>.card[data-v-d69ddc53],.tests-page>.kpis[data-v-d69ddc53]{margin-bottom:12px;scroll-margin-top:96px}.layers[data-v-d69ddc53],.page-anchor[data-v-d69ddc53],.tests-page>.callout[data-v-d69ddc53]{margin-bottom:12px}.page-anchor[data-v-d69ddc53]{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.anchor-label[data-v-d69ddc53]{color:var(--ink-4);font-size:11px}.anchor-chip[data-v-d69ddc53]{border:1px solid var(--line);height:26px;color:var(--ink-2);background:#fff;border-radius:999px;align-items:center;padding:0 10px;font-size:11.2px;display:inline-flex}.anchor-chip[data-v-d69ddc53]:hover{border-color:var(--violet-line);background:var(--violet-soft);color:var(--violet-ink)}.layers[data-v-d69ddc53]{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.layer-card[data-v-d69ddc53]{padding:12px 14px}.layer-hd[data-v-d69ddc53]{align-items:center;gap:7px;font-size:12.6px;display:flex}.layer-dot[data-v-d69ddc53]{border-radius:999px;width:8px;height:8px}.layer-body[data-v-d69ddc53]{flex-wrap:wrap;gap:10px;margin-top:8px;font-size:11.4px;display:flex}.ok[data-v-d69ddc53]{color:var(--green)}.bad[data-v-d69ddc53]{color:var(--rose)}.panel[data-v-d69ddc53]{margin:0}.cover-grid[data-v-d69ddc53]{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:18px;display:grid}.cover-big[data-v-d69ddc53]{letter-spacing:-.03em;font-size:30px;font-weight:700}.cover-big span[data-v-d69ddc53]{color:var(--ink-4);font-size:14px;font-weight:600}.cover-main .bar[data-v-d69ddc53]{background:var(--sunken-2);border-radius:999px;height:6px;margin:8px 0;overflow:hidden}.cover-main .bar i[data-v-d69ddc53]{background:var(--grad);height:100%;display:block}.cover-sub[data-v-d69ddc53]{color:var(--ink-2);font-size:12px}.cover-side[data-v-d69ddc53]{border-left:1px dashed var(--line-2);align-content:start;gap:6px;padding-left:18px;display:grid}.stat-row[data-v-d69ddc53]{align-items:center;gap:7px;font-size:11.8px;display:flex}.stat-row b[data-v-d69ddc53]{font-family:var(--font-mono);margin-left:auto}.dot[data-v-d69ddc53]{border-radius:999px;width:7px;height:7px}.cases[data-v-d69ddc53],.matrix-wrap[data-v-d69ddc53]{overflow-x:auto}.ttl[data-v-d69ddc53]{margin-left:7px;font-size:12px}.zero[data-v-d69ddc53]{color:var(--ink-4)}.case-search[data-v-d69ddc53]{width:250px;height:30px;margin-left:auto}.filters[data-v-d69ddc53]{flex-wrap:wrap;margin-bottom:10px;display:flex}.chip[data-v-d69ddc53],.filters[data-v-d69ddc53]{align-items:center;gap:5px}.chip[data-v-d69ddc53]{border:1px solid var(--line);height:26px;color:var(--ink-2);background:#fff;border-radius:999px;padding:0 10px;font-size:11.2px;display:inline-flex}.chip.on[data-v-d69ddc53]{background:var(--violet-soft);border-color:var(--violet-line);color:var(--violet-ink);font-weight:650}.chip .n[data-v-d69ddc53]{font-family:var(--font-mono);color:var(--ink-4);font-size:10px}.filters.inline[data-v-d69ddc53]{margin:0 0 0 auto}.sep[data-v-d69ddc53]{background:var(--line-2);width:1px;height:16px;margin:0 4px}.case-row[data-v-d69ddc53]{cursor:pointer}.case-row[data-v-d69ddc53]:hover{background:var(--sunken-2)}.code[data-v-d69ddc53]{color:var(--ink-4);margin-top:2px;font-size:10.2px;display:block}.lv[data-v-d69ddc53]{margin-left:5px;font-size:10.6px}.covers[data-v-d69ddc53]{flex-wrap:wrap;gap:3px;max-width:220px;display:flex}.cov-ref[data-v-d69ddc53]{background:var(--violet-soft);color:var(--violet-ink);border-radius:5px;padding:0 5px;font-size:10px}.detail-row td[data-v-d69ddc53],tr.last td[data-v-d69ddc53]{background:var(--sunken-2)}.detail[data-v-d69ddc53]{gap:5px;padding:4px 0 6px;font-size:11.6px;line-height:1.6;display:grid}.steps[data-v-d69ddc53]{color:var(--ink-2);margin:0;padding-left:18px}.gap-grid[data-v-d69ddc53]{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;display:grid}.h3[data-v-d69ddc53]{color:var(--ink-2);align-items:center;gap:5px;font-weight:650;display:flex}.gap-list[data-v-d69ddc53],.h3[data-v-d69ddc53]{font-size:11.6px}.gap-list[data-v-d69ddc53]{gap:6px;max-height:260px;margin:8px 0 0;padding:0;list-style:none;display:grid;overflow-y:auto}.gap-list li[data-v-d69ddc53]{flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.gap-text[data-v-d69ddc53]{color:var(--ink-3)}.cov-cell[data-v-d69ddc53]{gap:8px;display:flex}.link[data-v-d69ddc53]{font-weight:640}.link[data-v-d69ddc53]:hover{color:var(--violet-ink)}.foot[data-v-d69ddc53]{margin-top:7px;font-size:10.6px}@media (width<=1080px){.cover-grid[data-v-d69ddc53],.gap-grid[data-v-d69ddc53],.layers[data-v-d69ddc53]{grid-template-columns:minmax(0,1fr)}.cover-side[data-v-d69ddc53]{border-left:0;padding-left:0}}
@@ -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/CkF353aX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.Dx3CNA--.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkF353aX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/CkF353aX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"d7f0931f-32b3-4c23-b05f-7cbf5851b226",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793369477275,false]</script></body></html>
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/DkI1Qxpp.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CKHePurH.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DkI1Qxpp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/DkI1Qxpp.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"8e23aec9-5b67-4569-b8bf-d4f07e50ffdf",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793377640995,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/CkF353aX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.Dx3CNA--.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkF353aX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/CkF353aX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"d7f0931f-32b3-4c23-b05f-7cbf5851b226",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793369477276,false]</script></body></html>
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/DkI1Qxpp.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CKHePurH.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DkI1Qxpp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/DkI1Qxpp.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"8e23aec9-5b67-4569-b8bf-d4f07e50ffdf",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793377640996,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/CkF353aX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.Dx3CNA--.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkF353aX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/CkF353aX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"d7f0931f-32b3-4c23-b05f-7cbf5851b226",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793369477276,false]</script></body></html>
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/DkI1Qxpp.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CKHePurH.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DkI1Qxpp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/DkI1Qxpp.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"8e23aec9-5b67-4569-b8bf-d4f07e50ffdf",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793377640996,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/CkF353aX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.Dx3CNA--.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkF353aX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/CkF353aX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"d7f0931f-32b3-4c23-b05f-7cbf5851b226",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793369477277,false]</script></body></html>
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/DkI1Qxpp.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CKHePurH.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DkI1Qxpp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/DkI1Qxpp.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"8e23aec9-5b67-4569-b8bf-d4f07e50ffdf",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793377640997,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/CkF353aX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.Dx3CNA--.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkF353aX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/CkF353aX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"d7f0931f-32b3-4c23-b05f-7cbf5851b226",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793369477276,false]</script></body></html>
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/DkI1Qxpp.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CKHePurH.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DkI1Qxpp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/DkI1Qxpp.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"8e23aec9-5b67-4569-b8bf-d4f07e50ffdf",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793377640997,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/CkF353aX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.Dx3CNA--.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkF353aX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/CkF353aX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"d7f0931f-32b3-4c23-b05f-7cbf5851b226",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793369477276,false]</script></body></html>
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/DkI1Qxpp.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CKHePurH.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DkI1Qxpp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/DkI1Qxpp.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"8e23aec9-5b67-4569-b8bf-d4f07e50ffdf",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793377640997,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/DkI1Qxpp.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CKHePurH.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DkI1Qxpp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D2O8Q8x9.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/B3jkABw9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/6gFtTBwm.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Csqgy925.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7K0R7F-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChG76uh9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CJ2mz0WY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEfLc7p3.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/Dtsa-1NS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ci0qbkgh.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/rlePnzpc.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DfR3IZN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/EYTShbt4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BgLeKwx0.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/DkI1Qxpp.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/CSSb154I.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/B5n2_jZN.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/ZVTqot-_.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"8e23aec9-5b67-4569-b8bf-d4f07e50ffdf",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793377640997,false]</script></body></html>
@@ -66,12 +66,14 @@ function init() {
66
66
  // 交付说明的写入工具:纪律要求「写之前先看 git」,工具得跟着装过去
67
67
  cpSync(join(PKG_ROOT, 'tools/last-change.mjs'), join(dir, 'tools/last-change.mjs'));
68
68
 
69
- // 数据骨架:schema v2 三文件结构(已有文件不覆盖,避免踩坏真实数据)
69
+ // 数据骨架:schema v3(已有文件不覆盖,避免踩坏真实数据)
70
70
  mkdirSync(join(dir, 'agile'), { recursive: true });
71
71
  const skeleton = {
72
72
  'backlog.json': { schemaVersion: 3, epics: [], stories: [] },
73
73
  'sprints.json': { schemaVersion: 3, sprints: [], milestones: [] },
74
74
  'journal.json': { schemaVersion: 3, journals: [] },
75
+ // 测试资产:页面空状态也认这个文件,先给空壳,agent 收口时往里加用例
76
+ 'tests.json': { schemaVersion: 3, suites: [], runs: [] },
75
77
  };
76
78
  const created = [];
77
79
  for (const [name, body] of Object.entries(skeleton)) {
@@ -85,7 +87,7 @@ function init() {
85
87
  - .agents/skills/ 四个敏捷 skill(planning / sprint / tdd / report)
86
88
  - AGENTS.md agent 入口纪律文件${backed ? `(旧文件已备份为 ${basename(backed)})` : ''}
87
89
  - tools/validate.mjs 数据校验脚本
88
- - agile/ 三文件结构${created.length ? `(新建 ${created.join('、')})` : '(已存在,未覆盖)'}
90
+ - agile/ 数据骨架${created.length ? `(新建 ${created.join('、')})` : '(已存在,未覆盖)'}
89
91
 
90
92
  下一步:
91
93
  1. 在目标项目里让 AI 读 AGENTS.md,用 scrum-planning 建第一个 story
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrum-skills",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "结构化敏捷开发管理 skills + CLI:AI 对话产出结构化敏捷数据,TDD 驱动实施,Nuxt 看板可视化",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -12,7 +12,11 @@
12
12
  - 看板/燃尽图/追溯链可视化 → **scrum-report**
13
13
  3. **对话产出必须落库**。凡是确认要做的事,必须写进 `agile/backlog.json`(结构见 `.agents/skills/scrum-planning/references/schema.md`),禁止只停留在对话里。每条故事必须带 `type` / `priority` / `value`,验收标准必须带 `verifyBy`;依赖写 `dependsOn`,被卡住写 `blocked`,中途插入或拆分出来的写 `scopeChange`——这些不写进 JSON,看板和甘特图就读不到。
14
14
  4. **TDD 铁律**:任务实施走 red → green → refactor 循环,没写过失败测试不许写实现;每步过程必须当场追加到 `agile/journal.json` 里对应 task 的 `entries`(不许事后补记)。
15
- 5. **每次修改敏捷数据后必须运行校验**,校验不过不许继续:
15
+ 5. **测试资产随任务收口登记**。task 推到 `done`、story 送进 `review` 之前,必须把本次新增 / 修改的用例与执行结果写进 **`agile/tests.json`**(结构见 schema 第 5 节):
16
+ - 用例挂在 suite 下,`covers` 指向验收(`S-001-A1`),`expect` 写清预期结果;手工验证也要登记成 `automated: false` 的用例,`steps` 逐步写;
17
+ - 每次跑完测试追加一条 `runs`(命令 / 环境 / 总数 / 通过 / 失败 / 跳过 / 失败用例),并刷新对应用例的 `status` 与 `lastRun`;
18
+ - **没真跑过不许写 `pass`**;story 到 `review` 时每条验收至少被一条用例覆盖(校验器会查,缺口在 `/tests` 页的「缺口与风险」里)。
19
+ 6. **每次修改敏捷数据后必须运行校验**,校验不过不许继续:
16
20
 
17
21
  ```bash
18
22
  node tools/validate.mjs
@@ -24,13 +28,13 @@
24
28
  pnpm test
25
29
  ```
26
30
 
27
- 6. **可视化**:
31
+ 7. **可视化**:
28
32
 
29
33
  ```bash
30
- node tools/serve.mjs # http://localhost:4173 看板 / 燃尽图 / story 追溯链
34
+ node tools/serve.mjs # http://localhost:4173 看板 / 燃尽图 / 测试用例 / story 追溯链
31
35
  ```
32
36
 
33
- 7. **每次功能开发完毕必须交工汇报**。task 推到 `done` 之后、向用户回话之前,把本次交付写进 **`agile/last-change.json`**(结构见 `.agents/skills/scrum-planning/references/schema.md` 第 4 节)。**写之前先查 git**:文件已提交就整份覆盖;还有没提交的改动就把本次结果并进旧记录,别冲掉还没入库的那一次。用 `node tools/last-change.mjs write <记录.json>` 写,它自己判状态、合并、写后校验、失败回滚。然后按同一顺序告诉用户:
37
+ 8. **每次功能开发完毕必须交工汇报**。task 推到 `done` 之后、向用户回话之前,把本次交付写进 **`agile/last-change.json`**(结构见 `.agents/skills/scrum-planning/references/schema.md` 第 4 节)。**写之前先查 git**:文件已提交就整份覆盖;还有没提交的改动就把本次结果并进旧记录,别冲掉还没入库的那一次。用 `node tools/last-change.mjs write <记录.json>` 写,它自己判状态、合并、写后校验、失败回滚。然后按同一顺序告诉用户:
34
38
  1. 本次涉及的故事与任务:新增还是状态变更、变更内容、对应涉及文件(用表格);
35
39
  2. 额外做了什么事情(计划外的修复、文档、重构);
36
40
  3. 验证了哪些结果(命令 / 手工核对的结论,含没验到的边界);
@@ -55,15 +59,16 @@
55
59
  | `agile/backlog.json` | 史诗 epics + 用户故事 stories(story 内联 tasks) |
56
60
  | `agile/sprints.json` | 迭代 sprints + 里程碑 milestones(MVP 节点 = `kind: "mvp"`) |
57
61
  | `agile/journal.json` | 每个 task 一条 TDD 实施日志(内联 entries) |
62
+ | `agile/tests.json` | 测试资产:suites(层 × 级别 → cases,含 covers 映射与最近状态)+ runs(执行记录与代码覆盖率);可选文件 |
58
63
  | `agile/last-change.json` | 最近一次交付的汇报(已提交才覆盖,未提交则合并):变更清单 / 额外工作 / 验证 / 入口与账号 / 测试前准备 / 测试场景 / 说明 |
59
- | `tools/validate.mjs` | 数据校验(引用完整性 / 状态机 / TDD 纪律 / 里程碑达成 / 交付说明) |
64
+ | `tools/validate.mjs` | 数据校验(引用完整性 / 状态机 / TDD 纪律 / 测试资产 / 里程碑达成 / 交付说明) |
60
65
  | `tools/last-change.mjs` | 交付说明的写入工具:`check` 判 git 状态、`write` 自动覆盖或合并 + 写后校验回滚 |
61
66
  | `tools/serve.mjs` | 看板 server(`/api/agile` + 托管 Nuxt 静态产物) |
62
- | `apps/board/` | Nuxt 看板源码(看板 / 最后更新 / 甘特图 / 里程碑 / 燃尽图 / 故事追溯) |
67
+ | `apps/board/` | Nuxt 看板源码(看板 / 最后更新 / 甘特图 / 里程碑 / 燃尽图 / 测试用例 / 故事追溯) |
63
68
  | `assets/board/` | 看板静态产物,由 `serve` 托管;**不进 git**,用 `pnpm board:build` 重建(`npm publish` 的 prepack 会自动跑一次) |
64
69
  | `scripts/build-board.mjs` | 构建看板:`apps/board` → `assets/board` |
65
70
  | `tests/` | 校验器回归测试(`pnpm test`,18 个用例) |
66
71
  | `docs/` | README 配图 |
67
72
  | `README.md` | 包说明(npm 页面) |
68
73
 
69
- `agile/` 三个文件里目前是一整套演示数据(3 史诗 / 16 故事 / 4 迭代 / 5 里程碑 / 39 任务),正式使用前清空三文件的数组即可。
74
+ `agile/` 数据文件里目前是一整套演示数据(3 史诗 / 16 故事 / 4 迭代 / 5 里程碑 / 39 任务),正式使用前清空这些文件的数组即可。
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * AI 助手手上的两件家伙事:检索当前项目的敏捷数据、按路径打补丁改它。
5
5
  * 这是全项目唯一「机器自动写业务数据」的入口,所以三层护栏缺一不可:
6
- * 1. 只认 agile/backlog.json | sprints.json | journal.json 三个文件,别的路径一律拒;
6
+ * 1. 只认 agile/backlog.json | sprints.json | journal.json | tests.json 四个文件,别的路径一律拒;
7
7
  * 2. 写完立刻跑 tools/validate.mjs,校验不过就把改前内容原样写回去;
8
8
  * 3. 手动审核策略下根本不落盘,只产待审变更(propose / applyPending / rejectPending)。
9
9
  *
@@ -25,7 +25,7 @@ import { fileURLToPath } from 'node:url';
25
25
  const validator = fileURLToPath(new URL('./validate.mjs', import.meta.url));
26
26
 
27
27
  /** 允许 AI 写回去的文件白名单——路径拼接只从这里来,杜绝越界 */
28
- export const AGILE_FILES = ['backlog', 'sprints', 'journal'];
28
+ export const AGILE_FILES = ['backlog', 'sprints', 'journal', 'tests'];
29
29
 
30
30
  /** 默认校验器:直接调本仓库的 validate.mjs,与 serve 启动前的口径完全一致 */
31
31
  export function runValidate(root) {
@@ -342,6 +342,12 @@ function recordsOf(file, doc) {
342
342
  (doc.milestones ?? []).forEach(m => add(`milestones.${m.id}`, m));
343
343
  } else if (file === 'journal') {
344
344
  (doc.journals ?? []).forEach(j => add(`journals.${j.taskId}`, j));
345
+ } else if (file === 'tests') {
346
+ (doc.suites ?? []).forEach(su => {
347
+ add(`suites.${su.id}`, su);
348
+ (su.cases ?? []).forEach(c => add(`suites.${su.id}.cases.${c.id}`, c));
349
+ });
350
+ (doc.runs ?? []).forEach(r => add(`runs.${r.id}`, r));
345
351
  }
346
352
  return out;
347
353
  }
@@ -385,7 +391,7 @@ export function createAgileTools({ root, validate = runValidate } = {}) {
385
391
 
386
392
  const fileOf = file => {
387
393
  if (!AGILE_FILES.includes(file)) {
388
- throw new Error(`只允许写 agile/ 下的三个文件(${AGILE_FILES.join(' / ')}.json),收到的是 ${file}`);
394
+ throw new Error(`只允许写 agile/ 下的数据文件(${AGILE_FILES.join(' / ')}.json),收到的是 ${file}`);
389
395
  }
390
396
  return join(currentRoot(), 'agile', `${file}.json`);
391
397
  };
package/tools/ai.mjs CHANGED
@@ -37,8 +37,8 @@ export const PROVIDER_PRESETS = [
37
37
  */
38
38
  export const BASE_SYSTEM = [
39
39
  '你在一个敏捷看板里工作:只能通过工具访问当前项目 agile/ 下的数据。',
40
- '- search_agile:检索 backlog / sprints / journal',
41
- '- update_agile:按路径改数据(路径形如 stories.S-011.status);写前自动校验,手动审核时先出待审变更',
40
+ '- search_agile:检索 backlog / sprints / journal / tests',
41
+ '- update_agile:按路径改数据(路径形如 stories.S-011.status、suites.TS-001.cases.TC-001.status);写前自动校验,手动审核时先出待审变更',
42
42
  '规则:',
43
43
  '1. 涉及具体故事 / 任务 / 迭代的问题,先查再答;查不到就说没有。',
44
44
  '2. 不要凭空编 id、状态、日期、人名,也不要造测试数据。',
@@ -67,13 +67,13 @@ export const TOOL_SPECS = [
67
67
  type: 'function',
68
68
  function: {
69
69
  name: 'search_agile',
70
- description: '在当前项目的 agile/ 数据里检索(backlog / sprints / journal)。多个关键词用空格分隔,需同时命中同一条记录。',
70
+ description: '在当前项目的 agile/ 数据里检索(backlog / sprints / journal / tests)。多个关键词用空格分隔,需同时命中同一条记录。',
71
71
  parameters: {
72
72
  type: 'object',
73
73
  properties: {
74
74
  query: { type: 'string', description: '检索关键词,例如「S-011 阻塞」' },
75
75
  limit: { type: 'integer', description: '最多返回多少条,默认 20' },
76
- file: { type: 'string', enum: ['backlog', 'sprints', 'journal'], description: '只搜某个文件(可选)' },
76
+ file: { type: 'string', enum: ['backlog', 'sprints', 'journal', 'tests'], description: '只搜某个文件(可选)' },
77
77
  },
78
78
  required: ['query'],
79
79
  },
@@ -89,7 +89,7 @@ export const TOOL_SPECS = [
89
89
  parameters: {
90
90
  type: 'object',
91
91
  properties: {
92
- file: { type: 'string', enum: ['backlog', 'sprints', 'journal'], description: '要改哪个文件' },
92
+ file: { type: 'string', enum: ['backlog', 'sprints', 'journal', 'tests'], description: '要改哪个文件' },
93
93
  reason: { type: 'string', description: '为什么改,写给人看的一句话' },
94
94
  patches: {
95
95
  type: 'array',