gitifact 0.8.6 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -36
- package/dist/browser/assets/{HgiRefresh-CnBE2KZ8.js → HgiRefresh-CmdxsKUC.js} +1 -1
- package/dist/browser/assets/{Markdown-75QVB57V.js → Markdown-BpWtY88p.js} +1 -1
- package/dist/browser/assets/{Selector-E8jyEKNB.js → Selector-Dji19JSe.js} +1 -1
- package/dist/browser/assets/{Tab-C-PhLRIZ.js → Tab-BY4IuGKn.js} +1 -1
- package/dist/browser/assets/{Table-Cr2jvka_.js → Table-Dm6wz2kf.js} +2 -2
- package/dist/browser/assets/{Token-BBk7tRek.js → Token-9hr7eTF1.js} +1 -1
- package/dist/browser/assets/about-C3s6Keuk.js +3 -0
- package/dist/browser/assets/activity-ClCBIQkT.jpg +0 -0
- package/dist/browser/assets/activity-timeline-BdRnSGAp.js +2 -0
- package/dist/browser/assets/changelog-CNUFmKj-.js +1 -0
- package/dist/browser/assets/commit-BWyvKMHI.js +4 -0
- package/dist/browser/assets/contributors-Bk_xjPNJ.js +1 -0
- package/dist/browser/assets/{contributors._email-CEcZZfAR.js → contributors._email-BPZ6AqpX.js} +1 -1
- package/dist/browser/assets/{contributors.index-DNMBFxLb.js → contributors.index-Ca6OC-eu.js} +1 -1
- package/dist/browser/assets/dashboard.index-Cgm78J6S.js +1 -0
- package/dist/browser/assets/{document-odLLdugz.js → document-BbL374wf.js} +4 -4
- package/dist/browser/assets/{document-Cmx0e6kz.css → document-DXzNxu17.css} +1 -1
- package/dist/browser/assets/document-Dtyl4_It.js +2 -0
- package/dist/browser/assets/feature-requirements-wfH5PlkX.jpg +0 -0
- package/dist/browser/assets/features-B1FsIXwk.js +2 -0
- package/dist/browser/assets/{features._featureId-Cmg8-2ku.js → features._featureId-CQYDdSK2.js} +1 -1
- package/dist/browser/assets/{features.index-CBz7BmRW.js → features.index-BcCdHpgS.js} +1 -1
- package/dist/browser/assets/getting-started-CCqN7NFk.js +1 -0
- package/dist/browser/assets/git-DCEKgdx_.js +1 -0
- package/dist/browser/assets/index-Bnx5f4X5.js +49 -0
- package/dist/browser/assets/{load-more-BVsXjzHC.js → load-more-COb87OhG.js} +1 -1
- package/dist/browser/assets/page-header-Cs2fqdqC.js +246 -0
- package/dist/browser/assets/{records._recordId-DF-NkdBL.js → records._recordId-CfPnm30x.js} +1 -1
- package/dist/browser/assets/{records.commits._commit-BBf_rxHJ.js → records.commits._commit-C-jisbh2.js} +1 -1
- package/dist/browser/assets/{records.docs._docId-Diev5opj.js → records.docs._docId-D1pQYz_I.js} +1 -1
- package/dist/browser/assets/{records.index-DPWv9blV.js → records.index-FJMKSXN0.js} +1 -1
- package/dist/browser/assets/{records.working-D5xv-dTD.js → records.working-cSfNWSM7.js} +1 -1
- package/dist/browser/assets/{settings-N1hE7l-i.js → settings-DDEler3s.js} +1 -1
- package/dist/browser/assets/useInfiniteQuery-IoAmrFi4.js +1 -0
- package/dist/browser/assets/{useKeyboardHint-CGJ2GVT3.js → useKeyboardHint-Wwnf-tpi.js} +1 -1
- package/dist/browser/index.html +18 -24
- package/dist/i18n/en/block.md +7 -7
- package/dist/i18n/en/changelog.md +20 -0
- package/dist/i18n/en/docs/commit.md +2 -2
- package/dist/i18n/en/docs/design.md +3 -3
- package/dist/i18n/en/docs/migrate.md +32 -35
- package/dist/i18n/en/docs/records.md +2 -2
- package/dist/i18n/en/docs/spec.md +1 -1
- package/dist/i18n/en/docs/workflow.md +12 -12
- package/dist/i18n/en/docs/writing.md +4 -4
- package/dist/i18n/ko/block.md +7 -7
- package/dist/i18n/ko/changelog.md +20 -0
- package/dist/i18n/ko/docs/commit.md +2 -2
- package/dist/i18n/ko/docs/design.md +3 -3
- package/dist/i18n/ko/docs/migrate.md +31 -34
- package/dist/i18n/ko/docs/records.md +2 -2
- package/dist/i18n/ko/docs/spec.md +1 -1
- package/dist/i18n/ko/docs/workflow.md +12 -12
- package/dist/i18n/ko/docs/writing.md +4 -4
- package/dist/launcher/cli.mjs +77 -0
- package/dist/main.js +281 -589
- package/package.json +1 -1
- package/dist/browser/assets/MetadataListItem-BEwPg27H.js +0 -1
- package/dist/browser/assets/about-C3ewDfU2.js +0 -3
- package/dist/browser/assets/activity-CiuGYDQ8.jpg +0 -0
- package/dist/browser/assets/activity-timeline-B3s0viEt.js +0 -2
- package/dist/browser/assets/changelog-DkRd6I8J.js +0 -1
- package/dist/browser/assets/commit-BHwKZ7hK.js +0 -4
- package/dist/browser/assets/contributor-2mkEa2Wo.css +0 -1
- package/dist/browser/assets/contributor-CqqvzxLh.js +0 -1
- package/dist/browser/assets/contributors-CuMPZx6_.js +0 -1
- package/dist/browser/assets/dashboard.index-nV7KwM5H.js +0 -1
- package/dist/browser/assets/document-BnxE7Txb.js +0 -2
- package/dist/browser/assets/feature-requirements-CA8f9Bcf.jpg +0 -0
- package/dist/browser/assets/features-C0YzZiS-.js +0 -2
- package/dist/browser/assets/getting-started-CaOhGSBe.js +0 -1
- package/dist/browser/assets/git-DwAnKiiN.js +0 -1
- package/dist/browser/assets/index-BljzO9go.js +0 -49
- package/dist/browser/assets/instructions-2OUMP-vh.css +0 -1
- package/dist/browser/assets/instructions-DWS_nwe0.js +0 -1
- package/dist/browser/assets/instructions._instructionId-l7aWWvfx.js +0 -1
- package/dist/browser/assets/instructions.agents-t7hMe4Pv.js +0 -1
- package/dist/browser/assets/instructions.index-CHVCQBSH.js +0 -1
- package/dist/browser/assets/lazyRouteComponent-BZI8yQj_.js +0 -1
- package/dist/browser/assets/page-header-CRcXie4p.js +0 -248
- package/dist/browser/assets/project-instructions-DsWrw-nY.jpg +0 -0
- package/dist/browser/assets/useInfiniteQuery-CrEm5UW2.js +0 -1
- package/dist/i18n/en/docs/instructions.md +0 -94
- 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-
|
|
1
|
+
import{l as e}from"./themeProps-CkLe5zXY.js";import{o as t}from"./commit-BWyvKMHI.js";import{a as n}from"./index-Bnx5f4X5.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-
|
|
1
|
+
import{l as e}from"./themeProps-CkLe5zXY.js";import{s as t}from"./commit-BWyvKMHI.js";import{r as n}from"./index-Bnx5f4X5.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};
|
package/dist/browser/assets/{records.docs._docId-Diev5opj.js → records.docs._docId-D1pQYz_I.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as e}from"./themeProps-CkLe5zXY.js";import{n as t,t as n}from"./index-
|
|
1
|
+
import{l as e}from"./themeProps-CkLe5zXY.js";import{n as t,t as n}from"./index-Bnx5f4X5.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-
|
|
1
|
+
import{l as e}from"./themeProps-CkLe5zXY.js";import{o as t,s as n}from"./index-Bnx5f4X5.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-
|
|
1
|
+
import{l as e}from"./themeProps-CkLe5zXY.js";import{a as t}from"./commit-BWyvKMHI.js";import{i as n}from"./index-Bnx5f4X5.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{
|
|
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};
|
package/dist/browser/index.html
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
crossorigin
|
|
15
15
|
/>
|
|
16
16
|
<title>Gitifact</title>
|
|
17
|
-
<script type="module" crossorigin src="/assets/index-
|
|
17
|
+
<script type="module" crossorigin src="/assets/index-Bnx5f4X5.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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
37
|
-
<link rel="modulepreload" crossorigin href="/assets/HgiRefresh-
|
|
38
|
-
<link rel="modulepreload" crossorigin href="/assets/document-
|
|
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-
|
|
41
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
42
|
-
<link rel="modulepreload" crossorigin href="/assets/useKeyboardHint-
|
|
43
|
-
<link rel="modulepreload" crossorigin href="/assets/Tab-
|
|
44
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
45
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
46
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
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/
|
|
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-
|
|
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-
|
|
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>
|
package/dist/i18n/en/block.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
## Gitifact Guide
|
|
2
2
|
|
|
3
|
-
Product behavior (requirements and designs)
|
|
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.
|
|
8
|
-
2.
|
|
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>`)
|
|
27
|
-
| Writing a new document | Read `guide show spec` (`design` for designs
|
|
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
|
|
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`·`
|
|
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,23 @@
|
|
|
1
|
+
## 0.9.1 - 2026-10-20
|
|
2
|
+
### Changed
|
|
3
|
+
- The screenshots on the browser's About page show the 0.9.0 browser.
|
|
4
|
+
### Fixed
|
|
5
|
+
- `changes commit` no longer counts code and test paths toward its 128-path limit. A commit takes up to 5,000 paths, of which up to 128 may be under `.gitifact/` (documents, records and assets; 5,000 with `migration: true`), so a decision whose implementation touches many files fits in one commit. Past the limit, the refusal names the `.gitifact/` path count and the limit.
|
|
6
|
+
|
|
7
|
+
## 0.9.0 - 2026-10-12
|
|
8
|
+
### Added
|
|
9
|
+
- 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.
|
|
10
|
+
### Changed
|
|
11
|
+
- 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.
|
|
12
|
+
- `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.
|
|
13
|
+
- The history cache is rebuilt once; the first history read after updating takes a little longer.
|
|
14
|
+
- 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.
|
|
15
|
+
### Removed
|
|
16
|
+
- 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.
|
|
17
|
+
### Fixed
|
|
18
|
+
- `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`.
|
|
19
|
+
- 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.
|
|
20
|
+
|
|
1
21
|
## 0.8.6 - 2026-09-28
|
|
2
22
|
### Added
|
|
3
23
|
- 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`).
|
|
@@ -25,7 +25,7 @@ Do not copy example paths, IDs or evidence literally. The input holds only these
|
|
|
25
25
|
|
|
26
26
|
- **Records:** a record is the file created with `gitifact records new` when the decision was made (`gitifact guide show records`). List the record files to commit in `paths`. Records not listed stay in the working tree for a later commit. A committed record that still has `draft: true` is refused.
|
|
27
27
|
- **Changes that need a record:** an existing document changed, moved or deleted without a record naming it is reported in `withoutRecord`. It does not block the commit. A new document needs no record. Do not invent reasons you do not know.
|
|
28
|
-
- **`paths`:** the document files, record files and related code and tests this commit takes. Not every changed document has to be included; the rest stays for a later commit. A moved document needs both its old and new path. For a deleted document, list the deleted path. Include new assets the documents reference (`.gitifact/assets/…`). The `.gitifact/.gitattributes` that `init` writes can be included too. One commit takes up to
|
|
28
|
+
- **`paths`:** the document files, record files and related code and tests this commit takes. Not every changed document has to be included; the rest stays for a later commit. A moved document needs both its old and new path. For a deleted document, list the deleted path. Include new assets the documents reference (`.gitifact/assets/…`). The `.gitifact/.gitattributes` that `init` writes can be included too. One commit takes up to 5,000 paths, of which up to 128 may be under `.gitifact/` (documents, records and assets); a migration commit with `migration: true` takes up to 5,000 there too. Code paths do not count toward the 128. Beyond that, split the commits by decision.
|
|
29
29
|
- **Committed records:** if a committed record is edited or deleted, `changes list` and `check` report it and `changes commit` refuses. Restore it from HEAD and write the changed decision as a new record.
|
|
30
30
|
- **Checks:** the same checks as `check` run just before the commit. A problem, or `draft: true` left in a document or in a record being committed, stops the commit. Link and asset warnings do not.
|
|
31
31
|
- **Staging:** do not stage before running. Existing staging or intent-to-add entries are refused. Unstage anything you created (`git mv`, `git rm`, …) with `git restore --staged`, keep the files, and run again. To delete or move files, use ordinary file operations instead of `git rm` or `git mv`.
|
|
@@ -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
|
|
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:
|
|
36
|
-
note:
|
|
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
|
-
|
|
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:
|
|
3
|
-
description: Steps
|
|
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
|
|
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
|
|
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: …`.
|
|
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
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
|
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-
|
|
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
|
|
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
|
|
|
@@ -118,23 +103,35 @@ Write JSON to the input path that `gitifact changes list` reports and run `gitif
|
|
|
118
103
|
}
|
|
119
104
|
```
|
|
120
105
|
|
|
121
|
-
- A migration commit takes up to 5,000 paths (128 for other commits). Beyond 5,000, split it into several commits and give every one `migration: true` so all of them stay out of the history.
|
|
106
|
+
- A migration commit takes up to 5,000 paths under `.gitifact/` (128 for other commits). Beyond 5,000, split it into several commits and give every one `migration: true` so all of them stay out of the history.
|
|
122
107
|
- `migration: true` adds the `Gitifact-Migration: 0.8.0` trailer. That commit becomes the history boundary: activity before it stays visible in the viewer, and the commit itself does not appear as activity.
|
|
123
108
|
- Add no records; the 0.7 reasons are read from the 0.7 commits.
|
|
124
109
|
- The deleted old files must be in `paths`; without them the CLI refuses the commit.
|
|
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
|
|
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
|
-
-
|
|
132
|
-
-
|
|
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
|
|
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
|
|
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 under `.gitifact/`; split it beyond that (skill files and other paths outside `.gitifact/` do not count).
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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>/`),
|
|
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
|
|
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.
|
|
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`)
|
|
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
|
-
##
|
|
37
|
+
## How the project works
|
|
38
38
|
|
|
39
|
-
|
|
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
|
|
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,
|
|
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.
|