dev-scaffolding/SKILL.md
Scaffold new projects or add feature modules following the Lidge Standard (Feature-based + Colocation + Barrel Export + devlog). Language-agnostic — auto-detects project type from config files. Also audits existing projects for structural compliance. Triggers: scaffold, new project, new feature, init project, audit structure, scaffolding, add module, project setup.
npx skillsauth add lidge-jun/cli-jaw-skills dev-scaffoldingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Rules for generating and auditing project structures. Create files directly following these rules. Use the audit script (§10) for verification.
Apply for new projects or when a repo has no clear structural convention of its own; defer to an existing mature convention when one is present (§2). Three pillars:
stock-price/, auth/, report/)index.ts, index.js, __init__.py, or Go package)Before scaffolding inside an existing repo:
structure/, devlog/, docs/, plans/, or equivalent source-of-truth logs before proposing new structure.structure/, devlog/, docs/, AGENTS.md, or similar project-level folders without approval.MUST preserve mature repo conventions over the Lidge/Jawdev default.
Use this only when:
Default proposal:
structure/
README.md # index of current architecture docs
architecture.md # current system shape, not future wishes
conventions.md # naming, layout, commands, testing
devlog/
_plan/ # active plans
_fin/ # completed work summaries
Folder names are advisory. If the repo already has docs/, adr/, plans/, changelog/, or another convention, propose using those instead.
Jawdev devlog method:
_fin/; keep pending/future work under _plan/ or an existing equivalent.Jawdev phase document naming uses decade-range prefixes (see dev-pabcd/SKILL.md for the canonical table):
devlog/_plan/YYMMDD_slug/00–09 research/specs/MOC (mandatory before implementation), 10–19 Phase 1, 20–29 Phase 2, and so on.00, 01, 02…); on overflow use a sub-index (00_0_name.md, 00_1_name.md).00_* (e.g. 00_plan.md or 00_overview.md) is the plan-folder index and file map.PLAN.md, DIFF_PLAN.md, PHASES.md, RCA.md).Before creating any structure//devlog/ folders, ask concisely: state that no source-of-truth docs were found, show the proposed tree, give a specific recommendation, and confirm you will not create them without approval.
For a new project, propose the source-of-truth structure in the plan.
If the user explicitly asks for Lidge/Jawdev standard, create it.
Otherwise ask once before adding structure/ and devlog/.
When creating an approved new project skeleton, include the source-of-truth and feature-based essentials: AGENTS.md + README.md (context/overview), .env.example + .gitignore, devlog/_plan/ + devlog/_fin/ (and str_func/ only for the full standard, §8), src/ with a shared/ for truly-shared code, config/, docs/, and tests/e2e/. Then add the language-appropriate package manifest, entry point, language config, and shared barrel from detection (§3). Defer exact layout to the framework's own generator when one exists.
Detect project type from existing files. Priority order:
| File Found | Project Type |
| -------------------------------------- | ----------------------------- |
| tsconfig.json | TypeScript (Node) |
| package.json (no tsconfig) | JavaScript (Node) |
| pyproject.toml or requirements.txt | Python |
| go.mod | Go |
| Cargo.toml | Rust |
| None of the above | → Tech Stack Decision (below) |
For greenfield projects, use the Tech Stack Decision process (§3.1) instead of asking "What language?"
When creating a new project with no existing framework, guide the user through plain-language choices:
Present options as <Framework> — <what it gives you>, recommend one with reasoning, let user pick.
Match tool complexity to task complexity. Escalate tooling only when justified by user requirements (SEO, CMS, scaling).
Decide project layout based on runtime:
| Scenario | Layout | Example |
| ------------------ | ------------------------ | ---------------------------------------- |
| Single runtime | src/ modular | Next.js, Node CLI + API, Python monolith |
| Multiple runtimes | frontend/ + backend/ | React + FastAPI, Vue + Go API |
| Monorepo (3+ apps) | packages/ or apps/ | Turborepo, Nx |
Each side gets its own package manifest and entry point. Shared types go in root shared/ or packages/shared/.
When adding a new feature, create a folder under src/ with these files:
| Language | Folder | Main File | Test File | Barrel |
| ---------- | ------------- | -------------- | -------------- | -------------------- |
| JavaScript | kebab-case/ | name.tool.js | name.test.js | index.js |
| TypeScript | kebab-case/ | name.tool.ts | name.test.ts | index.ts |
| Python | kebab-case/ | name_tool.py | test_name.py | __init__.py |
| Go | kebab-case/ | name.go | name_test.go | (package = barrel) |
| Rust | kebab-case/ | mod.rs | name_test.rs | mod.rs |
Principle: "flat until you can't" — start flat, sub-folder only when a folder becomes hard to scan.
| Item | Rule | Example |
| ------------------- | --------------------- | ---------------------------- |
| Folders | kebab-case | stock-price/, user-auth/ |
| JS/TS files | kebab-case + suffix | stock-price.tool.ts |
| Python files | snake_case + suffix | stock_price_tool.py |
| Go files | snake_case | stock_price.go |
| Rust files | snake_case | stock_price.rs |
| devlog plan folders | YYMMDD_slug/ | 260510_jawdev_phase_doc_naming/ |
| devlog phase docs | decade-prefixed NN_slug.md, 00_* is the index | 00_plan.md, 10_phase1_skill_contract.md |
| Functions (JS/TS) | camelCase | getStockPrice() |
| Functions (Python) | snake_case | get_stock_price() |
| Functions (Go) | PascalCase (exported) | GetStockPrice() |
| Functions (Rust) | snake_case | get_stock_price() |
| Suffix | Role | Languages |
| -------------------------------------------------- | ----------------------- | ------------ |
| .tool.ts / .tool.js / _tool.py | Core business logic | JS/TS/Python |
| .test.ts / .test.js / test_*.py / _test.go | Tests | All |
| .schema.ts / .schema.js | Type/schema definitions | JS/TS |
| .route.ts / .route.js | API routes | JS/TS |
| .template.md | Templates | All |
str_func is part of the full Lidge/Jawdev standard, not the lightweight default.
Use it when:
str_func docs.When used:
.md file per feature folder (e.g., price.md, auth.md).md whenever a feature is added or modified<SKILL_DIR>/assets/str_func_template.mdDo not generate heavy feature docs by default for small or immature repos.
Prefer lightweight structure/architecture.md and structure/conventions.md first.
Split smells (heuristics, not hard gates):
| Condition | Action |
| ------------------------------- | --------------------------------------------- |
| File grows past ~500 lines | Split into focused modules within same folder |
| Folder becomes hard to scan | Create sub-folders by responsibility |
| Different runtime needed | Split into frontend/ + backend/ |
| 3+ apps share code | Extract to shared/ or monorepo packages/ |
Run the scaffold audit if one is available for the repo (e.g. bash <SKILL_DIR>/scripts/scaffold-audit.sh [project-path]) to check structural compliance. Audit checks should reflect the project's own conventions — covering feature-based structure, colocation, barrel exports, devlog presence, .env safety, file length, and AGENTS.md where those apply.
development
Goal execution guidelines with PABCD integration, verification tiers, documentation workflow, and AI-driven planning
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
development
Use this skill any time a spreadsheet file is the primary input or output (.xlsx, .xlsm, .csv, .tsv). This includes: creating, reading, editing, analyzing, or formatting spreadsheets; cleaning messy tabular data; converting between formats; and data visualization with charts. Also use for pandas-based data analysis when the deliverable is a spreadsheet. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration.
tools
Use this skill when the user wants to build a financial model, 3-statement model, DCF valuation, cap table, scenario analysis, or financial projections in Excel. Trigger on: 'financial model', '3-statement model', 'DCF', 'cap table', 'pro forma', 'projections', 'sensitivity analysis', 'waterfall', 'debt schedule', 'break-even', 'discounted cash flow', 'capitalization table', 'fundraising model', 'WACC calculation', 'scenario analysis model'. Input is a text prompt with assumptions. Output is a single .xlsx file with formula-driven, interconnected statement sheets.