Centralize directory layout into config so profiles can customize paths
Problem¶
Directory paths throughout projio are hardcoded or use discovery patterns that override config values. This prevents profiles from customizing project layout (e.g., pipelines/ instead of code/pipelines/, lib/ instead of code/lib/).
Audit results¶
| Path | Config key | Status |
|---|---|---|
code/pipelines/ |
pipeio.pipelines_dir |
Discovery pattern overrides config in CLI, MCP, docs.py |
docs/log/ |
notio.notes_dir |
Hardcoded parallel check in ecosystem_status() |
docs/ |
None | Hardcoded everywhere — mkdocs nav, pipeio docs, skills, questio |
docs/pipelines/ |
None | Hardcoded in pipeio docs.py, MCP |
code/lib/ |
None | Hardcoded in sync.py |
code/utils/ |
code.project_utils |
Discovery hardcoded to code/utils/ |
.projio/skills/ |
None | Hardcoded in context.py |
docs/prompts/ |
None | Hardcoded in context.py |
Proposed design¶
Add a layout: section to .projio/config.yml as the single source of truth:
layout:
docs: docs/
notes: docs/log/
pipelines: code/pipelines/
libraries: code/lib/
utils: code/utils/
scripts: code/scripts/
plan: plan/
Then thread a Layout object (or just the resolved config dict) through pipeio, notio, codio, sync, and MCP tools — replacing all hardcoded paths and discovery patterns.
Scope¶
- Replace discovery patterns in pipeio CLI/MCP with config reads
- Add config keys for
docs/,code/lib/,docs/pipelines/ - Remove hardcoded parallel path checks (e.g.,
ecosystem_status) - Profiles can then override layout values to offer alternative directory structures (e.g., a flat
standardprofile withpipelines/andlib/at root)
Hardcoded locations to fix¶
packages/pipeio/src/pipeio/cli.py:558,768-771— discovery fallbackspackages/pipeio/src/pipeio/mcp.py:399-404,1260-1268— discovery fallbacks, docs pathpackages/pipeio/src/pipeio/docs.py:55-70,509-520— DAG inject, docs collectsrc/projio/sync.py:15,33— code/lib and code/utils discoverysrc/projio/mcp/context.py:172,230,242,260,417,422— skills, workflows, notes parallel check