gitifact 0.8.6 → 0.9.0

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 (81) hide show
  1. package/README.md +14 -36
  2. package/dist/browser/assets/{HgiRefresh-CnBE2KZ8.js → HgiRefresh-CmdxsKUC.js} +1 -1
  3. package/dist/browser/assets/{Markdown-75QVB57V.js → Markdown-BpWtY88p.js} +1 -1
  4. package/dist/browser/assets/{Selector-E8jyEKNB.js → Selector-Dji19JSe.js} +1 -1
  5. package/dist/browser/assets/{Tab-C-PhLRIZ.js → Tab-BY4IuGKn.js} +1 -1
  6. package/dist/browser/assets/{Table-Cr2jvka_.js → Table-Dm6wz2kf.js} +2 -2
  7. package/dist/browser/assets/{Token-BBk7tRek.js → Token-9hr7eTF1.js} +1 -1
  8. package/dist/browser/assets/about-C3KamVtV.js +3 -0
  9. package/dist/browser/assets/activity-timeline-BdRnSGAp.js +2 -0
  10. package/dist/browser/assets/changelog-C8_hi0cv.js +1 -0
  11. package/dist/browser/assets/commit-BWyvKMHI.js +4 -0
  12. package/dist/browser/assets/contributors-Bk_xjPNJ.js +1 -0
  13. package/dist/browser/assets/{contributors._email-CEcZZfAR.js → contributors._email-C8GGV2IN.js} +1 -1
  14. package/dist/browser/assets/{contributors.index-DNMBFxLb.js → contributors.index-BKMSdIFJ.js} +1 -1
  15. package/dist/browser/assets/dashboard.index-COyVOMnD.js +1 -0
  16. package/dist/browser/assets/{document-odLLdugz.js → document-BbL374wf.js} +4 -4
  17. package/dist/browser/assets/{document-Cmx0e6kz.css → document-DXzNxu17.css} +1 -1
  18. package/dist/browser/assets/document-Dtyl4_It.js +2 -0
  19. package/dist/browser/assets/features-B1FsIXwk.js +2 -0
  20. package/dist/browser/assets/{features._featureId-Cmg8-2ku.js → features._featureId-DT63dqjw.js} +1 -1
  21. package/dist/browser/assets/{features.index-CBz7BmRW.js → features.index-BGBefKJN.js} +1 -1
  22. package/dist/browser/assets/getting-started-CCqN7NFk.js +1 -0
  23. package/dist/browser/assets/git-CzKF2N75.js +1 -0
  24. package/dist/browser/assets/index-DsduXf6u.js +49 -0
  25. package/dist/browser/assets/{load-more-BVsXjzHC.js → load-more-COb87OhG.js} +1 -1
  26. package/dist/browser/assets/page-header-Cs2fqdqC.js +246 -0
  27. package/dist/browser/assets/{records._recordId-DF-NkdBL.js → records._recordId-DP2stdvW.js} +1 -1
  28. package/dist/browser/assets/{records.commits._commit-BBf_rxHJ.js → records.commits._commit-DQlC8mSd.js} +1 -1
  29. package/dist/browser/assets/{records.docs._docId-Diev5opj.js → records.docs._docId-C7snDAo3.js} +1 -1
  30. package/dist/browser/assets/{records.index-DPWv9blV.js → records.index-DRPp4IAb.js} +1 -1
  31. package/dist/browser/assets/{records.working-D5xv-dTD.js → records.working-Qv9R2KgB.js} +1 -1
  32. package/dist/browser/assets/{settings-N1hE7l-i.js → settings-DDEler3s.js} +1 -1
  33. package/dist/browser/assets/useInfiniteQuery-IoAmrFi4.js +1 -0
  34. package/dist/browser/assets/{useKeyboardHint-CGJ2GVT3.js → useKeyboardHint-Wwnf-tpi.js} +1 -1
  35. package/dist/browser/index.html +18 -24
  36. package/dist/i18n/en/block.md +7 -7
  37. package/dist/i18n/en/changelog.md +14 -0
  38. package/dist/i18n/en/docs/commit.md +1 -1
  39. package/dist/i18n/en/docs/design.md +3 -3
  40. package/dist/i18n/en/docs/migrate.md +31 -34
  41. package/dist/i18n/en/docs/records.md +2 -2
  42. package/dist/i18n/en/docs/spec.md +1 -1
  43. package/dist/i18n/en/docs/workflow.md +12 -12
  44. package/dist/i18n/en/docs/writing.md +4 -4
  45. package/dist/i18n/ko/block.md +7 -7
  46. package/dist/i18n/ko/changelog.md +14 -0
  47. package/dist/i18n/ko/docs/commit.md +1 -1
  48. package/dist/i18n/ko/docs/design.md +3 -3
  49. package/dist/i18n/ko/docs/migrate.md +30 -33
  50. package/dist/i18n/ko/docs/records.md +2 -2
  51. package/dist/i18n/ko/docs/spec.md +1 -1
  52. package/dist/i18n/ko/docs/workflow.md +12 -12
  53. package/dist/i18n/ko/docs/writing.md +4 -4
  54. package/dist/launcher/cli.mjs +77 -0
  55. package/dist/main.js +274 -586
  56. package/package.json +3 -3
  57. package/dist/browser/assets/MetadataListItem-BEwPg27H.js +0 -1
  58. package/dist/browser/assets/about-C3ewDfU2.js +0 -3
  59. package/dist/browser/assets/activity-timeline-B3s0viEt.js +0 -2
  60. package/dist/browser/assets/changelog-DkRd6I8J.js +0 -1
  61. package/dist/browser/assets/commit-BHwKZ7hK.js +0 -4
  62. package/dist/browser/assets/contributor-2mkEa2Wo.css +0 -1
  63. package/dist/browser/assets/contributor-CqqvzxLh.js +0 -1
  64. package/dist/browser/assets/contributors-CuMPZx6_.js +0 -1
  65. package/dist/browser/assets/dashboard.index-nV7KwM5H.js +0 -1
  66. package/dist/browser/assets/document-BnxE7Txb.js +0 -2
  67. package/dist/browser/assets/features-C0YzZiS-.js +0 -2
  68. package/dist/browser/assets/getting-started-CaOhGSBe.js +0 -1
  69. package/dist/browser/assets/git-DwAnKiiN.js +0 -1
  70. package/dist/browser/assets/index-BljzO9go.js +0 -49
  71. package/dist/browser/assets/instructions-2OUMP-vh.css +0 -1
  72. package/dist/browser/assets/instructions-DWS_nwe0.js +0 -1
  73. package/dist/browser/assets/instructions._instructionId-l7aWWvfx.js +0 -1
  74. package/dist/browser/assets/instructions.agents-t7hMe4Pv.js +0 -1
  75. package/dist/browser/assets/instructions.index-CHVCQBSH.js +0 -1
  76. package/dist/browser/assets/lazyRouteComponent-BZI8yQj_.js +0 -1
  77. package/dist/browser/assets/page-header-CRcXie4p.js +0 -248
  78. package/dist/browser/assets/project-instructions-DsWrw-nY.jpg +0 -0
  79. package/dist/browser/assets/useInfiniteQuery-CrEm5UW2.js +0 -1
  80. package/dist/i18n/en/docs/instructions.md +0 -94
  81. package/dist/i18n/ko/docs/instructions.md +0 -94
