"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[413],{6785(e,s,n){n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"overview","title":"CascadingDev (Simplified)","description":"CascadingDev (CDev) is a Git-native AI-human collaboration framework that uses git hooks and cascading rules to enhance development workflows. This simplified version focuses on core functionality: pre-commit safety hooks, cascading .ai-rules.yml configuration, and the Ramble GUI for structured feature requests.","source":"@site/docs/overview.md","sourceDirName":".","slug":"/","permalink":"/rob/CascadingDev_simplified/","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"slug":"/","sidebar_position":1},"sidebar":"docs"}');var t=n(4848),r=n(8453);const a={slug:"/",sidebar_position:1},o="CascadingDev (Simplified)",c={},l=[{value:"Features",id:"features",level:2},{value:"Quick Start",id:"quick-start",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Key Paths in User Projects",id:"key-paths-in-user-projects",level:3},{value:"Related Projects",id:"related-projects",level:3}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"cascadingdev-simplified",children:"CascadingDev (Simplified)"})}),"\n",(0,t.jsxs)(s.p,{children:["CascadingDev (CDev) is a Git-native AI-human collaboration framework that uses git hooks and cascading rules to enhance development workflows. This simplified version focuses on core functionality: pre-commit safety hooks, cascading ",(0,t.jsx)(s.code,{children:".ai-rules.yml"})," configuration, and the Ramble GUI for structured feature requests."]}),"\n",(0,t.jsx)(s.h2,{id:"features",children:"Features"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Cascading Rules System"})," \u2014 Hierarchical ",(0,t.jsx)(s.code,{children:".ai-rules.yml"})," files where nearest file takes precedence, enabling directory-level behavior customization"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Pre-commit Hook"})," \u2014 Pure bash hook providing secret scanning, discussion summary generation, and flock-based concurrency protection"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Ramble GUI"})," \u2014 PySide6/PyQt5 dialog for capturing structured feature requests"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Deterministic Builds"})," \u2014 Reproducible installer bundle generation via ",(0,t.jsx)(s.code,{children:"cdev build"})]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Two-Repository Architecture"})," \u2014 Clean separation between tooling (this repo) and user project scaffolding"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"quick-start",children:"Quick Start"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-bash",children:"# Create and activate virtual environment\npython3 -m venv .venv\nsource .venv/bin/activate\npip install --upgrade pip wheel PySide6\n\n# Install in development mode\npip install -e .\n\n# Build the installer bundle\ncdev build\n\n# Install into a new project\npython install/cascadingdev-*/setup_cascadingdev.py --target /path/to/myproject\n"})}),"\n",(0,t.jsx)(s.h2,{id:"architecture",children:"Architecture"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{children:"CascadingDev/\n\u251c\u2500\u2500 src/cascadingdev/ # Core Python modules and CLI\n\u2502 \u251c\u2500\u2500 cli.py # Main CLI entry point (cdev command)\n\u2502 \u251c\u2500\u2500 setup_project.py # Installer script (copied to bundle)\n\u2502 \u2514\u2500\u2500 utils.py # Shared utilities\n\u251c\u2500\u2500 assets/ # Single source of truth for shipped files\n\u2502 \u251c\u2500\u2500 hooks/pre-commit # Git hook template (bash script)\n\u2502 \u251c\u2500\u2500 templates/ # Markdown templates for user projects\n\u2502 \u2514\u2500\u2500 runtime/ # Python scripts (ramble.py, create_feature.py)\n\u251c\u2500\u2500 tools/ # Build and test scripts\n\u2502 \u251c\u2500\u2500 build_installer.py # Creates install/ bundle\n\u2502 \u2514\u2500\u2500 smoke_test.py # Basic validation\n\u2514\u2500\u2500 install/ # Build output (git-ignored)\n"})}),"\n",(0,t.jsx)(s.h3,{id:"key-paths-in-user-projects",children:"Key Paths in User Projects"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["Root ",(0,t.jsx)(s.code,{children:".ai-rules.yml"})," \u2014 Global defaults"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"Docs/features/.ai-rules.yml"})," \u2014 Feature-specific rules"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:".git/hooks/pre-commit"})," \u2014 Installed safety hook"]}),"\n"]}),"\n",(0,t.jsx)(s.h3,{id:"related-projects",children:"Related Projects"}),"\n",(0,t.jsx)(s.p,{children:"Part of a multi-project stack:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://gitea.brrd.tech/rob/SmartTools",children:"SmartTools"})," \u2014 AI provider abstraction"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://gitea.brrd.tech/rob/orchestrated-discussions",children:"Orchestrated Discussions"})," \u2014 Multi-agent discussion orchestration"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.a,{href:"https://gitea.brrd.tech/rob/ramble",children:"Ramble"})," \u2014 AI-powered structured field extraction GUI"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453(e,s,n){n.d(s,{R:()=>a,x:()=>o});var i=n(6540);const t={},r=i.createContext(t);function a(e){const s=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),i.createElement(r.Provider,{value:s},e.children)}}}]);