@ngocsangairvds/vsaf 6.0.1 → 6.2.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.
- package/package.json +1 -1
- package/packages/cli/dist/commands/run.d.ts +3 -0
- package/packages/cli/dist/commands/run.d.ts.map +1 -1
- package/packages/cli/dist/commands/run.js +10 -0
- package/packages/cli/dist/commands/run.js.map +1 -1
- package/packages/cli/dist/server/routes/runs.d.ts +3 -1
- package/packages/cli/dist/server/routes/runs.d.ts.map +1 -1
- package/packages/cli/dist/server/routes/runs.js +33 -9
- package/packages/cli/dist/server/routes/runs.js.map +1 -1
- package/packages/cli/dist/server/routes/workflows.js +1 -1
- package/packages/cli/dist/server/routes/workflows.js.map +1 -1
- package/packages/cli/dist/server/services/execution-manager.d.ts.map +1 -1
- package/packages/cli/dist/server/services/execution-manager.js +5 -0
- package/packages/cli/dist/server/services/execution-manager.js.map +1 -1
- package/packages/core/dist/config/ai-config.d.ts +3 -0
- package/packages/core/dist/config/ai-config.d.ts.map +1 -1
- package/packages/core/dist/config/ai-config.js +9 -0
- package/packages/core/dist/config/ai-config.js.map +1 -1
- package/packages/core/dist/index.d.ts +1 -1
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/index.js +3 -2
- package/packages/core/dist/index.js.map +1 -1
- package/packages/core/dist/runtime/executor.d.ts.map +1 -1
- package/packages/core/dist/runtime/executor.js +1 -0
- package/packages/core/dist/runtime/executor.js.map +1 -1
- package/packages/web/dist/web/browser/{chunk-FE2VGLSN.js → chunk-7L4OEPXU.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-FBCNCNPM.js → chunk-BDLVJ3JS.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-MCW5ACIZ.js → chunk-CQQRQYJU.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-6H3AYIT3.js → chunk-E3BSTPAZ.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-L7B3BT5E.js → chunk-IBUECISR.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-7ELOO4IC.js → chunk-OYL4KDHJ.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-GR7SKUVU.js → chunk-Q6S2YOXT.js} +1 -1
- package/packages/web/dist/web/browser/chunk-RM7DW5FD.js +5 -0
- package/packages/web/dist/web/browser/chunk-SM2S63GA.js +1 -0
- package/packages/web/dist/web/browser/{chunk-N3FOQ3O5.js → chunk-ZZWA24BS.js} +1 -1
- package/packages/web/dist/web/browser/index.html +2 -2
- package/packages/web/dist/web/browser/{main-3UCJ3N4F.js → main-MOJ6YEDN.js} +1 -1
- package/packages/web/dist/web/browser/styles-KOJ4NEWT.css +1 -0
- package/skills/sdlc/onboard-code/cross-domain/SKILL.md +10 -0
- package/skills/sdlc/onboard-code/cross-domain/step.md +11 -0
- package/skills/sdlc/onboard-code/detect-structure/SKILL.md +10 -0
- package/skills/sdlc/onboard-code/detect-structure/step.md +7 -0
- package/skills/sdlc/onboard-code/env-docker/SKILL.md +10 -0
- package/skills/sdlc/onboard-code/env-docker/step.md +7 -0
- package/skills/sdlc/onboard-code/summary/SKILL.md +10 -0
- package/skills/sdlc/onboard-code/summary/step.md +4 -0
- package/skills/sdlc/onboard-code/verify-index/SKILL.md +10 -0
- package/skills/sdlc/onboard-code/verify-index/step.md +9 -0
- package/skills/sdlc/onboard-docs/extract-terms/SKILL.md +10 -0
- package/skills/sdlc/onboard-docs/extract-terms/step.md +20 -0
- package/skills/sdlc/onboard-docs/graphify-build/SKILL.md +10 -0
- package/skills/sdlc/onboard-docs/graphify-build/step.md +11 -0
- package/skills/sdlc/onboard-docs/scan-import/SKILL.md +10 -0
- package/skills/sdlc/onboard-docs/scan-import/step.md +19 -0
- package/skills/sdlc/onboard-docs/verify-fix/SKILL.md +10 -0
- package/skills/sdlc/onboard-docs/verify-fix/step.md +10 -0
- package/skills/sdlc/pack.yaml +9 -2
- package/workflows/sdlc/onboard-code.yaml +5 -43
- package/workflows/sdlc/onboard-docs.yaml +4 -64
- package/packages/web/dist/web/browser/chunk-4R37VVI4.js +0 -5
- package/packages/web/dist/web/browser/chunk-UDCOYDXU.js +0 -1
- package/packages/web/dist/web/browser/styles-5MTP4CCO.css +0 -1
- package/skills/sdlc/onboard-code/SKILL.md +0 -210
- package/skills/sdlc/onboard-docs/SKILL.md +0 -194
- /package/skills/sdlc/onboard-docs/{convert.py → scan-import/convert.py} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--color-red-300: oklch(80.8% .114 19.571);--color-red-400: oklch(70.4% .191 22.216);--color-red-500: oklch(63.7% .237 25.331);--color-amber-400: oklch(82.8% .189 84.429);--color-amber-500: oklch(76.9% .188 70.08);--color-green-400: oklch(79.2% .209 151.711);--color-green-500: oklch(72.3% .219 149.579);--color-blue-400: oklch(70.7% .165 254.624);--color-blue-500: oklch(62.3% .214 259.815);--color-blue-600: oklch(54.6% .245 262.881);--color-indigo-100: oklch(93% .034 272.788);--color-indigo-500: oklch(58.5% .233 277.117);--color-slate-100: oklch(96.8% .007 247.896);--color-slate-200: oklch(92.9% .013 255.508);--color-slate-300: oklch(86.9% .022 252.894);--color-slate-400: oklch(70.4% .04 256.788);--color-slate-500: oklch(55.4% .046 257.417);--color-slate-600: oklch(44.6% .043 257.281);--color-slate-700: oklch(37.2% .044 257.287);--color-slate-800: oklch(27.9% .041 260.031);--color-slate-900: oklch(20.8% .042 265.755);--color-slate-950: oklch(12.9% .042 264.695);--color-black: #000;--color-white: #fff;--spacing: .25rem;--container-md: 28rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--font-weight-semibold: 600;--tracking-wide: .025em;--radius-lg: .5rem;--radius-xl: .75rem;--ease-in-out: cubic-bezier(.4, 0, .2, 1);--animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-font-family: Inter, ui-sans-serif, system-ui, sans-serif;--default-mono-font-family: "JetBrains Mono", ui-monospace, monospace}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor}@supports (color: color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.top-2{top:calc(var(--spacing) * 2)}.bottom-2{bottom:calc(var(--spacing) * 2)}.left-2{left:calc(var(--spacing) * 2)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.m-3{margin:calc(var(--spacing) * 3)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.table{display:table}.h-\[calc\(100vh-6rem\)\]{height:calc(100vh - 6rem)}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-10{width:calc(var(--spacing) * 10)}.w-auto{width:auto}.w-full{width:100%}.max-w-\[78\%\]{max-width:78%}.max-w-\[90\%\]{max-width:90%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-\[1\.6\]{flex:1.6}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-primary{border-color:var(--primary)}.border-red-500\/30{border-color:color-mix(in srgb,oklch(63.7% .237 25.331) 30%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-red-500\/50{border-color:color-mix(in srgb,oklch(63.7% .237 25.331) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-red-500\/50{border-color:color-mix(in oklab,var(--color-red-500) 50%,transparent)}}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-800{border-color:var(--color-slate-800)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black\/40{background-color:color-mix(in srgb,#000 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/60{background-color:color-mix(in srgb,#000 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-blue-500\/10{background-color:color-mix(in srgb,oklch(62.3% .214 259.815) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500) 10%,transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-green-500\/10{background-color:color-mix(in srgb,oklch(72.3% .219 149.579) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-indigo-500\/15{background-color:color-mix(in srgb,oklch(58.5% .233 277.117) 15%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-indigo-500\/15{background-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.bg-red-500\/10{background-color:color-mix(in srgb,oklch(63.7% .237 25.331) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/40{background-color:color-mix(in srgb,oklch(20.8% .042 265.755) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-slate-900\/40{background-color:color-mix(in oklab,var(--color-slate-900) 40%,transparent)}}.bg-slate-950{background-color:var(--color-slate-950)}.bg-slate-950\/40{background-color:color-mix(in srgb,oklch(12.9% .042 264.695) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-slate-950\/40{background-color:color-mix(in oklab,var(--color-slate-950) 40%,transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.text-center{text-align:center}.font-mono{font-family:JetBrains Mono,ui-monospace,monospace}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading, var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.font-semibold{--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking: var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-400{color:var(--color-amber-400)}.text-blue-400{color:var(--color-blue-400)}.text-green-400{color:var(--color-green-400)}.text-indigo-100{color:var(--color-indigo-100)}.text-primary{color:var(--primary)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-950{color:var(--color-slate-950)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.shadow-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur: blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ease-in-out{--tw-ease: var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hover\:bg-amber-400:hover{background-color:var(--color-amber-400)}}@media(hover:hover){.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}}@media(hover:hover){.hover\:bg-red-500\/10:hover{background-color:color-mix(in srgb,oklch(63.7% .237 25.331) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}}@media(hover:hover){.hover\:text-slate-100:hover{color:var(--color-slate-100)}}@media(hover:hover){.hover\:text-slate-200:hover{color:var(--color-slate-200)}}@media(hover:hover){.hover\:text-slate-300:hover{color:var(--color-slate-300)}}.focus\:border-amber-500:focus{border-color:var(--color-amber-500)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style: none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:40%}}:root{--background: oklch(.14 .005 260);--surface: oklch(.18 .008 260);--surface-elevated: oklch(.22 .01 260);--border: oklch(.28 .01 260);--border-bright: oklch(.35 .015 260);--text-primary: oklch(.93 .005 260);--text-secondary: oklch(.65 .01 260);--text-tertiary: oklch(.45 .01 260);--primary: oklch(.65 .18 250);--primary-foreground: oklch(.98 .005 260);--success: oklch(.65 .17 155);--warning: oklch(.75 .15 75);--error: oklch(.6 .2 25)}html,body{min-height:100%;background:var(--background);color:var(--text-primary);font-family:Inter,ui-sans-serif,system-ui,sans-serif}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--background)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--border-bright)}@property --tw-rotate-x{syntax: "*"; inherits: false;}@property --tw-rotate-y{syntax: "*"; inherits: false;}@property --tw-rotate-z{syntax: "*"; inherits: false;}@property --tw-skew-x{syntax: "*"; inherits: false;}@property --tw-skew-y{syntax: "*"; inherits: false;}@property --tw-space-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-tracking{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-outline-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@property --tw-ease{syntax: "*"; inherits: false;}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-border-style: solid;--tw-font-weight: initial;--tw-tracking: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-outline-style: solid;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--tw-ease: initial}}}
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sdlc-onboard-code
|
|
3
|
-
description: Code onboarding — GitNexus index + Claude verify index + env check + Docker + cross-domain verify
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
author: "@ngocsangairvds/vsaf"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Onboard Code — GitNexus Index + Verify + Environment Setup
|
|
9
|
-
|
|
10
|
-
You are a Senior DevOps Engineer + Code Architect. Mission: ensure GitNexus index captures ACCURATELY the entire code structure, verify cross-domain with docs graph, AND prepare the development environment.
|
|
11
|
-
|
|
12
|
-
## Progress Protocol
|
|
13
|
-
|
|
14
|
-
Each step prints progress:
|
|
15
|
-
```
|
|
16
|
-
[ONBOARD-CODE] [1/6] description... (icon)
|
|
17
|
-
```
|
|
18
|
-
Icon: `⏳` running, `✅` done, `❌` error.
|
|
19
|
-
|
|
20
|
-
## Index Protection
|
|
21
|
-
|
|
22
|
-
> ⛔ DO NOT modify `graphify-out/` or `.gitnexus/` — only GitNexus tools are allowed to write to `.gitnexus/`.
|
|
23
|
-
|
|
24
|
-
## Artifact Write Boundary
|
|
25
|
-
|
|
26
|
-
- Create generated knowledge, documentation, SDLC artifacts, reports, and agent-readable markdown only at the project root beside `.vsaf` or inside the root `.vsaf/` directory.
|
|
27
|
-
- Do NOT create `docs/`, `.vsaf/`, `CONTEXT.md`, `AGENTS.md`, knowledge files, reports, or generated artifacts inside service/subproject folders.
|
|
28
|
-
- For service-specific notes, write under root `.vsaf/docs/` using the service name in the path or filename.
|
|
29
|
-
- Write inside a service/subproject folder only when the user explicitly authorizes that path, or when the task is a source-code/test change for that service.
|
|
30
|
-
|
|
31
|
-
## Clear Responsibility Assignment
|
|
32
|
-
|
|
33
|
-
| Tool | Scope | Notes |
|
|
34
|
-
|------|-------|-------|
|
|
35
|
-
| **GitNexus** | Code indexing (modules, routes, APIs, dependencies) | SINGLE SOURCE OF TRUTH for code |
|
|
36
|
-
| **Graphify** | Docs indexing (specs, README, wiki) | DO NOT use for code |
|
|
37
|
-
| **graph.json** | Doc-only graph — used for cross-domain verify | Read only, DO NOT write |
|
|
38
|
-
|
|
39
|
-
## Input
|
|
40
|
-
|
|
41
|
-
- Project path: `$ARGUMENTS` (or current directory)
|
|
42
|
-
|
|
43
|
-
## Steps
|
|
44
|
-
|
|
45
|
-
### Phase 1: Detect Project Structure
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
[ONBOARD-CODE] [1/6] Detect project structure... ⏳
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
1. Scan project structure:
|
|
52
|
-
```
|
|
53
|
-
Is there .git at root?
|
|
54
|
-
├── YES → Single git repo
|
|
55
|
-
└── NO → Scan 1-2 levels deep for .git/
|
|
56
|
-
├── Found N folders with .git → Multi-repo / Microservice
|
|
57
|
-
│ List: [{path, remote, branch}]
|
|
58
|
-
└── Not found → Non-git project
|
|
59
|
-
```
|
|
60
|
-
2. Record results in `.vsaf/docs/onboarding/env-setup.md` §Project Structure
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
[ONBOARD-CODE] [1/6] Detect project structure... ✅
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Phase 2: GitNexus Index
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
[ONBOARD-CODE] [2/6] GitNexus index... ⏳
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
3. Run GitNexus analyze at **project root** (NOT per sub-repo):
|
|
73
|
-
```
|
|
74
|
-
Is there .git at project root?
|
|
75
|
-
├── YES → npx gitnexus analyze .
|
|
76
|
-
└── NO → npx gitnexus analyze . --skip-git
|
|
77
|
-
```
|
|
78
|
-
- ⚠️ Use `npx gitnexus` (resolves local binary) — do NOT use `npx -y gitnexus@latest` (native module crash on Node 24+)
|
|
79
|
-
- This creates a SINGLE `.gitnexus/` at project root covering ALL code (including sub-repos)
|
|
80
|
-
- For multi-repo: one unified index enables cross-service analysis naturally
|
|
81
|
-
- Run GitNexus `group_sync` to index
|
|
82
|
-
4. Map structure: `route_map` + `tool_map` + `context` (3-5 key entry points per repo)
|
|
83
|
-
|
|
84
|
-
```
|
|
85
|
-
[ONBOARD-CODE] [2/6] GitNexus index... ✅
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### Phase 3: Verify GitNexus Index
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
[ONBOARD-CODE] [3/6] Verify GitNexus index... ⏳
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
**IMPORTANT:** Claude MUST review GitNexus index — DO NOT trust blindly. Verify using MCP tools:
|
|
95
|
-
|
|
96
|
-
5. `list_repos` — confirm project root has been indexed (single unified index)
|
|
97
|
-
6. `route_map` — check that API routes from ALL repos have been fully mapped
|
|
98
|
-
7. `context` — query 3-5 key entry points per repo, verify results make sense:
|
|
99
|
-
- Are main entry points indexed for each repo?
|
|
100
|
-
- Are dependencies between modules correct?
|
|
101
|
-
- If multi-repo: are cross-service calls captured? (HTTP, gRPC, event-driven)
|
|
102
|
-
8. If missing:
|
|
103
|
-
- Re-run `group_sync` with different config
|
|
104
|
-
- Or record note in env-setup.md: "{module/route} not indexed — needs manual review"
|
|
105
|
-
|
|
106
|
-
```
|
|
107
|
-
[ONBOARD-CODE] [3/6] Verify GitNexus index... ✅
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Phase 4: Environment Check + Docker Setup
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
[ONBOARD-CODE] [4/6] Environment check + Docker setup... ⏳
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
9. Detect tech stack: read `package.json`, `pom.xml`, `build.gradle`, `requirements.txt`, `Dockerfile`, `docker-compose.yml`
|
|
117
|
-
10. Check current env: `java -version`, `node -v`, `docker -v`, `python3 --version`, etc.
|
|
118
|
-
11. Compare required vs current → suggest installations
|
|
119
|
-
12. **Docker env suggestion:**
|
|
120
|
-
- If project DOES NOT have `Dockerfile` or `docker-compose.yml`:
|
|
121
|
-
- Suggest creating `docker-compose.yml` with appropriate services (DB, cache, message broker)
|
|
122
|
-
- Suggest creating `Dockerfile` for the app
|
|
123
|
-
- If project ALREADY HAS Docker files: verify config is reasonable
|
|
124
|
-
13. Record everything in `.vsaf/docs/onboarding/env-setup.md`
|
|
125
|
-
|
|
126
|
-
```
|
|
127
|
-
[ONBOARD-CODE] [4/6] Environment check + Docker setup... ✅
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Phase 5: Cross-Domain Verify
|
|
131
|
-
|
|
132
|
-
```
|
|
133
|
-
[ONBOARD-CODE] [5/6] Cross-domain verify (GitNexus + graph.json)... ⏳
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
14. Read `graphify-out/graph.json` (docs graph from onboard-docs)
|
|
137
|
-
15. Use GitNexus tools (`query`, `context`) to get code structure
|
|
138
|
-
16. Cross-reference:
|
|
139
|
-
- Business concept (from graph.json) → is there a corresponding code module? (query GitNexus)
|
|
140
|
-
- YES → record mapping: `{concept} ↔ {module/class}`
|
|
141
|
-
- NO → record note: "{concept} not yet implemented"
|
|
142
|
-
- Code module (from GitNexus) → is there a corresponding business concept? (check graph.json)
|
|
143
|
-
- YES → record mapping
|
|
144
|
-
- NO → technical module (infra, utils) — OK, record note
|
|
145
|
-
17. Update `CONTEXT.md` with technical terms from code — IDEMPOTENTLY (never overwrite the whole file, never
|
|
146
|
-
blind-append; re-runs must not bloat it): PRESERVE the `## Shared Language` section written by onboard-docs;
|
|
147
|
-
own `## Cross-Domain Verification` + `## Technical Terms` — if a section exists REPLACE its body in place,
|
|
148
|
-
else append it; one row per mapping/term (dedupe, update rather than duplicate):
|
|
149
|
-
|
|
150
|
-
```markdown
|
|
151
|
-
## Technical Terms
|
|
152
|
-
|
|
153
|
-
| Term | Definition | Maps to Business Concept |
|
|
154
|
-
|------|-----------|-------------------------|
|
|
155
|
-
| {class/module} | {functionality} | {business concept or "infrastructure"} |
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
```
|
|
159
|
-
[ONBOARD-CODE] [5/6] Cross-domain verify (GitNexus + graph.json)... ✅
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Phase 6: Summary Report
|
|
163
|
-
|
|
164
|
-
```
|
|
165
|
-
[ONBOARD-CODE] [6/6] Create summary report... ⏳
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
Print ONBOARD-CODE REPORT:
|
|
169
|
-
|
|
170
|
-
```
|
|
171
|
-
=== Onboard Code Report ===
|
|
172
|
-
|
|
173
|
-
| Item | Status |
|
|
174
|
-
|------|--------|
|
|
175
|
-
| Project structure | {Single repo / Multi-repo (N repos)} |
|
|
176
|
-
| GitNexus index | ✅ {N} repos indexed |
|
|
177
|
-
| Index verification | ✅ Verified / ⚠️ {issues} |
|
|
178
|
-
| Tech stack | {Java/Angular/Node/...} |
|
|
179
|
-
| Environment | ✅ Ready / ⚠️ Missing: {list} |
|
|
180
|
-
| Docker | ✅ Exists / 💡 Suggested |
|
|
181
|
-
| Cross-domain mapping | ✅ {N} concepts mapped / ⚠️ {M} gaps |
|
|
182
|
-
| CONTEXT.md | ✅ Updated |
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
```
|
|
186
|
-
[ONBOARD-CODE] [6/6] Create summary report... ✅
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
## Output
|
|
190
|
-
|
|
191
|
-
- `.vsaf/docs/onboarding/env-setup.md` — project structure + tech stack + env check + Docker
|
|
192
|
-
- `CONTEXT.md` — updated with technical terms
|
|
193
|
-
- Single GitNexus index at project root (`.gitnexus/`) covering all code
|
|
194
|
-
|
|
195
|
-
## Artifact Auto-Save
|
|
196
|
-
|
|
197
|
-
After completion, print message:
|
|
198
|
-
|
|
199
|
-
> Artifacts saved. If the session is interrupted, open a new session and run the next phase — data is safe.
|
|
200
|
-
|
|
201
|
-
## Rules
|
|
202
|
-
|
|
203
|
-
- GitNexus is the SINGLE SOURCE OF TRUTH for code — DO NOT use graphify for code
|
|
204
|
-
- Graphify is only for docs — graph.json is READ-ONLY (no writing) in this phase
|
|
205
|
-
- Multi-repo/Microservice: MUST verify cross-service edges (HTTP, gRPC, event-driven, message broker) via GitNexus
|
|
206
|
-
- Database isolation: flag if cross-db access is detected
|
|
207
|
-
- env-setup.md is the ONLY md file to be created (needed for Docker setup)
|
|
208
|
-
- Do not create project-overview.md or codebase-map.md
|
|
209
|
-
- ⛔ DO NOT modify `graphify-out/` or `.gitnexus/`
|
|
210
|
-
- Claude MUST verify GitNexus index — do not assume index is correct without checking
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sdlc-onboard-docs
|
|
3
|
-
description: Document onboarding — Graphify build graph + Claude verify + supplement gaps
|
|
4
|
-
version: 1.0.1
|
|
5
|
-
author: "@ngocsangairvds/vsaf"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Onboard Docs — Build & Verify Document Knowledge Graph
|
|
9
|
-
|
|
10
|
-
You are a Knowledge Engineer. Mission: ensure graph.json captures ACCURATELY all knowledge from project documents.
|
|
11
|
-
|
|
12
|
-
## Progress Protocol
|
|
13
|
-
|
|
14
|
-
Each step prints progress:
|
|
15
|
-
```
|
|
16
|
-
[ONBOARD-DOCS] [1/4] description... (icon)
|
|
17
|
-
```
|
|
18
|
-
Icon: `⏳` running, `✅` done, `❌` error.
|
|
19
|
-
|
|
20
|
-
## Index Protection
|
|
21
|
-
|
|
22
|
-
> ⛔ DO NOT modify `graphify-out/` or `.gitnexus/` DIRECTLY — only graphify is allowed to write to `graphify-out/`.
|
|
23
|
-
> **Exception:** Phase 3 supplements nodes/edges directly into `graph.json` after graphify has built it — this is the only permitted direct modification.
|
|
24
|
-
|
|
25
|
-
## Artifact Write Boundary
|
|
26
|
-
|
|
27
|
-
- Create generated knowledge, documentation, SDLC artifacts, reports, and agent-readable markdown only at the project root beside `.vsaf` or inside the root `.vsaf/` directory.
|
|
28
|
-
- Do NOT create `docs/`, `.vsaf/`, `CONTEXT.md`, `AGENTS.md`, knowledge files, reports, or generated artifacts inside service/subproject folders.
|
|
29
|
-
- For service-specific notes, write under root `.vsaf/docs/` using the service name in the path or filename.
|
|
30
|
-
- Write inside a service/subproject folder only when the user explicitly authorizes that path, or when the task is a source-code/test change for that service.
|
|
31
|
-
|
|
32
|
-
## Input
|
|
33
|
-
|
|
34
|
-
- Project path: `$ARGUMENTS` (or current directory)
|
|
35
|
-
- Read all docs in project: README, docs/, wiki/, specs/, *.md, *.txt
|
|
36
|
-
|
|
37
|
-
## Steps
|
|
38
|
-
|
|
39
|
-
### Phase 1: Scan & Import
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
[ONBOARD-DOCS] [1/4] Scan & import documents... ⏳
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
1. Scan all documents in project (README, docs/, wiki, specs)
|
|
46
|
-
2. List all docs found
|
|
47
|
-
3. Resolve markitdown Python — run:
|
|
48
|
-
```bash
|
|
49
|
-
VENVS=$(pipx environment --value PIPX_LOCAL_VENVS 2>/dev/null)
|
|
50
|
-
MARKITDOWN_PYTHON="${VENVS}/markitdown/bin/python"
|
|
51
|
-
# Windows: "${VENVS}\markitdown\Scripts\python.exe"
|
|
52
|
-
# Fallback: ~/.local/pipx/venvs/markitdown/bin/python
|
|
53
|
-
```
|
|
54
|
-
If markitdown Python not found, skip step 5 entirely and route ALL complex files through tier fallbacks:
|
|
55
|
-
- **All Tier 1 files** → add to graphify-direct-read list (graphify reads natively)
|
|
56
|
-
- **All Tier 2 HTML files** → Claude Read fallback (step 6)
|
|
57
|
-
- **All Tier 2 PPTX/EPUB/ZIP files** → skipped (no fallback available)
|
|
58
|
-
Then jump to step 6 routing.
|
|
59
|
-
|
|
60
|
-
4. Classify each complex file into a tier:
|
|
61
|
-
- **Tier 1 (graphify-native):** PDF, DOCX, XLSX, PNG, JPG, GIF, WEBP — graphify can read these directly if markitdown fails
|
|
62
|
-
- **Tier 2 (graphify-blind):** HTML, PPTX, EPUB, ZIP — graphify cannot read these; need markitdown or Claude fallback
|
|
63
|
-
- Text files (`.md`, `.txt`) are NOT complex — read directly, skip conversion
|
|
64
|
-
|
|
65
|
-
5. For each complex file, attempt markitdown conversion (skip if markitdown not found — see step 3):
|
|
66
|
-
- Resolve markitdown Python (step 3 above)
|
|
67
|
-
- Convert using the wrapper script (bundled in this skill directory):
|
|
68
|
-
```bash
|
|
69
|
-
"${MARKITDOWN_PYTHON}" "<this-skill-dir>/convert.py" \
|
|
70
|
-
--input "{file}" \
|
|
71
|
-
--output ".vsaf/docs/onboarding/doc-imports/{name}.md"
|
|
72
|
-
```
|
|
73
|
-
- `<this-skill-dir>` = the directory containing this SKILL.md
|
|
74
|
-
- The script auto-detects OCR availability from `~/.vsaf/markitdown.env`
|
|
75
|
-
|
|
76
|
-
6. After each conversion, verify and route:
|
|
77
|
-
|
|
78
|
-
**If convert.py exit code = 0:**
|
|
79
|
-
Read the output `.md` file and verify content quality. Check ALL of:
|
|
80
|
-
- Contains meaningful content from the document? (not just auto-generated headers like `## Page 1`)
|
|
81
|
-
- Not an LLM refusal? (e.g., "I'm sorry, but I can't help with that")
|
|
82
|
-
- Not hallucinated? (e.g., fabricated tool calls, irrelevant JSON/XML, text unrelated to source file)
|
|
83
|
-
- Has substance? (more than a few words after stripping structural markers)
|
|
84
|
-
|
|
85
|
-
If ALL checks PASS → use the `.md` output. Log: `[ONBOARD-DOCS] {file} → converted ✅`
|
|
86
|
-
|
|
87
|
-
If ANY check FAILS → treat as conversion failure (continue to fallback below).
|
|
88
|
-
|
|
89
|
-
**If convert.py exit code ≠ 0, OR verification failed:**
|
|
90
|
-
|
|
91
|
-
- **Tier 1 file** → Log: `[ONBOARD-DOCS] {file}: markitdown failed → graphify will read directly`
|
|
92
|
-
Add the ORIGINAL file path to a "graphify-direct-read" list. Do NOT retry conversion.
|
|
93
|
-
After all conversions, persist the list to `.vsaf/docs/onboarding/graphify-direct-read.txt` (one path per line).
|
|
94
|
-
- **Tier 2 HTML file** → Read the HTML file with the Read tool. Extract meaningful content (headings, paragraphs, tables, lists, links). Write clean markdown to `.vsaf/docs/onboarding/doc-imports/{name}.md`. Log: `[ONBOARD-DOCS] {file} → Claude Read fallback ✅`
|
|
95
|
-
- **Tier 2 PPTX/EPUB/ZIP file** → Log: `[ONBOARD-DOCS] ⚠️ {file}: conversion failed, no fallback — skipped`
|
|
96
|
-
|
|
97
|
-
Print conversion summary:
|
|
98
|
-
```
|
|
99
|
-
[ONBOARD-DOCS] Conversion summary:
|
|
100
|
-
markitdown OK: N files
|
|
101
|
-
graphify direct: N files (Tier 1 fallback)
|
|
102
|
-
Claude Read: N files (Tier 2 HTML fallback)
|
|
103
|
-
Skipped: N files (no fallback available)
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
```
|
|
107
|
-
[ONBOARD-DOCS] [1/4] Scan & import documents... ✅
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Phase 2: Graphify Build
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
[ONBOARD-DOCS] [2/4] Graphify build for docs... ⏳
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
7. Create a staging directory at `.vsaf/docs/onboarding/graphify-staging/` and populate it with ALL inputs for graphify:
|
|
117
|
-
- Copy or symlink original text documents (`.md`, `.txt`, README)
|
|
118
|
-
- Copy or symlink successfully converted `.md` files from `.vsaf/docs/onboarding/doc-imports/`
|
|
119
|
-
- Copy or symlink files from `.vsaf/docs/onboarding/graphify-direct-read.txt` (original binary files — graphify reads these natively: PDF, DOCX, XLSX, images)
|
|
120
|
-
|
|
121
|
-
This directory is the single input to graphify — it ensures graphify only processes docs, never source code.
|
|
122
|
-
|
|
123
|
-
8. Run `/graphify .vsaf/docs/onboarding/graphify-staging/`
|
|
124
|
-
9. Output: `graphify-out/graph.json`
|
|
125
|
-
|
|
126
|
-
**IMPORTANT:** Graphify is ONLY for docs (documents, specs, README). DO NOT run graphify on source code — code indexing is handled by GitNexus in `/sdlc-onboard-code`.
|
|
127
|
-
|
|
128
|
-
```
|
|
129
|
-
[ONBOARD-DOCS] [2/4] Graphify build for docs... ✅
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Phase 3: Claude Verify & Fix
|
|
133
|
-
|
|
134
|
-
```
|
|
135
|
-
[ONBOARD-DOCS] [3/4] Verify & fix graph... ⏳
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
10. Re-read **each original doc** — extract: concepts, relationships, business rules, constraints
|
|
139
|
-
11. Read `graph.json` — find corresponding nodes/edges
|
|
140
|
-
12. Compare:
|
|
141
|
-
- Concept in doc but no node in graph → **MISSING**
|
|
142
|
-
- Relationship in doc but no edge in graph → **MISSING**
|
|
143
|
-
- Business rule/constraint not captured → **MISSING**
|
|
144
|
-
- All present → OK
|
|
145
|
-
13. If missing: supplement nodes/edges directly into `graph.json` (this is the permitted exception to the Index Protection rule)
|
|
146
|
-
14. Report: "{doc}: +N nodes, +M edges supplemented"
|
|
147
|
-
|
|
148
|
-
```
|
|
149
|
-
[ONBOARD-DOCS] [3/4] Verify & fix graph... ✅
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### Phase 4: Extract Domain Terms
|
|
153
|
-
|
|
154
|
-
```
|
|
155
|
-
[ONBOARD-DOCS] [4/4] Extract domain terms → CONTEXT.md... ⏳
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
15. From the completed graph, extract domain terms → `CONTEXT.md` — update IDEMPOTENTLY (never overwrite the
|
|
159
|
-
whole file, never blind-append; re-runs must not bloat it): ensure one top `# Project Context: {name}`
|
|
160
|
-
heading, then own the `## Shared Language` section — if it exists REPLACE its body in place, else append it;
|
|
161
|
-
leave other sections (`## Technical Terms`, `## Cross-Domain Verification`) untouched; one row per Term (dedupe).
|
|
162
|
-
16. Format Shared Language table:
|
|
163
|
-
|
|
164
|
-
```markdown
|
|
165
|
-
## Shared Language
|
|
166
|
-
|
|
167
|
-
| Term | Definition | Example |
|
|
168
|
-
|------|-----------|---------|
|
|
169
|
-
| {term} | {1-line definition} | {concrete example} |
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
```
|
|
173
|
-
[ONBOARD-DOCS] [4/4] Extract domain terms → CONTEXT.md... ✅
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
## Output
|
|
177
|
-
|
|
178
|
-
- `graphify-out/graph.json` — verified + supplemented
|
|
179
|
-
- `.vsaf/docs/onboarding/doc-imports/{name}.md` — converted/fallback imports (if any)
|
|
180
|
-
- `CONTEXT.md` — Ubiquitous Language
|
|
181
|
-
|
|
182
|
-
## Artifact Auto-Save
|
|
183
|
-
|
|
184
|
-
After completion, print message:
|
|
185
|
-
|
|
186
|
-
> Artifacts saved. If the session is interrupted, open a new session and run the next phase — data is safe.
|
|
187
|
-
|
|
188
|
-
## Rules
|
|
189
|
-
|
|
190
|
-
- Graph is the SINGLE SOURCE OF TRUTH — do not create redundant overview/summary md files
|
|
191
|
-
- Every missing concept/relationship MUST be supplemented, not skipped
|
|
192
|
-
- CONTEXT.md contains only domain terms, not technical terms (technical terms belong in the code branch)
|
|
193
|
-
- Graphify runs ONLY on docs — DO NOT run on source code
|
|
194
|
-
- ⛔ DO NOT modify `graphify-out/` or `.gitnexus/` directly outside graphify workflow (Phase 3 supplementation is the only exception)
|
|
File without changes
|