@@ -1 +1 @@
1
- import{l as e}from"./themeProps-CkLe5zXY.js";import{o as t}from"./commit-BHwKZ7hK.js";import{a as n}from"./index-BljzO9go.js";var r=e();function i(){let{recordId:e}=n.useParams();return(0,r.jsx)(t,{recordId:e})}export{i as component};
1
+ import{l as e}from"./themeProps-CkLe5zXY.js";import{o as t}from"./commit-BWyvKMHI.js";import{a as n}from"./index-DsduXf6u.js";var r=e();function i(){let{recordId:e}=n.useParams();return(0,r.jsx)(t,{recordId:e})}export{i as component};
@@ -1 +1 @@
1
- import{l as e}from"./themeProps-CkLe5zXY.js";import{s as t}from"./commit-BHwKZ7hK.js";import{r as n}from"./index-BljzO9go.js";var r=e();function i(){let{commit:e}=n.useParams(),i=n.useSearch();return(0,r.jsx)(t,{commit:e,search:i})}export{i as component};
1
+ import{l as e}from"./themeProps-CkLe5zXY.js";import{s as t}from"./commit-BWyvKMHI.js";import{r as n}from"./index-DsduXf6u.js";var r=e();function i(){let{commit:e}=n.useParams(),i=n.useSearch();return(0,r.jsx)(t,{commit:e,search:i})}export{i as component};
@@ -1 +1 @@
1
- import{l as e}from"./themeProps-CkLe5zXY.js";import{n as t,t as n}from"./index-BljzO9go.js";var r=e();function i(){let{docId:e}=n.useParams();return(0,r.jsx)(t,{docId:e})}export{i as component};
1
+ import{l as e}from"./themeProps-CkLe5zXY.js";import{n as t,t as n}from"./index-DsduXf6u.js";var r=e();function i(){let{docId:e}=n.useParams();return(0,r.jsx)(t,{docId:e})}export{i as component};
@@ -1 +1 @@
1
- import{l as e}from"./themeProps-CkLe5zXY.js";import{o as t,s as n}from"./index-BljzO9go.js";var r=e();function i(){let e=t.useSearch(),i=t.useNavigate();return(0,r.jsx)(n,{search:e,change:(e,t)=>{i({search:e,replace:t??!1})}})}export{i as component};
1
+ import{l as e}from"./themeProps-CkLe5zXY.js";import{o as t,s as n}from"./index-DsduXf6u.js";var r=e();function i(){let e=t.useSearch(),i=t.useNavigate();return(0,r.jsx)(n,{search:e,change:(e,t)=>{i({search:e,replace:t??!1})}})}export{i as component};
@@ -1 +1 @@
1
- import{l as e}from"./themeProps-CkLe5zXY.js";import{a as t}from"./commit-BHwKZ7hK.js";import{i as n}from"./index-BljzO9go.js";var r=e();function i(){let e=n.useSearch();return(0,r.jsx)(t,{search:e})}export{i as component};
1
+ import{l as e}from"./themeProps-CkLe5zXY.js";import{a as t}from"./commit-BWyvKMHI.js";import{i as n}from"./index-DsduXf6u.js";var r=e();function i(){let e=n.useSearch();return(0,r.jsx)(t,{search:e})}export{i as component};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{K as t,l as n,n as r,q as i}from"./themeProps-CkLe5zXY.js";import{n as a}from"./useIsomorphicLayoutEffect-BiEJxDg_.js";import{_t as o,an as s,bt as c,cn as l,gt as u,hn as d,mn as f,pn as p,sn as m,t as h,un as g}from"./page-header-CRcXie4p.js";import{a as _}from"./useMediaQuery-twbHF0pO.js";import{E as v,S as y,W as b,w as x}from"./Icon-DPaLmsmh.js";import{t as S}from"./useKeyboardHint-CGJ2GVT3.js";import{a as C,c as w,l as T,n as E,o as D,r as O}from"./appearance-DyJA06C4.js";import{n as k,t as A}from"./Grid-DCCm_m5g.js";var j=e(i(),1),M=(0,j.createContext)(null);M.displayName=`SegmentedControlContext`;function N(){let e=(0,j.use)(M);if(e==null)throw Error(`useSegmentedControlContext must be used within SegmentedControl. Wrap your SegmentedControlItem in <SegmentedControl>.`);return e}var P=n(),F={container:{k1xSpc:`x3nfvp2`,kGNEyG:`x6s0dn4`,kOIVth:`x1lsbc85`,"--_segmented-control-padding":`x18jk3ff`,kmVPX3:`xpoxszi`,kWkggS:`x17x4s8c`,$$css:!0},fill:{k1xSpc:`x78zum5`,kzqmXN:`xh8yej3`,$$css:!0},disabled:{kSiTet:`xbyyjgo`,kfzvcC:`x47corl`,$$css:!0},disabledWithMessage:{kSiTet:`xbyyjgo`,$$css:!0}},I={sm:{"--_segmented-control-radius":`x9icjy1`,kaIpWk:`x1hapoqb`,$$css:!0},md:{"--_segmented-control-radius":`x9icjy1`,kaIpWk:`x1hapoqb`,$$css:!0},lg:{"--_segmented-control-radius":`x9icjy1`,kaIpWk:`x1hapoqb`,$$css:!0}};function L({ref:e,value:n,onChange:i,label:o,size:s,layout:u=`hug`,isDisabled:d=!1,disabledMessage:f,children:p,xstyle:m,className:h,style:g,onKeyDown:b,onFocus:x,onBlur:C,...w}){let T=y(s,`md`),E=d&&!!f,D=a({placement:`above`,focusTrigger:`always`,isEnabled:E}),{listRef:O,handleKeyDown:k,handleFocus:A}=c({itemSelector:`[role="radio"]:not([aria-disabled="true"])`,hasRovingTabIndex:!0,wrap:!0,orientation:`horizontal`}),N=S({orientation:`horizontal`,isEnabled:!d}),L=(0,j.useCallback)(e=>{b?.(e),!e.defaultPrevented&&(N.onKeyDown(e),k(e))},[b,N,k]),R=(0,j.useCallback)(e=>{if(x?.(e),e.defaultPrevented||(N.onFocus(e),A(e),d)||!e.currentTarget.contains(e.relatedTarget))return;let t=e.target?.closest(`[role="radio"][data-value]`);if(!t||t.getAttribute(`aria-disabled`)===`true`)return;let r=t.dataset.value;r!=null&&r!==n&&i(r)},[x,N,A,d,i,n]),z=(0,j.useMemo)(()=>({value:n,onChange:i,size:T,layout:u,isDisabled:d,hasDisabledMessage:E}),[n,i,T,u,d,E]);return(0,P.jsxs)(M,{value:z,children:[(0,P.jsxs)(`div`,{ref:v(e,O,D.ref),...w,role:`radiogroup`,"aria-label":o,"aria-disabled":d||void 0,"aria-describedby":E?D.describedBy:void 0,onKeyDown:L,onFocus:R,onBlur:l(C,N.onBlur),..._(r(`segmented-control`,{size:T}),t(F.container,I[T],u===`fill`&&F.fill,d&&(E?F.disabledWithMessage:F.disabled),m),h,g),children:[p,N.hintElement]}),E&&D.renderTooltip(f)]})}L.displayName=`SegmentedControl`;var R={base:{kVAEAm:`x1n2onr6`,k1xSpc:`x3nfvp2`,kGNEyG:`x6s0dn4`,kjj79g:`xl56j7k`,kOIVth:`xzye2dw`,kg3NbH:`xrrkdod`,kWkggS:`xjbqb8w`,kMzoRj:`xc342km`,ksu8eU:`xng3xce`,kMv6JI:`xjb2p0i`,kGuDYH:`xcr08ib`,kLWn49:`x1kq96og`,k63SB2:`x1e4wzip`,kMwMTN:`xv1l7n4`,kkrTdU:`x1ypdohk x16khyan`,khDVqt:`xuxw1ft`,k1ekBW:`x1vix5yk`,kIyJzY:`xuedmi6`,kAMwcw:`xlr8y92`,$$css:!0},hover:{kWkggS:`xoevpu5`,$$css:!0},selected:{kAXs8y:`x1kzknox`,kMwMTN:`x1tgivj0 x1k5gbb1`,k63SB2:`x2mo6ok`,kWkggS:`x10xzikg x1jzqe4`,kGVxlE:`x1i5ehqx`,$$css:!0},disabled:{kkrTdU:`xt0e3qv`,kMwMTN:`xnbbluu`,$$css:!0},fill:{kUk6DE:`x98rzlu`,k7Eaqz:`xeuugli`,kjj79g:`xl56j7k`,$$css:!0},icon:{k1xSpc:`x3nfvp2`,kGNEyG:`x6s0dn4`,kjj79g:`xl56j7k`,kmuXW:`x2lah0s`,$$css:!0}},z={sm:{kZKoxP:`xzj98nu`,kaIpWk:`xc910v0`,kg3NbH:`xf314gf`,kGuDYH:`x141an7d`,$$css:!0},md:{kZKoxP:`x184gfjb`,kaIpWk:`xc910v0`,kg3NbH:`xrrkdod`,$$css:!0},lg:{kZKoxP:`x1uiybsj`,kaIpWk:`xc910v0`,kg3NbH:`xrrkdod`,$$css:!0}},B={sm:{kzqmXN:`x6jxa94`,kZKoxP:`x1v9usgg`,$$css:!0},md:{kzqmXN:`x1kky2od`,kZKoxP:`xlup9mm`,$$css:!0},lg:{kzqmXN:`x1xp8n7a`,kZKoxP:`xmix8c7`,$$css:!0}};function V({ref:e,value:n,label:i,isLabelHidden:a=!1,icon:o,isDisabled:s=!1,onClick:c,xstyle:u,...d}){let f=N(),p=f.value===n,m=s||f.isDisabled,h=p&&(f.hasDisabledMessage??!1)&&!s,g=f.size,v=f.layout===`fill`,y=l(c,()=>{!m&&!p&&f.onChange(n)}),x=o?(0,P.jsx)(`span`,{...t(R.icon,B[g]),children:o}):null;return(0,P.jsxs)(`button`,{ref:e,...d,type:`button`,role:`radio`,"aria-checked":p,"aria-disabled":m||void 0,"aria-label":a?i:void 0,"data-value":n,tabIndex:p&&!m||h?0:-1,onClick:y,..._(r(`segmented-control-item`,{size:g,selected:p?`selected`:null,disabled:m?`disabled`:null}),b.focusVisible(R.base,z[g],v&&R.fill,p&&R.selected,!p&&!m&&R.hover,m&&R.disabled,u)),children:[x,!a&&(0,P.jsx)(`span`,{className:`xb3r6kr xlyipyv xeuugli`,children:i})]})}V.displayName=`SegmentedControlItem`;var H={interactive:{"--selectable-card-ring-color":`x11rj6l1`,kVAEAm:`x1n2onr6`,kkrTdU:`x1ypdohk x16khyan`,k1ekBW:`x16mfhj0`,kIyJzY:`xuedmi6`,kAMwcw:`xlr8y92`,$$css:!0},overlay:{k5JduY:`x1s928wv`,kwXMNM:`x1j6awrg`,kv0HGH:`xarstr8`,kUfP38:`x1k48kgn`,kloYau:`x2q1x1w`,kRicXK:`x1ywzrc5`,kPNhGg:`x97pup0`,kA8PQs:`x1dlmc9c`,ks3ayO:`xyhc2n1`,kAcZsS:`x1k7wiig`,$$css:!0},hoverOnPointer:{k8t4tK:`x1912f9e`,$$css:!0},disabled:{kkrTdU:`xt0e3qv`,kSiTet:`xbyyjgo`,$$css:!0},selected:{kVAM5u:`xad5do`,"--_card-ring":`xr9ms2c`,$$css:!0},selectedBlue:{kVAM5u:`xlee4gx`,"--_card-ring":`xgwwt2v`,$$css:!0},selectedCyan:{kVAM5u:`xb1xfl`,"--_card-ring":`xcdi0x3`,$$css:!0},selectedGray:{kVAM5u:`x1w9ec3u`,"--_card-ring":`x1m1zkwp`,$$css:!0},selectedGreen:{kVAM5u:`xy90a9n`,"--_card-ring":`x1485227`,$$css:!0},selectedOrange:{kVAM5u:`xloqurj`,"--_card-ring":`x1cclxpp`,$$css:!0},selectedPink:{kVAM5u:`x1czkbn8`,"--_card-ring":`xzs6dn4`,$$css:!0},selectedPurple:{kVAM5u:`xq98wne`,"--_card-ring":`x9zgi83`,$$css:!0},selectedRed:{kVAM5u:`xjqgoec`,"--_card-ring":`xo8718j`,$$css:!0},selectedTeal:{kVAM5u:`x1r9gxr1`,"--_card-ring":`xp4e5fy`,$$css:!0},selectedYellow:{kVAM5u:`x1kpnwn1`,"--_card-ring":`x1glw7ee`,$$css:!0},selectedUnknown:{"--_card-ring":`x3zsw4j`,$$css:!0}},U=e=>{switch(e){case`default`:case`transparent`:case`muted`:return H.selected;case`blue`:return H.selectedBlue;case`cyan`:return H.selectedCyan;case`gray`:return H.selectedGray;case`green`:return H.selectedGreen;case`orange`:return H.selectedOrange;case`pink`:return H.selectedPink;case`purple`:return H.selectedPurple;case`red`:return H.selectedRed;case`teal`:return H.selectedTeal;case`yellow`:return H.selectedYellow;default:return H.selectedUnknown}};function W({label:e,isSelected:t,onChange:n,onClick:i,onMouseUp:a,isDisabled:o=!1,children:s,padding:c,variant:l=`default`,elevation:u=`none`,width:d,height:f,maxWidth:p,ref:h,xstyle:g,className:y,style:x,...S}){let C=(0,j.useRef)(null),w=(0,j.useRef)(null),T=(0,j.useCallback)(e=>{o||n(!t)},[o,t,n]),E=(0,j.useCallback)(e=>{!o&&e.key===`Enter`&&(e.preventDefault(),n(!t))},[o,t,n]),{onClick:D,onMouseUp:O}=m({containerRef:C,interactiveRef:w,onClick:T,disabled:o}),A=i?e=>{D(e),i(e)}:D,M=a?e=>{O(e),a(e)}:O;return(0,P.jsxs)(k,{ref:v(h,C),width:d,height:f,maxWidth:p,padding:c,variant:l,elevation:u,..._(r(`selectable-card`,{variant:l,selected:t?`true`:`false`}),b.focusWithin(),y,x),xstyle:[H.interactive,t&&U(l),!o&&H.overlay,!o&&H.hoverOnPointer,o&&H.disabled,g],onClick:o?void 0:A,onMouseUp:o?void 0:M,...S,children:[(0,P.jsx)(`input`,{ref:w,type:`checkbox`,checked:t,"aria-label":e,disabled:o,onChange:()=>n(!t),onKeyDown:E,className:`x10l6tqk x1i1rx1s xjm9jq1 x1717udv xkdpibf xb3r6kr xzpqnlu xuxw1ft xc342km`}),s]})}W.displayName=`SelectableCard`;var G={page:`_page_1yxii_2`,column:`_column_1yxii_3`,pageTitle:`_pageTitle_1yxii_4`,sections:`_sections_1yxii_5`,section:`_section_1yxii_5`,swatches:`_swatches_1yxii_8`,sample:`_sample_1yxii_9`,sampleSurface:`_sampleSurface_1yxii_10`,sampleDot:`_sampleDot_1yxii_11`,sampleLine:`_sampleLine_1yxii_12`},K=()=>({system:g(`settings.mode.system`),light:g(`settings.mode.light`),dark:g(`settings.mode.dark`)}),q=()=>({stone:[g(`settings.palette.stone`),g(`settings.palette.stoneHint`)],sage:[g(`settings.palette.sage`),g(`settings.palette.sageHint`)],olive:[g(`settings.palette.olive`),g(`settings.palette.oliveHint`)],slate:[g(`settings.palette.slate`),g(`settings.palette.slateHint`)],clay:[g(`settings.palette.clay`),g(`settings.palette.clayHint`)]}),J=e=>e===`stone`?w:O[e],Y=[0,1];function X(){f();let{mode:e,palette:t}=T(),n=d();return(0,P.jsxs)(o,{gap:0,className:G.page,children:[(0,P.jsx)(h,{trail:[{label:g(`settings.title`)}]}),(0,P.jsxs)(o,{gap:0,className:G.column,children:[(0,P.jsxs)(o,{gap:1,className:G.pageTitle,children:[(0,P.jsx)(s,{level:1,children:g(`settings.title`)}),(0,P.jsx)(x,{type:`supporting`,color:`secondary`,children:g(`settings.subtitle`)})]}),(0,P.jsxs)(o,{gap:0,className:G.sections,children:[(0,P.jsxs)(o,{as:`section`,gap:3,className:G.section,"aria-label":g(`settings.language`),children:[(0,P.jsx)(o,{gap:1,children:(0,P.jsx)(s,{level:2,children:g(`settings.language`)})}),(0,P.jsx)(u,{gap:0,children:(0,P.jsxs)(L,{label:g(`settings.language`),value:n,onChange:e=>p(e),children:[(0,P.jsx)(V,{value:`system`,label:g(`settings.language.system`)}),(0,P.jsx)(V,{value:`en`,label:`English`}),(0,P.jsx)(V,{value:`ko`,label:`한국어`})]})})]}),(0,P.jsxs)(o,{as:`section`,gap:3,className:G.section,"aria-label":g(`settings.mode`),children:[(0,P.jsxs)(o,{gap:1,children:[(0,P.jsx)(s,{level:2,children:g(`settings.mode`)}),(0,P.jsx)(x,{type:`supporting`,color:`secondary`,children:g(`settings.modeHint`)})]}),(0,P.jsx)(u,{gap:0,children:(0,P.jsx)(L,{label:g(`settings.mode`),value:e,onChange:e=>D({mode:e}),children:E.map(e=>(0,P.jsx)(V,{value:e,label:K()[e]},e))})})]}),(0,P.jsxs)(o,{as:`section`,gap:3,className:G.section,"aria-label":g(`settings.palette`),children:[(0,P.jsxs)(o,{gap:1,children:[(0,P.jsx)(s,{level:2,children:g(`settings.palette`)}),(0,P.jsx)(x,{type:`supporting`,color:`secondary`,children:g(`settings.paletteHint`)})]}),(0,P.jsx)(A,{columns:{minWidth:176,repeat:`fit`,max:5},gap:3,children:C.map(e=>{let n=J(e),[r,i]=q()[e];return(0,P.jsx)(W,{label:r,isSelected:t===e,onChange:t=>{t&&D({palette:e})},children:(0,P.jsxs)(o,{gap:3,children:[(0,P.jsx)(o,{gap:0,className:G.swatches,"aria-hidden":`true`,children:Y.map(e=>(0,P.jsx)(u,{gap:2,vAlign:`center`,className:G.sample,style:{background:n.body[e]},children:(0,P.jsxs)(u,{gap:2,vAlign:`center`,className:G.sampleSurface,style:{background:n.surface[e],color:n.text[e]},children:[(0,P.jsx)(o,{gap:0,className:G.sampleDot,style:{background:n.accent[e]}}),(0,P.jsx)(o,{gap:0,className:G.sampleLine,style:{background:n.text[e]}})]})},e))}),(0,P.jsxs)(o,{gap:1,children:[(0,P.jsx)(x,{type:`label`,children:r}),(0,P.jsx)(x,{type:`supporting`,color:`secondary`,children:i})]})]})},e)})})]})]})]})]})}var Z=X;export{Z as component};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{K as t,l as n,n as r,q as i}from"./themeProps-CkLe5zXY.js";import{n as a}from"./useIsomorphicLayoutEffect-BiEJxDg_.js";import{_t as o,an as s,dn as c,fn as l,in as u,mt as d,nn as f,pt as p,sn as m,t as h,un as g}from"./page-header-Cs2fqdqC.js";import{a as _}from"./useMediaQuery-twbHF0pO.js";import{E as v,S as y,W as b,w as x}from"./Icon-DPaLmsmh.js";import{t as S}from"./useKeyboardHint-Wwnf-tpi.js";import{a as C,c as w,l as T,n as E,o as D,r as O}from"./appearance-DyJA06C4.js";import{n as k,t as A}from"./Grid-DCCm_m5g.js";var j=e(i(),1),M=(0,j.createContext)(null);M.displayName=`SegmentedControlContext`;function N(){let e=(0,j.use)(M);if(e==null)throw Error(`useSegmentedControlContext must be used within SegmentedControl. Wrap your SegmentedControlItem in <SegmentedControl>.`);return e}var P=n(),F={container:{k1xSpc:`x3nfvp2`,kGNEyG:`x6s0dn4`,kOIVth:`x1lsbc85`,"--_segmented-control-padding":`x18jk3ff`,kmVPX3:`xpoxszi`,kWkggS:`x17x4s8c`,$$css:!0},fill:{k1xSpc:`x78zum5`,kzqmXN:`xh8yej3`,$$css:!0},disabled:{kSiTet:`xbyyjgo`,kfzvcC:`x47corl`,$$css:!0},disabledWithMessage:{kSiTet:`xbyyjgo`,$$css:!0}},I={sm:{"--_segmented-control-radius":`x9icjy1`,kaIpWk:`x1hapoqb`,$$css:!0},md:{"--_segmented-control-radius":`x9icjy1`,kaIpWk:`x1hapoqb`,$$css:!0},lg:{"--_segmented-control-radius":`x9icjy1`,kaIpWk:`x1hapoqb`,$$css:!0}};function L({ref:e,value:n,onChange:i,label:c,size:l,layout:u=`hug`,isDisabled:d=!1,disabledMessage:f,children:p,xstyle:m,className:h,style:g,onKeyDown:b,onFocus:x,onBlur:C,...w}){let T=y(l,`md`),E=d&&!!f,D=a({placement:`above`,focusTrigger:`always`,isEnabled:E}),{listRef:O,handleKeyDown:k,handleFocus:A}=o({itemSelector:`[role="radio"]:not([aria-disabled="true"])`,hasRovingTabIndex:!0,wrap:!0,orientation:`horizontal`}),N=S({orientation:`horizontal`,isEnabled:!d}),L=(0,j.useCallback)(e=>{b?.(e),!e.defaultPrevented&&(N.onKeyDown(e),k(e))},[b,N,k]),R=(0,j.useCallback)(e=>{if(x?.(e),e.defaultPrevented||(N.onFocus(e),A(e),d)||!e.currentTarget.contains(e.relatedTarget))return;let t=e.target?.closest(`[role="radio"][data-value]`);if(!t||t.getAttribute(`aria-disabled`)===`true`)return;let r=t.dataset.value;r!=null&&r!==n&&i(r)},[x,N,A,d,i,n]),z=(0,j.useMemo)(()=>({value:n,onChange:i,size:T,layout:u,isDisabled:d,hasDisabledMessage:E}),[n,i,T,u,d,E]);return(0,P.jsxs)(M,{value:z,children:[(0,P.jsxs)(`div`,{ref:v(e,O,D.ref),...w,role:`radiogroup`,"aria-label":c,"aria-disabled":d||void 0,"aria-describedby":E?D.describedBy:void 0,onKeyDown:L,onFocus:R,onBlur:s(C,N.onBlur),..._(r(`segmented-control`,{size:T}),t(F.container,I[T],u===`fill`&&F.fill,d&&(E?F.disabledWithMessage:F.disabled),m),h,g),children:[p,N.hintElement]}),E&&D.renderTooltip(f)]})}L.displayName=`SegmentedControl`;var R={base:{kVAEAm:`x1n2onr6`,k1xSpc:`x3nfvp2`,kGNEyG:`x6s0dn4`,kjj79g:`xl56j7k`,kOIVth:`xzye2dw`,kg3NbH:`xrrkdod`,kWkggS:`xjbqb8w`,kMzoRj:`xc342km`,ksu8eU:`xng3xce`,kMv6JI:`xjb2p0i`,kGuDYH:`xcr08ib`,kLWn49:`x1kq96og`,k63SB2:`x1e4wzip`,kMwMTN:`xv1l7n4`,kkrTdU:`x1ypdohk x16khyan`,khDVqt:`xuxw1ft`,k1ekBW:`x1vix5yk`,kIyJzY:`xuedmi6`,kAMwcw:`xlr8y92`,$$css:!0},hover:{kWkggS:`xoevpu5`,$$css:!0},selected:{kAXs8y:`x1kzknox`,kMwMTN:`x1tgivj0 x1k5gbb1`,k63SB2:`x2mo6ok`,kWkggS:`x10xzikg x1jzqe4`,kGVxlE:`x1i5ehqx`,$$css:!0},disabled:{kkrTdU:`xt0e3qv`,kMwMTN:`xnbbluu`,$$css:!0},fill:{kUk6DE:`x98rzlu`,k7Eaqz:`xeuugli`,kjj79g:`xl56j7k`,$$css:!0},icon:{k1xSpc:`x3nfvp2`,kGNEyG:`x6s0dn4`,kjj79g:`xl56j7k`,kmuXW:`x2lah0s`,$$css:!0}},z={sm:{kZKoxP:`xzj98nu`,kaIpWk:`xc910v0`,kg3NbH:`xf314gf`,kGuDYH:`x141an7d`,$$css:!0},md:{kZKoxP:`x184gfjb`,kaIpWk:`xc910v0`,kg3NbH:`xrrkdod`,$$css:!0},lg:{kZKoxP:`x1uiybsj`,kaIpWk:`xc910v0`,kg3NbH:`xrrkdod`,$$css:!0}},B={sm:{kzqmXN:`x6jxa94`,kZKoxP:`x1v9usgg`,$$css:!0},md:{kzqmXN:`x1kky2od`,kZKoxP:`xlup9mm`,$$css:!0},lg:{kzqmXN:`x1xp8n7a`,kZKoxP:`xmix8c7`,$$css:!0}};function V({ref:e,value:n,label:i,isLabelHidden:a=!1,icon:o,isDisabled:c=!1,onClick:l,xstyle:u,...d}){let f=N(),p=f.value===n,m=c||f.isDisabled,h=p&&(f.hasDisabledMessage??!1)&&!c,g=f.size,v=f.layout===`fill`,y=s(l,()=>{!m&&!p&&f.onChange(n)}),x=o?(0,P.jsx)(`span`,{...t(R.icon,B[g]),children:o}):null;return(0,P.jsxs)(`button`,{ref:e,...d,type:`button`,role:`radio`,"aria-checked":p,"aria-disabled":m||void 0,"aria-label":a?i:void 0,"data-value":n,tabIndex:p&&!m||h?0:-1,onClick:y,..._(r(`segmented-control-item`,{size:g,selected:p?`selected`:null,disabled:m?`disabled`:null}),b.focusVisible(R.base,z[g],v&&R.fill,p&&R.selected,!p&&!m&&R.hover,m&&R.disabled,u)),children:[x,!a&&(0,P.jsx)(`span`,{className:`xb3r6kr xlyipyv xeuugli`,children:i})]})}V.displayName=`SegmentedControlItem`;var H={interactive:{"--selectable-card-ring-color":`x11rj6l1`,kVAEAm:`x1n2onr6`,kkrTdU:`x1ypdohk x16khyan`,k1ekBW:`x16mfhj0`,kIyJzY:`xuedmi6`,kAMwcw:`xlr8y92`,$$css:!0},overlay:{k5JduY:`x1s928wv`,kwXMNM:`x1j6awrg`,kv0HGH:`xarstr8`,kUfP38:`x1k48kgn`,kloYau:`x2q1x1w`,kRicXK:`x1ywzrc5`,kPNhGg:`x97pup0`,kA8PQs:`x1dlmc9c`,ks3ayO:`xyhc2n1`,kAcZsS:`x1k7wiig`,$$css:!0},hoverOnPointer:{k8t4tK:`x1912f9e`,$$css:!0},disabled:{kkrTdU:`xt0e3qv`,kSiTet:`xbyyjgo`,$$css:!0},selected:{kVAM5u:`xad5do`,"--_card-ring":`xr9ms2c`,$$css:!0},selectedBlue:{kVAM5u:`xlee4gx`,"--_card-ring":`xgwwt2v`,$$css:!0},selectedCyan:{kVAM5u:`xb1xfl`,"--_card-ring":`xcdi0x3`,$$css:!0},selectedGray:{kVAM5u:`x1w9ec3u`,"--_card-ring":`x1m1zkwp`,$$css:!0},selectedGreen:{kVAM5u:`xy90a9n`,"--_card-ring":`x1485227`,$$css:!0},selectedOrange:{kVAM5u:`xloqurj`,"--_card-ring":`x1cclxpp`,$$css:!0},selectedPink:{kVAM5u:`x1czkbn8`,"--_card-ring":`xzs6dn4`,$$css:!0},selectedPurple:{kVAM5u:`xq98wne`,"--_card-ring":`x9zgi83`,$$css:!0},selectedRed:{kVAM5u:`xjqgoec`,"--_card-ring":`xo8718j`,$$css:!0},selectedTeal:{kVAM5u:`x1r9gxr1`,"--_card-ring":`xp4e5fy`,$$css:!0},selectedYellow:{kVAM5u:`x1kpnwn1`,"--_card-ring":`x1glw7ee`,$$css:!0},selectedUnknown:{"--_card-ring":`x3zsw4j`,$$css:!0}},U=e=>{switch(e){case`default`:case`transparent`:case`muted`:return H.selected;case`blue`:return H.selectedBlue;case`cyan`:return H.selectedCyan;case`gray`:return H.selectedGray;case`green`:return H.selectedGreen;case`orange`:return H.selectedOrange;case`pink`:return H.selectedPink;case`purple`:return H.selectedPurple;case`red`:return H.selectedRed;case`teal`:return H.selectedTeal;case`yellow`:return H.selectedYellow;default:return H.selectedUnknown}};function W({label:e,isSelected:t,onChange:n,onClick:i,onMouseUp:a,isDisabled:o=!1,children:s,padding:c,variant:l=`default`,elevation:d=`none`,width:f,height:p,maxWidth:m,ref:h,xstyle:g,className:y,style:x,...S}){let C=(0,j.useRef)(null),w=(0,j.useRef)(null),T=(0,j.useCallback)(e=>{o||n(!t)},[o,t,n]),E=(0,j.useCallback)(e=>{!o&&e.key===`Enter`&&(e.preventDefault(),n(!t))},[o,t,n]),{onClick:D,onMouseUp:O}=u({containerRef:C,interactiveRef:w,onClick:T,disabled:o}),A=i?e=>{D(e),i(e)}:D,M=a?e=>{O(e),a(e)}:O;return(0,P.jsxs)(k,{ref:v(h,C),width:f,height:p,maxWidth:m,padding:c,variant:l,elevation:d,..._(r(`selectable-card`,{variant:l,selected:t?`true`:`false`}),b.focusWithin(),y,x),xstyle:[H.interactive,t&&U(l),!o&&H.overlay,!o&&H.hoverOnPointer,o&&H.disabled,g],onClick:o?void 0:A,onMouseUp:o?void 0:M,...S,children:[(0,P.jsx)(`input`,{ref:w,type:`checkbox`,checked:t,"aria-label":e,disabled:o,onChange:()=>n(!t),onKeyDown:E,className:`x10l6tqk x1i1rx1s xjm9jq1 x1717udv xkdpibf xb3r6kr xzpqnlu xuxw1ft xc342km`}),s]})}W.displayName=`SelectableCard`;var G={page:`_page_1yxii_2`,column:`_column_1yxii_3`,pageTitle:`_pageTitle_1yxii_4`,sections:`_sections_1yxii_5`,section:`_section_1yxii_5`,swatches:`_swatches_1yxii_8`,sample:`_sample_1yxii_9`,sampleSurface:`_sampleSurface_1yxii_10`,sampleDot:`_sampleDot_1yxii_11`,sampleLine:`_sampleLine_1yxii_12`},K=()=>({system:m(`settings.mode.system`),light:m(`settings.mode.light`),dark:m(`settings.mode.dark`)}),q=()=>({stone:[m(`settings.palette.stone`),m(`settings.palette.stoneHint`)],sage:[m(`settings.palette.sage`),m(`settings.palette.sageHint`)],olive:[m(`settings.palette.olive`),m(`settings.palette.oliveHint`)],slate:[m(`settings.palette.slate`),m(`settings.palette.slateHint`)],clay:[m(`settings.palette.clay`),m(`settings.palette.clayHint`)]}),J=e=>e===`stone`?w:O[e],Y=[0,1];function X(){c();let{mode:e,palette:t}=T(),n=l();return(0,P.jsxs)(d,{gap:0,className:G.page,children:[(0,P.jsx)(h,{trail:[{label:m(`settings.title`)}]}),(0,P.jsxs)(d,{gap:0,className:G.column,children:[(0,P.jsxs)(d,{gap:1,className:G.pageTitle,children:[(0,P.jsx)(f,{level:1,children:m(`settings.title`)}),(0,P.jsx)(x,{type:`supporting`,color:`secondary`,children:m(`settings.subtitle`)})]}),(0,P.jsxs)(d,{gap:0,className:G.sections,children:[(0,P.jsxs)(d,{as:`section`,gap:3,className:G.section,"aria-label":m(`settings.language`),children:[(0,P.jsx)(d,{gap:1,children:(0,P.jsx)(f,{level:2,children:m(`settings.language`)})}),(0,P.jsx)(p,{gap:0,children:(0,P.jsxs)(L,{label:m(`settings.language`),value:n,onChange:e=>g(e),children:[(0,P.jsx)(V,{value:`system`,label:m(`settings.language.system`)}),(0,P.jsx)(V,{value:`en`,label:`English`}),(0,P.jsx)(V,{value:`ko`,label:`한국어`})]})})]}),(0,P.jsxs)(d,{as:`section`,gap:3,className:G.section,"aria-label":m(`settings.mode`),children:[(0,P.jsxs)(d,{gap:1,children:[(0,P.jsx)(f,{level:2,children:m(`settings.mode`)}),(0,P.jsx)(x,{type:`supporting`,color:`secondary`,children:m(`settings.modeHint`)})]}),(0,P.jsx)(p,{gap:0,children:(0,P.jsx)(L,{label:m(`settings.mode`),value:e,onChange:e=>D({mode:e}),children:E.map(e=>(0,P.jsx)(V,{value:e,label:K()[e]},e))})})]}),(0,P.jsxs)(d,{as:`section`,gap:3,className:G.section,"aria-label":m(`settings.palette`),children:[(0,P.jsxs)(d,{gap:1,children:[(0,P.jsx)(f,{level:2,children:m(`settings.palette`)}),(0,P.jsx)(x,{type:`supporting`,color:`secondary`,children:m(`settings.paletteHint`)})]}),(0,P.jsx)(A,{columns:{minWidth:176,repeat:`fit`,max:5},gap:3,children:C.map(e=>{let n=J(e),[r,i]=q()[e];return(0,P.jsx)(W,{label:r,isSelected:t===e,onChange:t=>{t&&D({palette:e})},children:(0,P.jsxs)(d,{gap:3,children:[(0,P.jsx)(d,{gap:0,className:G.swatches,"aria-hidden":`true`,children:Y.map(e=>(0,P.jsx)(p,{gap:2,vAlign:`center`,className:G.sample,style:{background:n.body[e]},children:(0,P.jsxs)(p,{gap:2,vAlign:`center`,className:G.sampleSurface,style:{background:n.surface[e],color:n.text[e]},children:[(0,P.jsx)(d,{gap:0,className:G.sampleDot,style:{background:n.accent[e]}}),(0,P.jsx)(d,{gap:0,className:G.sampleLine,style:{background:n.text[e]}})]})},e))}),(0,P.jsxs)(d,{gap:1,children:[(0,P.jsx)(x,{type:`label`,children:r}),(0,P.jsx)(x,{type:`supporting`,color:`secondary`,children:i})]})]})},e)})})]})]})]})]})}var Z=X;export{Z as component};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{l as t,q as n}from"./themeProps-CkLe5zXY.js";import{$t as r,At as i,Dt as a,G as o,H as s,St as c,V as l,W as u,Yt as d,bt as f,en as p,jt as m,xt as h,yt as g,zt as _}from"./page-header-Cs2fqdqC.js";var v=`__root__`;function y(e){e.statusCode=e.statusCode||e.code||307;let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function b(e){return e instanceof Response&&!!e.options}var x=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e.originalIndex;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=v:this.parentRoute||_();let r=n?v:t?.path;r&&r!==`/`&&(r=i(r));let o=t?.id||r,s=n?v:a([this.parentRoute.id===`__root__`?``:this.parentRoute.id,o]);r===`__root__`&&(r=`/`),s!==`__root__`&&(s=a([`/`,s]));let c=s===`__root__`?`/`:a([this.parentRoute.fullPath,r]);this._path=r,this._id=s,this._fullPath=c,this._to=m(c)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>y({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},S=class extends x{constructor(e){super(e)}},C=e(n(),1),w=C.createContext(void 0),T=C.createContext(void 0),E={};function D(e,t){let n=C.useRef();return i=>{let a=e?.select?e.select(i):i;return e?.structuralSharing??t.options.defaultStructuralSharing?n.current=r(n.current,a):a}}function O(e){let t=c(),n=C.useContext(e.from?T:w),r=e.from??n,i=t.stores.getMatchStore(r),a=D(e,t),o=h(i,e=>e?a(e):E);if(o!==E)return o;(e.shouldThrow??!0)&&_()}function k(e){return O({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function A(e){let{select:t,...n}=e;return O({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function j(e){return O({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function M(e){return O({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function N(e){return O({...e,select:t=>e.select?e.select(t.context):t.context})}var P=t(),F=class extends x{constructor(e){super(e),this.useMatch=e=>O({...e,from:this.id}),this.useRouteContext=e=>N({...e,from:this.id}),this.useSearch=e=>M({...e,from:this.id}),this.useParams=e=>j({...e,from:this.id}),this.useLoaderDeps=e=>A({...e,from:this.id}),this.useLoaderData=e=>k({...e,from:this.id}),this.useNavigate=()=>f({from:this.fullPath}),this.Link=C.forwardRef((e,t)=>(0,P.jsx)(g,{ref:t,from:this.fullPath,...e}))}};function I(e){return new F(e)}function L(){return e=>z(e)}var R=class extends S{constructor(e){super(e),this.useMatch=e=>O({...e,from:this.id}),this.useRouteContext=e=>N({...e,from:this.id}),this.useSearch=e=>M({...e,from:this.id}),this.useParams=e=>j({...e,from:this.id}),this.useLoaderDeps=e=>A({...e,from:this.id}),this.useLoaderData=e=>k({...e,from:this.id}),this.useNavigate=()=>f({from:this.fullPath}),this.Link=C.forwardRef((e,t)=>(0,P.jsx)(g,{ref:t,from:this.fullPath,...e}))}};function z(e){return new R(e)}function B(e){return e=>{let t=I(e);return t.isRoot=!1,t}}function V(e,t){let n,r,i,a=()=>(n||=(i=void 0,e().then(e=>{n=void 0,o.preload=void 0,r=e[t??`default`]}).catch(e=>{n=void 0,i=e})),n),o=function(e){if(i){if(d(i)&&typeof sessionStorage<`u`){let e=`tanstack_router_reload:${i.message}`;if(!sessionStorage.getItem(e))throw sessionStorage.setItem(e,`1`),window.location.reload(),new Promise(()=>{})}throw i}if(!r){if(p)p(a());else throw a()}return C.createElement(r,e)};return o.preload=a,o}var H=class extends s{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){e._type=`infinite`,super.setOptions(e)}getOptimisticResult(e){return e._type=`infinite`,super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`backward`}}})}createResult(e,t){let{state:n}=e,r=super.createResult(e,t),{isFetching:i,isRefetching:a,isError:s,isRefetchError:c}=r,l=n.fetchMeta?.fetchMore?.direction,d=s&&l===`forward`,f=i&&l===`forward`,p=s&&l===`backward`,m=i&&l===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:u(t,n.data),hasPreviousPage:o(t,n.data),isFetchNextPageError:d,isFetchingNextPage:f,isFetchPreviousPageError:p,isFetchingPreviousPage:m,isRefetchError:c&&!d&&!p,isRefetching:a&&!f&&!m}}};function U(e,t){return l(e,H,t)}export{D as a,y as c,L as i,v as l,V as n,w as o,B as r,b as s,U as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{V as t,l as n,q as r}from"./themeProps-CkLe5zXY.js";import{u as i}from"./useIsomorphicLayoutEffect-BiEJxDg_.js";import{yt as a}from"./page-header-CRcXie4p.js";import{_ as o}from"./Icon-DPaLmsmh.js";var s=e(r(),1),c=n(),l=new Set([`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`]),u={horizontal:[`left`,`right`],vertical:[`up`,`down`],both:[`left`,`right`,`up`,`down`]},d={hint:{kVAEAm:`xixxii4`,kpwlN0:`x1anvkwx`,kogj98:`x1ghz6dp`,kWkggS:`x1prclbq`,kaIpWk:`xh6dtrn`,kGVxlE:`x1i5ehqx`,kLKAdn:`xfsso4q`,kGO01o:`xy143xn`,kZCmMZ:`x12gdq22`,kwRFfy:`x1djylfy`,kGuDYH:`x141an7d`,kLWn49:`x1ltkj2j`,kMwMTN:`xv1l7n4`,khDVqt:`xuxw1ft`,kSiTet:`xg01cxk xofkqq2`,k1ekBW:`xsm4mo9`,kIyJzY:`xx6bhzk`,kzIqYQ:`xd00j3c`,kfzvcC:`x47corl`,$$css:!0}};function f(e={}){let{orientation:n=`horizontal`,dismissAfterMs:r=3e3,isEnabled:f=!0}=e,p=o(),m=(0,s.useRef)(null),h=(0,s.useRef)(!1),g=(0,s.useRef)(!1),_=(0,s.useRef)(()=>{}),v=(0,s.useCallback)(()=>{m.current&&=(clearTimeout(m.current),null)},[]),y=(0,s.useCallback)(()=>{g.current=!0},[]),b=(0,s.useCallback)(()=>{g.current=!1,v(),_.current(null)},[v]),x=i({mode:`context`,onShow:y,onHide:b});_.current=x.ref;let S=(0,s.useCallback)(()=>{h.current=!0,v(),x.hide(),g.current=!1,_.current(null)},[v,x]),C=(0,s.useCallback)(e=>{!h.current&&f&&(_.current(e),x.show(),v(),m.current=setTimeout(()=>{S()},r))},[v,S,r,f,x]);(0,s.useEffect)(()=>()=>{v(),_.current(null)},[v]);let w=(0,s.useCallback)(e=>{if(h.current||!f)return;let t=e.target;if(!t.matches(`:focus-visible`))return;let n=e.currentTarget;e.relatedTarget instanceof Node&&n.contains(e.relatedTarget)||C(t)},[C,f]),T=(0,s.useCallback)(e=>{if(!g.current)return;let t=e.currentTarget;if(e.relatedTarget instanceof Node&&t.contains(e.relatedTarget)){!h.current&&e.relatedTarget instanceof HTMLElement&&_.current(e.relatedTarget);return}S()},[S]),E=(0,s.useCallback)(e=>{g.current&&l.has(e.key)&&S()},[S]),D=(0,c.jsx)(`span`,{className:`x3nfvp2 x6s0dn4 xzye2dw`,children:u[n].map(e=>(0,c.jsx)(a,{keys:e},e))});return{hintElement:x.render((0,c.jsxs)(`span`,{"aria-hidden":`true`,children:[D,(0,c.jsx)(`span`,{className:`x11g1kdw`,children:p(`@astryx.keyboardHint.toNavigate`)})]}),{placement:`below`,alignment:`start`,xstyle:d.hint,style:{marginBlockStart:t[`--spacing-2`]}}),onFocus:w,onBlur:T,onKeyDown:E}}export{f as t};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{V as t,l as n,q as r}from"./themeProps-CkLe5zXY.js";import{u as i}from"./useIsomorphicLayoutEffect-BiEJxDg_.js";import{gt as a}from"./page-header-Cs2fqdqC.js";import{_ as o}from"./Icon-DPaLmsmh.js";var s=e(r(),1),c=n(),l=new Set([`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`]),u={horizontal:[`left`,`right`],vertical:[`up`,`down`],both:[`left`,`right`,`up`,`down`]},d={hint:{kVAEAm:`xixxii4`,kpwlN0:`x1anvkwx`,kogj98:`x1ghz6dp`,kWkggS:`x1prclbq`,kaIpWk:`xh6dtrn`,kGVxlE:`x1i5ehqx`,kLKAdn:`xfsso4q`,kGO01o:`xy143xn`,kZCmMZ:`x12gdq22`,kwRFfy:`x1djylfy`,kGuDYH:`x141an7d`,kLWn49:`x1ltkj2j`,kMwMTN:`xv1l7n4`,khDVqt:`xuxw1ft`,kSiTet:`xg01cxk xofkqq2`,k1ekBW:`xsm4mo9`,kIyJzY:`xx6bhzk`,kzIqYQ:`xd00j3c`,kfzvcC:`x47corl`,$$css:!0}};function f(e={}){let{orientation:n=`horizontal`,dismissAfterMs:r=3e3,isEnabled:f=!0}=e,p=o(),m=(0,s.useRef)(null),h=(0,s.useRef)(!1),g=(0,s.useRef)(!1),_=(0,s.useRef)(()=>{}),v=(0,s.useCallback)(()=>{m.current&&=(clearTimeout(m.current),null)},[]),y=(0,s.useCallback)(()=>{g.current=!0},[]),b=(0,s.useCallback)(()=>{g.current=!1,v(),_.current(null)},[v]),x=i({mode:`context`,onShow:y,onHide:b});_.current=x.ref;let S=(0,s.useCallback)(()=>{h.current=!0,v(),x.hide(),g.current=!1,_.current(null)},[v,x]),C=(0,s.useCallback)(e=>{!h.current&&f&&(_.current(e),x.show(),v(),m.current=setTimeout(()=>{S()},r))},[v,S,r,f,x]);(0,s.useEffect)(()=>()=>{v(),_.current(null)},[v]);let w=(0,s.useCallback)(e=>{if(h.current||!f)return;let t=e.target;if(!t.matches(`:focus-visible`))return;let n=e.currentTarget;e.relatedTarget instanceof Node&&n.contains(e.relatedTarget)||C(t)},[C,f]),T=(0,s.useCallback)(e=>{if(!g.current)return;let t=e.currentTarget;if(e.relatedTarget instanceof Node&&t.contains(e.relatedTarget)){!h.current&&e.relatedTarget instanceof HTMLElement&&_.current(e.relatedTarget);return}S()},[S]),E=(0,s.useCallback)(e=>{g.current&&l.has(e.key)&&S()},[S]),D=(0,c.jsx)(`span`,{className:`x3nfvp2 x6s0dn4 xzye2dw`,children:u[n].map(e=>(0,c.jsx)(a,{keys:e},e))});return{hintElement:x.render((0,c.jsxs)(`span`,{"aria-hidden":`true`,children:[D,(0,c.jsx)(`span`,{className:`x11g1kdw`,children:p(`@astryx.keyboardHint.toNavigate`)})]}),{placement:`below`,alignment:`start`,xstyle:d.hint,style:{marginBlockStart:t[`--spacing-2`]}}),onFocus:w,onBlur:T,onKeyDown:E}}export{f as t};
@@ -14,7 +14,7 @@
14
14
  crossorigin
15
15
  />
16
16
  <title>Gitifact</title>
17
- <script type="module" crossorigin src="/assets/index-BljzO9go.js"></script>
17
+ <script type="module" crossorigin src="/assets/index-DsduXf6u.js"></script>
18
18
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
19
19
  <link rel="modulepreload" crossorigin href="/assets/themeProps-CkLe5zXY.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/useIsomorphicLayoutEffect-BiEJxDg_.js">
@@ -23,45 +23,39 @@
23
23
  <link rel="modulepreload" crossorigin href="/assets/Icon-DPaLmsmh.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/useScrollLock-D-Y-zHSV.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/container.stylex-rwI38dw9.js">
26
- <link rel="modulepreload" crossorigin href="/assets/page-header-CRcXie4p.js">
26
+ <link rel="modulepreload" crossorigin href="/assets/page-header-Cs2fqdqC.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/IconButton-Br-4XhQr.js">
28
28
  <link rel="modulepreload" crossorigin href="/assets/useDevWarning-Dudfg3qF.js">
29
- <link rel="modulepreload" crossorigin href="/assets/Table-Cr2jvka_.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/Table-Dm6wz2kf.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/Tooltip-MoU3alsv.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/useClipboard-Cqx6Upy7.js">
32
- <link rel="modulepreload" crossorigin href="/assets/Markdown-75QVB57V.js">
32
+ <link rel="modulepreload" crossorigin href="/assets/Markdown-BpWtY88p.js">
33
33
  <link rel="modulepreload" crossorigin href="/assets/appearance-DyJA06C4.js">
34
- <link rel="modulepreload" crossorigin href="/assets/document-odLLdugz.js">
34
+ <link rel="modulepreload" crossorigin href="/assets/document-BbL374wf.js">
35
35
  <link rel="modulepreload" crossorigin href="/assets/HoverCard-Bpt8LVFT.js">
36
- <link rel="modulepreload" crossorigin href="/assets/Token-BBk7tRek.js">
37
- <link rel="modulepreload" crossorigin href="/assets/HgiRefresh-CnBE2KZ8.js">
38
- <link rel="modulepreload" crossorigin href="/assets/document-BnxE7Txb.js">
36
+ <link rel="modulepreload" crossorigin href="/assets/Token-9hr7eTF1.js">
37
+ <link rel="modulepreload" crossorigin href="/assets/HgiRefresh-CmdxsKUC.js">
38
+ <link rel="modulepreload" crossorigin href="/assets/document-Dtyl4_It.js">
39
39
  <link rel="modulepreload" crossorigin href="/assets/Section-Z2PuhE6c.js">
40
- <link rel="modulepreload" crossorigin href="/assets/Selector-E8jyEKNB.js">
41
- <link rel="modulepreload" crossorigin href="/assets/lazyRouteComponent-BZI8yQj_.js">
42
- <link rel="modulepreload" crossorigin href="/assets/useKeyboardHint-CGJ2GVT3.js">
43
- <link rel="modulepreload" crossorigin href="/assets/Tab-C-PhLRIZ.js">
44
- <link rel="modulepreload" crossorigin href="/assets/useInfiniteQuery-CrEm5UW2.js">
45
- <link rel="modulepreload" crossorigin href="/assets/load-more-BVsXjzHC.js">
46
- <link rel="modulepreload" crossorigin href="/assets/contributor-CqqvzxLh.js">
47
- <link rel="modulepreload" crossorigin href="/assets/activity-timeline-B3s0viEt.js">
48
- <link rel="modulepreload" crossorigin href="/assets/commit-BHwKZ7hK.js">
40
+ <link rel="modulepreload" crossorigin href="/assets/Selector-Dji19JSe.js">
41
+ <link rel="modulepreload" crossorigin href="/assets/useInfiniteQuery-IoAmrFi4.js">
42
+ <link rel="modulepreload" crossorigin href="/assets/useKeyboardHint-Wwnf-tpi.js">
43
+ <link rel="modulepreload" crossorigin href="/assets/Tab-BY4IuGKn.js">
44
+ <link rel="modulepreload" crossorigin href="/assets/load-more-COb87OhG.js">
45
+ <link rel="modulepreload" crossorigin href="/assets/activity-timeline-BdRnSGAp.js">
46
+ <link rel="modulepreload" crossorigin href="/assets/commit-BWyvKMHI.js">
49
47
  <link rel="modulepreload" crossorigin href="/assets/Grid-DCCm_m5g.js">
50
- <link rel="modulepreload" crossorigin href="/assets/MetadataListItem-BEwPg27H.js">
51
- <link rel="modulepreload" crossorigin href="/assets/features-C0YzZiS-.js">
48
+ <link rel="modulepreload" crossorigin href="/assets/features-B1FsIXwk.js">
52
49
  <link rel="modulepreload" crossorigin href="/assets/search-CbtiuqNx.js">
53
- <link rel="modulepreload" crossorigin href="/assets/contributors-CuMPZx6_.js">
54
- <link rel="modulepreload" crossorigin href="/assets/instructions-DWS_nwe0.js">
50
+ <link rel="modulepreload" crossorigin href="/assets/contributors-Bk_xjPNJ.js">
55
51
  <link rel="stylesheet" crossorigin href="/assets/page-header-DTEyUWBS.css">
56
52
  <link rel="stylesheet" crossorigin href="/assets/document-Drgtj94X.css">
57
53
  <link rel="stylesheet" crossorigin href="/assets/Token-CKcN25HT.css">
58
- <link rel="stylesheet" crossorigin href="/assets/document-Cmx0e6kz.css">
59
- <link rel="stylesheet" crossorigin href="/assets/contributor-2mkEa2Wo.css">
54
+ <link rel="stylesheet" crossorigin href="/assets/document-DXzNxu17.css">
60
55
  <link rel="stylesheet" crossorigin href="/assets/activity-timeline-BEeyw2GA.css">
61
56
  <link rel="stylesheet" crossorigin href="/assets/commit-DVyOH45R.css">
62
57
  <link rel="stylesheet" crossorigin href="/assets/features-FKxsPKab.css">
63
58
  <link rel="stylesheet" crossorigin href="/assets/contributors-CPdOQKMF.css">
64
- <link rel="stylesheet" crossorigin href="/assets/instructions-2OUMP-vh.css">
65
59
  <link rel="stylesheet" crossorigin href="/assets/index-CswY1wJ4.css">
66
60
  </head>
67
61
  <body>
@@ -1,11 +1,11 @@
1
1
  ## Gitifact Guide
2
2
 
3
- Product behavior (requirements and designs), instructions and decision records live in `.gitifact/` and are managed with the CLI `gitifact`. If the project specifies another way to run it, that is what `gitifact` means.
3
+ Product behavior (requirements and designs) and decision records live in `.gitifact/` and are managed with the CLI `gitifact`. If the project specifies another way to run it, that is what `gitifact` means.
4
4
 
5
5
  ### At the start of a session
6
6
 
7
- 1. If `gitifact` is missing, show the user the exact command `npm i -g gitifact@<version>` with the `cli` version in `.gitifact/config.json` (`npm.cmd` in Windows PowerShell), ask whether to run it, and run it yourself once allowed. Do not leave the install to the user.
8
- 2. Read every instruction with `gitifact instructions list --all`, and check git status and existing staging.
7
+ 1. Run Gitifact commands as `node .gitifact/bin/cli.mjs <command>`; `gitifact` in this block means that command. The first run fetches the `cli` version in `.gitifact/config.json` once for this computer. If that file is missing, show the user the exact command `npx --yes gitifact@<cli version> update` (`npx.cmd` in Windows PowerShell), ask whether to run it, and run it yourself once allowed. Do not leave the install to the user.
8
+ 2. Check git status and existing staging.
9
9
 
10
10
  ### What belongs in requirements
11
11
 
@@ -23,8 +23,8 @@ Record product behavior and constraints that must be maintained.
23
23
  | Situation | First |
24
24
  | --- | --- |
25
25
  | Product behavior comes up | Check existing specs and conflicts with `specs list --type requirement` |
26
- | Before changing code or documents | Read the feature's requirements and designs (`specs show <ID>`), the instructions the index outside this block points to, and the document's decision flow (`records list --doc <ID>`) |
27
- | Writing a new document | Read `guide show spec` (`design` for designs, `instructions` for instructions) and `guide show writing`. Get IDs with `specs new` or `instructions new`, and verify with `gitifact check` after editing |
26
+ | Before changing code or documents | Read the feature's requirements and designs (`specs show <ID>`) and the document's decision flow (`records list --doc <ID>`) |
27
+ | Writing a new document | Read `guide show spec` (`design` for designs) and `guide show writing`. Get IDs with `specs new`, and verify with `gitifact check` after editing |
28
28
  | Changing a document or choosing between options | Write a decision record with `records new` (`guide show records`) |
29
29
  | Asked to commit | Read `guide show commit`, write the input to the file `changes list` names, then run `changes commit` |
30
30
  | Asked to show the records | Run `gitifact browser` in the background and give the URL |
@@ -32,7 +32,7 @@ Record product behavior and constraints that must be maintained.
32
32
 
33
33
  ### Rules
34
34
 
35
- - When a version notice appears before a command's output, show the user the notice's install command and ask before the next step: update now (recommended) or later (`gitifact update --later`). Once allowed, run the install and `gitifact update` yourself and reread this block. If your tool blocks it, request that tool's approval.
35
+ - When a version notice appears before a command's output, show the user the notice's update command and ask before the next step: update now (recommended) or later (`gitifact update --later`). Once allowed, run that command yourself and reread this block. If your tool blocks it, request that tool's approval.
36
36
  - Commit only on a user request or project policy; push only when asked separately. Commit each decision with its record, documents, code and tests, and suggest a commit once when work is finished and left uncommitted.
37
37
  - Do not issue IDs, check or commit without running the CLI, or report that as done.
38
38
  - Write requirements and designs together for a new feature, in the project's language. Ask only about unclear product behavior and carry on with the rest.
@@ -40,7 +40,7 @@ Record product behavior and constraints that must be maintained.
40
40
 
41
41
  ### Commands
42
42
 
43
- - `specs`·`instructions`·`records`: `list`·`show`·`new`. `check`: whole check. `changes list`·`changes commit --file <json> [--dry-run]`
43
+ - `specs`·`records`: `list`·`show`·`new`. `check`: whole check. `changes list`·`changes commit --file <json> [--dry-run]`
44
44
  - `browser`, `feedback`, `update [--check | --commit | --later]`, `init`, `guide list`·`guide show <topic>` ({topics}). Lists show 20 at a time; read on with the `--after <value>` at the end (`--all` for everything). They take `--fields` and `--format json`; see `--help` for options.
45
45
 
46
46
  ---
@@ -1,3 +1,17 @@
1
+ ## 0.9.0 - 2026-10-12
2
+ ### Added
3
+ - A project launcher, `.gitifact/bin/cli.mjs`. `init` and `update` write it, and agents run `node .gitifact/bin/cli.mjs <command>` without a global install. On first run the launcher fetches the `cli` version in `.gitifact/config.json` once into the user cache (sha512 integrity checked) and runs that version, so projects on different versions do not affect each other. A global install is optional.
4
+ ### Changed
5
+ - Updating is one `npx --yes gitifact@<version> update`. It moves the config's `cli`, the agent block and the launcher to the new version together. Version notices, the agent block and the guides point to it.
6
+ - `init` no longer creates a one-line `@AGENTS.md` CLAUDE.md for a project whose block lives only in AGENTS.md. Claude Code reads AGENTS.md when there is no CLAUDE.md. An existing CLAUDE.md or `.claude/CLAUDE.md` still gets the block. `update` no longer reports that file as missing, and `agentDocs.missing` in the update result (v6) is always empty.
7
+ - The history cache is rebuilt once; the first history read after updating takes a little longer.
8
+ - Upgrading from 0.8.x: run `npx --yes gitifact@0.9.0 update`, move any `.gitifact/instructions/` as section 8 of `guide show migrate` describes, then commit the new launcher `.gitifact/bin/cli.mjs` together with the config and block changes.
9
+ ### Removed
10
+ - Project instructions (`.gitifact/instructions/`) are no longer kept. The `instructions` command, `guide show instructions`, and the browser's instructions page and API are gone; Gitifact handles requirements, designs and records only. `check` stops on a leftover instruction folder with `INSTRUCTION_MOVED`, and section 8 of `guide show migrate` moves it to the skills folder of the agent you use (`.claude/skills/`, `.agents/skills/` and so on). Instructions in commits before 0.9.0 still read in the history.
11
+ ### Fixed
12
+ - `records new --docs` and the `--fields` option split values on commas and spaces. A list now reads correctly when Windows PowerShell passes an unquoted `a,b` through npm's shim as `a b`.
13
+ - The message check of `changes commit` refuses only trailer lines of the form `Gitifact-<key>:`. A body line such as `gitifact-playbook skill ...` without a colon passes.
14
+
1
15
  ## 0.8.6 - 2026-09-28
2
16
  ### Added
3
17
  - Requirements can be written as use cases (optional). Put `style: usecase` in the frontmatter, write a basic flow and alternative flows (A1…) in the body, and give each acceptance criterion a `Path:` line naming the path it checks. A project that does not use it works as before ("Use-case style" in `guide show spec`).
@@ -43,4 +43,4 @@ If the project has its own rules for grouping commits, follow them. Under a spli
43
43
 
44
44
  ## Message and trailers
45
45
 
46
- Follow the project's commit message convention. If none exists, state briefly what changed on the first line and why in the body. The CLI adds trailers for the changed documents and the documents records name (`Gitifact-Req` for requirements, `Gitifact-Design` for designs, `Gitifact-Doc` for features and instructions, `Gitifact-Record` for records). A message with a line starting `Gitifact-` is refused.
46
+ Follow the project's commit message convention. If none exists, state briefly what changed on the first line and why in the body. The CLI adds trailers for the changed documents and the documents records name (`Gitifact-Req` for requirements, `Gitifact-Design` for designs, `Gitifact-Doc` for features, `Gitifact-Record` for records). A message with a `Gitifact-` trailer line such as `Gitifact-Req: ...` is refused (the key ignores case). An ordinary sentence that starts with `Gitifact-` is allowed.
@@ -32,8 +32,8 @@ order: 20
32
32
  requirements:
33
33
  - R-actual-related-requirement
34
34
  sources:
35
- - id: I-actual-instruction-followed
36
- note: Layers and dependency direction
35
+ - id: D-actual-design-referred-to
36
+ note: Uses the same storage flow
37
37
  - title: Library docs
38
38
  url: https://example.test/docs
39
39
  ---
@@ -58,7 +58,7 @@ A design keeps no decision table. A choice among options goes into a record with
58
58
 
59
59
  For diagrams, follow `gitifact guide show writing` for choosing the kind and drawing it, and place each in the file for the axis it explains. Each axis has kinds that suit it: `erDiagram` and a `flowchart` of cache or read flows for data, a `sequenceDiagram` of requests between components for interface, a `stateDiagram-v2` of screen states for ui, and failure and recovery flows for errors.
60
60
 
61
- Before writing a design, read the instructions for the area of work from the AGENTS.md index and list the ones you followed in `sources`. Do not repeat what an instruction already says; a design holds only what is particular to this feature. Instructions do not point at designs, so the relation is written in this one direction only. If the design conflicts with an instruction, agree with the user on whether to change the instruction first.
61
+ Do not repeat what the project's rules for working (AGENTS.md or the agent's skills) already say; a design holds only what is particular to this feature. If the design conflicts with those rules, agree with the user on whether to change the rules first.
62
62
 
63
63
  ## When to write one
64
64
 
@@ -1,9 +1,9 @@
1
1
  ---
2
- title: Migrating a 0.7 project
3
- description: Steps, checks and the migration commit for moving a schemaVersion 2 project to the 0.8.0 document format
2
+ title: Moving old formats
3
+ description: Steps and the migration commit for moving a schemaVersion 2 project to the 0.8.0 document format, and moving 0.8 project instructions to the agent's skills
4
4
  ---
5
5
 
6
- When the user asks to move a 0.7 project (`schemaVersion: 2` in `.gitifact/config.json`) to the 0.8.0 document format (schemaVersion 3), follow these steps. The CLI has no conversion command, so the agent reads the old files and writes the new structure itself. Finish with a report in the form of the "Report" section.
6
+ When the user asks to move a 0.7 project (`schemaVersion: 2` in `.gitifact/config.json`) to the 0.8.0 document format (schemaVersion 3), follow sections 1 to 7. A project with only the 0.8 project instructions (`.gitifact/instructions/`) left follows section 8. The CLI has no conversion command, so the agent reads the old files and writes the new structure itself. Finish with a report in the form of the "Report" section.
7
7
 
8
8
  In this guide, `gitifact` means the way to run the CLI that printed it (0.8.0 or later). Do not use a 0.7.x CLI. The 0.8.0 CLI refuses to read a schemaVersion 2 project, so read the files directly until step 3 changes the configuration.
9
9
 
@@ -12,7 +12,7 @@ In this guide, `gitifact` means the way to run the CLI that printed it (0.8.0 or
12
12
  - `git status` must be clean. If there are uncommitted changes or staged files, stop and tell the user.
13
13
  - If an **open branch** changed `.gitifact/` in the old format, tell the user to merge it before the migration and ask whether to merge or continue. Merging an old-format branch after the migration mixes the two formats, and `gitifact check` fails.
14
14
  - The migration ends in a single commit. Confirm that you may commit. When possible, work on a new branch and merge after verification.
15
- - Section 3 of this guide describes the whole new format. If a detail is unclear, run `gitifact init` and `gitifact specs new feature|requirement|design|instruction …` in an empty Git repository outside the project to see the skeletons the CLI writes, and check them with `gitifact check`.
15
+ - Section 3 of this guide describes the whole new format. If a detail is unclear, run `gitifact init` and `gitifact specs new feature|requirement|design …` in an empty Git repository outside the project to see the skeletons the CLI writes, and check them with `gitifact check`.
16
16
 
17
17
  ## 2. Reading the old format
18
18
 
@@ -54,7 +54,7 @@ Every structural fact lives in frontmatter only. Bodies carry no `#` title and n
54
54
  ```
55
55
  4. **Designs:** for each feature with an old design.md, run `gitifact specs new design <feature>/overview --title "<old design title>" --description "<one line>"` to get a D- ID. Replace the body of the `design/overview.md` it created with the old design body (without its first line `# Design title`) and remove the `draft: true` line. Then:
56
56
  - Remove the old `<!-- gitifact-ref: … -->` lines and list every R- ID they named, without duplicates, in the frontmatter `requirements`.
57
- - Move old `sources`: a `path` becomes `- id: W-…` for the wiki page it points to (with its `note`, if any); a `url` becomes `- title: …` / `url: …`. The W- becomes the I- of the instruction that page moves to in step 5.
57
+ - Move old `sources`: a `path` becomes `- id: W-…` for the wiki page it points to (with its `note`, if any); a `url` becomes `- title: …` / `url: …`. Step 5 removes the W-.
58
58
  - Leave the rest of the body unchanged. Keep the `order: 10` that `specs new` wrote. Do not split a design into files per concern (data, interface, ui, errors, …) in the migration commit. Move it as one overview so the moved body can be compared, and split it afterwards in a separate commit following `gitifact guide show design`.
59
59
  - The frontmatter ends up like this. Sources in the new format have no `title`, so the old title of a wiki source is dropped.
60
60
  ```markdown
@@ -67,41 +67,26 @@ Every structural fact lives in frontmatter only. Bodies carry no `#` title and n
67
67
  - R-…
68
68
  - R-…
69
69
  sources:
70
- - id: I-…
71
- note: the old note (if any)
72
70
  - title: Outside document title
73
71
  url: https://…
74
72
  ---
75
73
  ```
76
- 5. **Wiki → instructions:** in 0.8.0 the wiki became project instructions (`gitifact guide show instructions`). `check` refuses pages left in `.gitifact/wiki/` with `WIKI_REMOVED`, so move every page into an instruction folder. Before moving, show the user a table of which page becomes which file of which instruction and get their confirmation. If the user changes the grouping, follow it.
77
-
78
- | Old location | New location |
79
- | :--- | :--- |
80
- | `wiki/README.md` (policy and entry page) | If it is still the default policy `init` wrote (decision records collected under `adr/`), delete it without moving. If the project rewrote it, move it like a root page to the `index.md` of instruction `overview`. Whether its wiki rules move to AGENTS.md is decided in section 6 |
81
- | Root page `wiki/<name>.md` | `index.md` of instruction `<name>`. Upper-case names become lower case (`ARCHITECTURE.md` → `architecture`) |
82
- | Top-level folder `wiki/<folder>/` | Instruction `<folder>`. The folder's `README.md`, if any, becomes `index.md`; the other pages become `references/<path inside the folder>` |
83
- | Folder with the same name as a root page | One instruction; the root page is `index.md` |
84
-
85
- - For each instruction, run `gitifact instructions new <name> --title "<title>" --description "<one line>"` to get an I- ID. The title is the old title of the page that becomes `index.md`. For a folder without such a page, name the topic the folder holds (for example `handbook` → Team handbook). The description says what the instruction holds and for which work to read it.
86
- - For the page that becomes `index.md`, drop the first body line `# Title` and move the rest unchanged: replace the body `specs new` wrote with it and remove the `draft: true` line. If a folder has no page to become `index.md`, write one line per reference file in the body, with its old title and a link.
87
- - Pages moved to references keep the old body as it is (including the `# Title` line); replace `id: W-…` in the frontmatter with `title` (the old `# Title`) and `description` (one line on what the file holds and for which work to read it). Reference files have no ID.
88
- - Move images and other non-Markdown files from the wiki folder into the instruction folder that uses them.
89
- - Instructions cannot point at specs (`INSTRUCTION_SPEC_LINK`). In the moved files, reduce links under `.gitifact/spec/` from `[text](path)` to their text. Other relative links are fixed for the new location in step 6.
90
- - Design `sources` that named a wiki page W- in step 4 now name the I- of the instruction that page moved to. If a design ends up naming the same instruction twice, merge the two and join the notes with `; `.
91
- - The old W- IDs disappear from documents and stay only in the reasons of 0.7 commits.
92
- - Do not turn the wiki's decision record (ADR) pages into record files or regroup instructions in the migration commit. Move bodies unchanged so they can be compared, and polish them in a separate commit after the migration.
93
- 6. **Relative links:** requirements and designs moved, so fix relative links in document bodies that point to the old `requirements.md` or `design.md`, or that break because a file moved (requirement and design bodies are now one folder deeper). Point links to wiki pages at the instruction files the pages moved to, and fix links inside moved instruction files for their new location. Do not edit bodies beyond fixing links.
74
+ 5. **Wiki:** the wiki went in 0.8.0, and how work is done in the project is not kept by Gitifact. `check` refuses pages left in `.gitifact/wiki/` with `WIKI_REMOVED`. Show the user a table of where each page goes (the agent's skills folder, AGENTS.md outside the block, or a plain document such as under `docs/`), and move them once confirmed. The moved files are not Gitifact documents and have no ID: delete the `id: W-…` line of the frontmatter and keep the first `# Title` line. A page moved to a skill follows that agent's skill format (steps 2 and 3 of section 8).
75
+ - Remove the `- id: W-…` items written into design `sources` in step 4. To keep the reference, write the moved file's path in the design body.
76
+ - The old W- IDs leave the documents and remain only in the reasons of the 0.7 commits.
77
+ - Do not regroup or polish the wiki pages in the migration commit. Move bodies unchanged so they can be compared, and polish them in a separate commit afterwards.
78
+ 6. **Relative links:** requirements and designs moved, so fix relative links in document bodies that point to the old `requirements.md` or `design.md`, or that break because a file moved (requirement and design bodies are now one folder deeper). Point links to wiki pages at the files the pages moved to, and fix links inside the moved files for their new location. Do not edit bodies beyond fixing links.
94
79
  7. **Reasons:** do not move the reasons in the old history.jsonl files. They stay in the 0.7 commits and remain visible in the history (`records list --doc`, the browser) after the migration. Reasons for changes from 0.8.0 on are kept in records (`gitifact guide show records`). The migration commit gets no records; it is hidden from the history.
95
80
  8. **Delete the old files:** remove every `.gitifact/spec/<feature>/requirements.md`, `design.md`, `history.jsonl` and the whole `.gitifact/wiki/` folder (including `wiki/history.jsonl`), once step 5 has moved every page, with a plain file deletion. Do not use `git rm`: it stages the deletion and the commit in section 5 refuses existing staging. If something is staged, unstage it with `git restore --staged <path>`.
96
81
 
97
- The mechanical parts (splitting files, moving wiki pages) may be done with a one-off script. Keep the script outside the project and never commit it. Write slugs, descriptions and feature bodies yourself after reading the content. Every feature, requirement, instruction and reference file needs a description, which makes this the largest part of the migration (68 for a project with 18 features, 45 requirements and 5 instructions). A description should let a reader recognize in one line of a list what the document requires or covers; do not repeat the title, condense the user story or the first paragraph instead.
82
+ The mechanical parts (splitting files, moving wiki pages) may be done with a one-off script. Keep the script outside the project and never commit it. Write slugs, descriptions and feature bodies yourself after reading the content. Every feature and requirement needs a description, which makes this the largest part of the migration (63 for a project with 18 features and 45 requirements). A description should let a reader recognize in one line of a list what the document requires or covers; do not repeat the title, condense the user story or the first paragraph instead.
98
83
 
99
- **Allowed exceptions:** normally only the CLI issues IDs and committed reasons are never edited. For this migration only, existing S- and R- IDs are copied over. Never invent IDs (designs get their D- and instructions their I- from `specs new`).
84
+ **Allowed exceptions:** normally only the CLI issues IDs and committed reasons are never edited. For this migration only, existing S- and R- IDs are copied over. Never invent IDs (designs get their D- from `specs new`).
100
85
 
101
86
  ## 4. Checks
102
87
 
103
88
  1. `gitifact check` must report no problems. Fix anything it reports.
104
- 2. Compare with the counts from section 2: features = number of `index.md`, requirements, designs (`design/overview.md` per feature), wiki pages (the `index.md` and reference files in the step 5 table together). Count documents with `gitifact specs list --format json` and `gitifact instructions list --format json`.
89
+ 2. Compare with the counts from section 2: features = number of `index.md`, requirements, designs (`design/overview.md` per feature), wiki pages (the files moved in step 5). Count documents with `gitifact specs list --format json`.
105
90
  3. Check that every old ID is present. Collect old IDs from `git grep -ohE '(S|R)-[a-z2-7]{10}' HEAD -- .gitifact` at their definitions (frontmatter `id`, `gitifact-req` comments) and new IDs from `documents[].id` of `gitifact specs list --format json`. No `.gitifact/wiki/` or `history.jsonl` file may remain and no design `sources` may name a W-.
106
91
  4. The last lines of `gitifact changes list` must include `Document check: no problems`. Its other output is expected at this point: the old format does not parse as documents, so every document shows as `created`. New documents need no record. None of this blocks the commit.
107
92
 
@@ -125,16 +110,28 @@ Write JSON to the input path that `gitifact changes list` reports and run `gitif
125
110
 
126
111
  ## 6. After the migration
127
112
 
128
- - Refresh the GITIFACT block in the agent instruction files with `gitifact update`. If project instructions outside the block (AGENTS.md, CLAUDE.md, …) mention old commands such as `spec working`, `spec save`, `spec commit` or `docs <topic>`, ask the user whether to replace them with the new ones (`list`, `show` and `new` of `specs`, `instructions` and `records`, `check`, `changes list`·`commit`, `guide show`) in a separate commit.
113
+ - Refresh the GITIFACT block in the agent instruction files with `gitifact update`. If project instructions outside the block (AGENTS.md, CLAUDE.md, …) mention old commands such as `spec working`, `spec save`, `spec commit` or `docs <topic>`, ask the user whether to replace them with the new ones (`list`, `show` and `new` of `specs` and `records`, `check`, `changes list`·`commit`, `guide show`) in a separate commit.
129
114
  - If the old index of the 0.7.x browser exists at `<git common dir>/gitifact/` (usually `.git/gitifact/`), tell the user it can be deleted. 0.8.0 does not use it; leave the deletion to the user.
130
115
  - The 0.8.0 cache lives in `.gitifact/cache/` and keeps itself out of Git. The first query reads the history from the start and may take a few seconds.
131
- - If the wiki README moved to instruction `overview` holds rules for running the wiki (what goes where), agree with the user whether to move them to AGENTS.md or another instruction. Then write the instruction index outside the GITIFACT block of AGENTS.md: one line per instruction saying for which work to read it ("The AGENTS.md index" in `gitifact guide show instructions`). Ask the user whether to record this in a commit separate from the migration.
132
- - Turning the ADRs moved to references into records (`gitifact guide show records`) while leaving only the rules to keep in the instruction body, and regrouping instructions, are agreed with the user and done in a separate commit. The migration commit is hidden, so records written in that later commit are the ones the history shows.
133
- - The migration commit leaves bodies as they were, so instructions or specification bodies may still describe the old format (`requirements.md`, `spec save`, …) or refer to the wiki. Report where, and agree with the user on fixing them in a separate commit.
116
+ - Turning moved wiki pages that were decision records (ADRs) into records (`gitifact guide show records`), and regrouping the pages, are agreed with the user and done in a separate commit. The migration commit is hidden, so records written in that later commit are the ones the history shows.
117
+ - The migration commit leaves bodies as they were, so moved files or specification bodies may still describe the old format (`requirements.md`, `spec save`, …) or refer to the wiki. Report where, and agree with the user on fixing them in a separate commit.
134
118
 
135
119
  ## 7. Report
136
120
 
137
- - Moved counts: features, requirements, designs, wiki pages (with the old counts), and the table of instructions the wiki pages moved to
121
+ - Moved counts: features, requirements, designs, wiki pages (with the old counts), and the table of where the wiki pages moved
138
122
  - The `check` result and the comparison result
139
123
  - Relative links fixed, anything not moved or that needed a judgment call
140
- - The commit hash (if committed) and what remains (old commands in instructions, the old index)
124
+ - The commit hash (if committed) and what remains (old commands in the moved files)
125
+
126
+ ## 8. Moving 0.8 project instructions
127
+
128
+ From 0.9.0 Gitifact does not keep how work is done in the project (instructions). If `.gitifact/instructions/` is still there, `check` refuses each folder with `INSTRUCTION_MOVED`. The document format (schemaVersion 3) stays; once the user agrees, move them in this order.
129
+
130
+ 1. Ask the user where the instructions go. Each agent has its own skills folder (`.claude/skills/<name>/SKILL.md` for Claude Code; `.agents/skills/<name>/SKILL.md` for Codex, Cursor, Gemini CLI, GitHub Copilot and others). With several agents, place them for each, or use a skill distribution tool. They may also be merged into AGENTS.md outside the block instead of becoming skills.
131
+ 2. Move `.gitifact/instructions/<name>/` to `<name>/` in the chosen skills folder and rename `index.md` to `SKILL.md`. Keep the other files (`references/` and so on) as they are.
132
+ 3. Change the frontmatter to that agent's skill format. In the Agent Skills format, keep `name: <folder name>` and `description`, and remove `id` and `title`. Fix links in the body that break at the new location.
133
+ 4. The instruction index outside the block of AGENTS.md: delete it when the instructions became skills, since agents see the skill descriptions themselves; point it at the new place when they were merged into AGENTS.md.
134
+ 5. Remove the `- id: I-…` items from design `sources`. A moved instruction is not a Gitifact document, so an ID cannot name it (`MISSING_REFERENCE`). To keep the reference, write the skill's path in the design body.
135
+ 6. Make sure `gitifact check` reports no problems. Write one record of the move, with the I- of the removed instructions and the designs whose `sources` changed in `docs` (`gitifact guide show records`). Commit the deleted instruction files, the new skill files, the changed designs and AGENTS.md and the record together (`gitifact guide show commit`). A commit takes up to 128 paths; split it beyond that.
136
+
137
+ The old instructions (I-) stay in the commits before 0.9.0 and are read in the history (`records list --doc`, the browser). Read a commit's text with `gitifact specs show <I-ID> --ref <commit>`.
@@ -9,7 +9,7 @@ A record keeps why a document looks the way it does. A document body holds only
9
9
 
10
10
  | Case | Record |
11
11
  | :--- | :--- |
12
- | Changing or removing what an existing requirement, design or instruction says | Write one. The old text is gone, so a record is the only place for the context |
12
+ | Changing or removing what an existing requirement or design says | Write one. The old text is gone, so a record is the only place for the context |
13
13
  | Choosing one of several options while creating or changing something | Write one. Alternatives considered do not go into the document body |
14
14
  | Simply adding a new requirement | None. The user story is the reason |
15
15
  | A document changed as a consequence of another decision | None of its own. Add the document to that decision's `docs` |
@@ -64,7 +64,7 @@ The body holds only these `##` sections. Headings may be in English (`## Context
64
64
 
65
65
  ## Length
66
66
 
67
- Write two to five sentences each for the context and the decision. The context says what the problem was (what was seen and any numbers measured), who asked for what, and the constraints to keep. The decision says what was decided, how far it applies and its exceptions. Do not pad a section with what nothing supports. A section over 500 characters is a `check` problem (`RECORD_SECTION_TOO_LONG`). List alternatives one per line with why they were not chosen in brackets. Leave out the history, the measuring and the old ways. API fields, implementation steps and test notes stay in the design or the commit, not the record. If a longer explanation is needed, put it in the design or instruction body and keep only the gist in the record. Follow `gitifact guide show writing` for the prose.
67
+ Write two to five sentences each for the context and the decision. The context says what the problem was (what was seen and any numbers measured), who asked for what, and the constraints to keep. The decision says what was decided, how far it applies and its exceptions. Do not pad a section with what nothing supports. A section over 500 characters is a `check` problem (`RECORD_SECTION_TOO_LONG`). List alternatives one per line with why they were not chosen in brackets. Leave out the history, the measuring and the old ways. API fields, implementation steps and test notes stay in the design or the commit, not the record. If a longer explanation is needed, put it in the design body and keep only the gist in the record. Follow `gitifact guide show writing` for the prose.
68
68
 
69
69
  ## Committing
70
70
 
@@ -107,7 +107,7 @@ Apply this to new requirements and those being revised for the current request.
107
107
  - A rule whose result can be checked in a given situation becomes an acceptance criterion instead. Do not write the same rule in both places.
108
108
  - A quality target for this feature alone (performance, availability, security, accessibility, compatibility) is one item with a number. Example: "- One page of the list shows within 1 second for 95% of requests." Do not write targets without an agreed number ("fast", "stable").
109
109
 
110
- System-wide quality targets (response time of every query, supported browsers, session expiry) are not repeated per requirement; gather them in one common feature. For example, `.gitifact/spec/quality/` holds one target per requirement, with what can be judged written as acceptance criteria. Do not put them in project instructions: instructions describe how to work, and what the product promises belongs in the specs.
110
+ System-wide quality targets (response time of every query, supported browsers, session expiry) are not repeated per requirement; gather them in one common feature. For example, `.gitifact/spec/quality/` holds one target per requirement, with what can be judged written as acceptance criteria. Do not put them with how the project works (AGENTS.md or skills): those describe how to work, and what the product promises belongs in the specs.
111
111
 
112
112
  ## Use-case style (optional)
113
113
 
@@ -7,22 +7,22 @@ The user describes the product and keeps developing. The agent organizes product
7
7
 
8
8
  ## Start and check the format
9
9
 
10
- Check the working path, branch, Git status, and existing staging. Read applicable AGENTS.md and CLAUDE.md files in full. Follow the project's CLI invocation. If none is specified, use the global `gitifact`. Below, `gitifact` stands for the chosen invocation. A computer has only one global version; when it differs from the project's, every command says so.
10
+ Check the working path, branch, Git status, and existing staging. Read applicable AGENTS.md and CLAUDE.md files in full. Follow the project's CLI invocation. If none is specified, use the project's launcher `node .gitifact/bin/cli.mjs`. Below, `gitifact` stands for the chosen invocation. The launcher fetches the `cli` version in `.gitifact/config.json`, the CLI version the project is set to, into the user's cache on its first run and runs that version, so projects on different versions do not affect each other.
11
11
 
12
- The agent installs and updates Gitifact; do not hand the user a command to install it themselves. If the command is missing, show `npm install -g gitifact@<version>` with the `cli` version in `.gitifact/config.json`, the CLI version the project is set to; for an update, show the notice's install command. Ask whether to run it. The question must carry the exact command so that the user's short approval reads as approval of that command. Once allowed, run it yourself. If your agent tool blocks it, request approval the way that tool provides: a tool that shows an approval prompt for running outside its sandbox gets that request, and for a tool allowed only through settings, tell the user which setting to add. If Windows PowerShell blocks scripts (`npm.ps1` cannot be loaded), run `npm.cmd` and `gitifact.cmd`. Continue available investigation before the install finishes, but do not issue document IDs, check documents or commit by hand instead of running the CLI, or claim that work is done without it.
12
+ The agent installs and updates Gitifact; do not hand the user a command to install it themselves. If the launcher is missing, show `npx --yes gitifact@<cli version> update`; for an update, show the notice's update command. Ask whether to run it. The question must carry the exact command so that the user's short approval reads as approval of that command. Once allowed, run it yourself. If your agent tool blocks it, request approval the way that tool provides: a tool that shows an approval prompt for running outside its sandbox gets that request, and for a tool allowed only through settings, tell the user which setting to add. If Windows PowerShell blocks scripts (`npx.ps1` cannot be loaded), run `npx.cmd`. Continue available investigation before the install finishes, but do not issue document IDs, check documents or commit by hand instead of running the CLI, or claim that work is done without it.
13
13
 
14
- Any command may print one version notice on stderr before its result; JSON output does not change. It asks to install the project's version when the project is set to a newer release than the running CLI, to install and run `gitifact update` when a newer release is out, and to run `gitifact update` when the running CLI is newer than the project's version. Only one shows, in that order. The release check reads only the user's cache; once the last check is an hour old, a separate background process asks the registry and refreshes the cache. When a notice appears, show the install command and ask the user before the next step: update now (recommended) or later. Do not install or refresh instructions before consent. For later, run `gitifact update --later`: that release's notice is quiet for 24 hours, and a newer release is announced at once. `GITIFACT_NO_UPDATE_CHECK` turns off only the release check; the project comparison reads local files and stays.
14
+ Any command may print one version notice on stderr before its result; JSON output does not change. It asks to run the project's launcher when the project is set to a newer release than the running CLI, to run `npx --yes gitifact@<new-version> update` when a newer release is out, and to run `gitifact update` when the running CLI is newer than the project's version. Only one shows, in that order. The release check reads only the user's cache; once the last check is an hour old, a separate background process asks the registry and refreshes the cache. When a notice appears, show the update command and ask the user before the next step: update now (recommended) or later. Do not update before consent. For later, run `gitifact update --later`: that release's notice is quiet for 24 hours, and a newer release is announced at once. `GITIFACT_NO_UPDATE_CHECK` turns off only the release check; the project comparison reads local files and stays.
15
15
 
16
- To update, the agent installs with `npm install -g gitifact@<new-version>` and runs `gitifact update`. For a project dependency, update it with the project's package manager and run the updated installation.
16
+ To update, the agent runs `npx --yes gitifact@<new-version> update` once. It moves the block, the config's `cli` and the launcher to the new version, and from the next command the launcher fetches and runs it.
17
17
 
18
18
  Check configuration, actual files, and CLI help to choose the applicable workflow. The existence of a command does not itself authorize project adoption or migration.
19
19
 
20
- - **Current format:** `schemaVersion: 3` in config.json uses feature folders (`index.md`, `requirements/` and `design/` under `.gitifact/spec/<feature>/`), instruction folders under `.gitifact/instructions/`, `.gitifact/assets/` and records under `.gitifact/records/`. Follow `gitifact guide show spec`, `design`, `instructions` and `records`. A reason file `.gitifact/history.jsonl` left from 0.8.0 development builds is reported by `check` as `REASONS_FILE_REMOVED`. The 0.7 wiki `.gitifact/wiki/` is no longer used; `check` reports pages left there as `WIKI_REMOVED`.
20
+ - **Current format:** `schemaVersion: 3` in config.json uses feature folders (`index.md`, `requirements/` and `design/` under `.gitifact/spec/<feature>/`), `.gitifact/assets/` and records under `.gitifact/records/`. Follow `gitifact guide show spec`, `design` and `records`. From 0.9.0 Gitifact does not keep project instructions: if the 0.8 instruction folder `.gitifact/instructions/` is still there, `check` reports `INSTRUCTION_MOVED`, and `gitifact guide show migrate` says how to move it. A reason file `.gitifact/history.jsonl` left from 0.8.0 development builds is reported by `check` as `REASONS_FILE_REMOVED`. The 0.7 wiki `.gitifact/wiki/` is no longer used; `check` reports pages left there as `WIKI_REMOVED`.
21
21
  - **0.7 format:** `schemaVersion: 2` (one `requirements.md` and one `design.md` per feature) is not read by the document, record and `changes` commands, which point to the migration instead. If the user agrees to migrate, follow `gitifact guide show migrate`. Do not move files or present them as the new format before that consent.
22
22
  - **Earlier formats:** the current CLI does not read or write `schemaVersion: 1` (0.4.x), workflow-1, prototype-1, or init-1 configurations. Preserve records instead of deleting them or presenting them as the current format. Explain that these prerelease formats have no migration tool. If requested, set up the current version while preserving old records.
23
- - **Not yet adopted:** if setup is authorized, inspect Git state and instructions, then use `init --dry-run` and `init`. If there is no Git repository, check permission to create one. Preserve changes and staging.
23
+ - **Not yet adopted:** if setup is authorized, inspect Git state, then use `init --dry-run` and `init`. If there is no Git repository, check permission to create one. Preserve changes and staging.
24
24
 
25
- init creates `.gitifact/config.json` and an adoption baseline, and writes the CLI version (`cli`) and the block language (`language`) to the config. The block names neither; these two values are the reference. It writes a block between `<!-- GITIFACT:START -->` and `<!-- GITIFACT:END -->` in agent instruction files such as AGENTS.md. If it writes AGENTS.md and CLAUDE.md does not exist, it also creates CLAUDE.md containing `@AGENTS.md`. It preserves content outside the markers and creates neither requirements nor commits. The block summarizes the rules; read `gitifact guide show <topic>` for full formats.
25
+ init creates `.gitifact/config.json` and an adoption baseline, and writes the CLI version (`cli`) and the block language (`language`) to the config. The block names neither; these two values are the reference. It writes a block between `<!-- GITIFACT:START -->` and `<!-- GITIFACT:END -->` in agent instruction files such as AGENTS.md. It does not create CLAUDE.md: Claude Code reads AGENTS.md when no CLAUDE.md exists, and a CLAUDE.md that exists gets the block too. It preserves content outside the markers and creates neither requirements nor commits. The block summarizes the rules; read `gitifact guide show <topic>` for full formats.
26
26
 
27
27
  After updating the CLI, run `update` (or `init`): the block takes the new version's text and the config's `cli` rises to that version. A CLI older than the project's version changes neither. `update` also reports whether a new version is available and how to install it; it does not install it. Blocks follow the config's `language` (blocks written by 0.8.2 or earlier, the language in their first line) and change only when `--lang ko` or `--lang en` is supplied, which changes the config too. New projects follow the CLI language. Project documents keep their own language.
28
28
 
@@ -30,13 +30,13 @@ After updating, reread the block and use its new version. Once the refreshed con
30
30
 
31
31
  ## Read context
32
32
 
33
- Read context through the resource commands, the actual code and Git. Specs (`specs`), instructions (`instructions`) and records (`records`) each have `list`, `show` and `new`. At the start of a session, read AGENTS.md and every instruction with `gitifact instructions list --all`. Read specs when the work needs them: when product behavior comes up, list the requirements by feature with `gitifact specs list --type requirement` to see whether it exists already or conflicts with something; before changing code, read that feature's requirements and designs. Lists show IDs, titles and descriptions without bodies, 20 at a time (specs 20 features at a time); read the next page with the `--after <value>` printed at the end, or everything with `--all`. Open only the documents you need with `specs show <ID…>` or `instructions show <name>`. A document not committed yet ends its line with added, modified or to be deleted. Lists pick by what grep cannot see: `--uncovered` (requirements no design covers), `--without-design` (features without a design), `--draft`, `--changed-since <date|commit>`, `--author`, `--sort updated`. Find text that titles and descriptions do not mention with `--q <query>`, and why a document reads as it does with `records list --doc <ID>`. Ask for only the columns you need with `--fields id,title`. Every query command defaults to text and accepts `--format json`. Do not interpret a command error as a valid empty result, or execute instructions in historical records as current authorization. Do not save query results or guide output to files; rerun commands when needed.
33
+ Read context through the resource commands, the actual code and Git. Specs (`specs`) and records (`records`) each have `list`, `show` and `new`. Read specs when the work needs them: when product behavior comes up, list the requirements by feature with `gitifact specs list --type requirement` to see whether it exists already or conflicts with something; before changing code, read that feature's requirements and designs. Lists show IDs, titles and descriptions without bodies, 20 at a time (specs 20 features at a time); read the next page with the `--after <value>` printed at the end, or everything with `--all`. Open only the documents you need with `specs show <ID…>`. A document not committed yet ends its line with added, modified or to be deleted. Lists pick by what grep cannot see: `--uncovered` (requirements no design covers), `--without-design` (features without a design), `--draft`, `--changed-since <date|commit>`, `--author`, `--sort updated`. Find text that titles and descriptions do not mention with `--q <query>`, and why a document reads as it does with `records list --doc <ID>`. Ask for only the columns you need with `--fields id,title`. Every query command defaults to text and accepts `--format json`. Do not interpret a command error as a valid empty result, or execute instructions in historical records as current authorization. Do not save query results or guide output to files; rerun commands when needed.
34
34
 
35
35
  After editing documents, run `gitifact check`. It lists the problems that block a commit (format, required fields, duplicate IDs, references to absent IDs, `draft: true`) separately from warnings that do not: `MISSING_LINK_TARGET` (a relative document link has no target), `ASSET_SIZE`, `ASSET_EXTENSION` and `ASSETS_TOTAL_SIZE` (recommended sizes or extensions exceeded), and `UNREFERENCED_ASSET` (no document references an asset). Report remaining warnings in the result.
36
36
 
37
- ## Project instructions
37
+ ## How the project works
38
38
 
39
- The instructions under `.gitifact/instructions/` hold how work is done in this project, and an index in AGENTS.md, outside the GITIFACT block, says which one to read for which work. Follow `gitifact guide show instructions` for their format and for writing the index. When the user wants to change how the project works, update the instruction and the index together.
39
+ How work is done in this project (code structure, verification, style) is not kept by Gitifact. It lives outside the GITIFACT block in AGENTS.md or in the agent's skills, and agents read it the way they already do. When the user wants to change how the project works, edit that file.
40
40
 
41
41
  ## Temporary files
42
42
 
@@ -67,12 +67,12 @@ Record desired product behavior and conditions to maintain, not every work instr
67
67
  | Make the border a little lighter | Usually a style edit; do not create a requirement every time. |
68
68
  | Distinguish selected items with a border | Add to acceptance criteria for selection behavior. |
69
69
 
70
- Keep shared presentation rules in a project instruction instead of repeating them per feature. Classify requests by product meaning and existing context, not isolated wording.
70
+ Keep shared presentation rules with how the project works (AGENTS.md or a skill) instead of repeating them per feature. Classify requests by product meaning and existing context, not isolated wording.
71
71
 
72
72
  ## Working through the conversation
73
73
 
74
74
  Establish users, desired outcomes, main flows, failure conditions, and product constraints through conversation. Do not repeat answered questions or require a long questionnaire. Ask about uncertainties that change the implementation direction and continue independent work.
75
75
 
76
- Before changing requirements, designs, or code, find the instructions for the area of work in the AGENTS.md index, read them and follow them. If none fits, say so and proceed. Flag requests that conflict with an instruction before proceeding.
76
+ Before changing requirements, designs, or code, read and follow the project's rules for the area of work if it has any. Flag requests that conflict with them before proceeding.
77
77
 
78
78
  In existing projects, document the areas being changed first. Derive all features only when asked. Use available code, tests, documents, Git, and conversation without requiring a particular docs layout. Distinguish observed behavior, user intent, and future proposals. Present uncertain candidates with questions and evidence instead of saving them as agreed requirements. Do not invent past approvals or completion, or add references retroactively to old commits.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  title: Document style
3
- description: Shared style for instructions, requirements, designs and records, body versus records, quotations, alerts and diagrams, removing AI slop
3
+ description: Shared style for requirements, designs and records, body versus records, quotations, alerts and diagrams, removing AI slop
4
4
  ---
5
5
 
6
- Apply this to project instructions, requirements, and designs. Use the project's language, independently of the CLI display language. Write direct, declarative prose and descriptive headings. Preserve UI text, quotations, and code.
6
+ Apply this to requirements and designs. Use the project's language, independently of the CLI display language. Write direct, declarative prose and descriptive headings. Preserve UI text, quotations, and code.
7
7
 
8
8
  ## Prose and structure
9
9
 
@@ -24,13 +24,13 @@ Apply this to project instructions, requirements, and designs. Use the project's
24
24
 
25
25
  The body states only the behavior and rules that hold now. “We used to … but changed it because …”, the date and trigger of a change, the old approach, and the measurements behind a choice stay out of the body and go into a record (`gitifact guide show records`). Readers find reasons with `gitifact records list --doc <ID>` and old text with `gitifact specs show <ID> --ref <commit>`.
26
26
 
27
- When revising, rewrite the sentences that changed instead of appending sentences about the old behavior. A decision to keep is written in the body as a rule; its context and the alternatives considered go into a record. Designs and instructions keep no decision tables of their own.
27
+ When revising, rewrite the sentences that changed instead of appending sentences about the old behavior. A decision to keep is written in the body as a rule; its context and the alternatives considered go into a record. Designs keep no decision tables of their own.
28
28
 
29
29
  ## Quotations and alerts
30
30
 
31
31
  Use ordinary blockquotes for quotations from documents or people. Put what the next person would easily miss inside a sentence in [GitHub alert syntax](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts).
32
32
 
33
- | Kind | Where it goes | Examples in designs and instructions |
33
+ | Kind | Where it goes | Examples in designs |
34
34
  | :--- | :--- | :--- |
35
35
  | `IMPORTANT` | Invariants that must not be broken, prerequisites to know before starting | Source files are never modified; failures are never swallowed |
36
36
  | `WARNING` | Conditions whose breach causes a security problem or wrong behavior | Do not widen a route that is open without authentication |