Problem
In split-portfolio v2 mode, the adopter's private sibling repo contains a fully-configured onboarding.yaml (company info, Jira tracker, team structure, tech stack). The framework's _lib-portfolio-paths.sh helper correctly resolves the registry, projects dir, workspace, and agent routing from the sibling repo — but not onboarding.yaml.
At session start, the CLAUDE.md instruction says:
Read onboarding.yaml for company-specific configuration
There is no qualification about which repo to read from. Claude Code resolves this relative to CWD, which in a split-portfolio session is the public fork root — not the sibling. The sibling's properly-configured onboarding.yaml is silently ignored; the fork's copy (still at template defaults after /split-portfolio runs) is read instead.
The result: every session starts with template placeholder values ("Your Company Name", tool: "GitHub Issues", ticket_prefix: "GH") even when the adopter has a fully-configured sibling copy.
Steps to reproduce
- Run
/split-portfolio on a single-fork adopter
- Fill in
onboarding.yaml in the resulting sibling (private) repo
- Open a new Claude Code session from the public fork root
- Ask Claude to describe the company or the project management tool
- Observe: Claude reports template defaults, not the sibling's values
Expected behaviour
_lib-portfolio-paths.sh should expose a portfolio_onboarding_yaml resolver (same pattern as portfolio_registry, portfolio_projects_dir, portfolio_workspace_dir, portfolio_agent_routing) that:
- In single-fork mode: returns
<ops_root>/onboarding.yaml (current behaviour, unchanged)
- In split-portfolio mode: returns
<private_sibling>/onboarding.yaml
The CLAUDE.md session-start instruction should be updated to resolve via the helper:
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-portfolio-paths.sh"
onboarding=$(portfolio_onboarding_yaml)
# Read $onboarding
Why this matters
onboarding.yaml carries the tracker tool (Jira vs GitHub Issues), ticket_prefix, team structure, and company context. Without it, every role activation, ticket creation, and PR workflow instruction operates on wrong defaults. It is arguably the most important adopter-configuration file — it should be one of the first paths the helper resolves, not a gap.
Acceptance criteria
Problem
In split-portfolio v2 mode, the adopter's private sibling repo contains a fully-configured
onboarding.yaml(company info, Jira tracker, team structure, tech stack). The framework's_lib-portfolio-paths.shhelper correctly resolves the registry, projects dir, workspace, and agent routing from the sibling repo — but notonboarding.yaml.At session start, the CLAUDE.md instruction says:
There is no qualification about which repo to read from. Claude Code resolves this relative to CWD, which in a split-portfolio session is the public fork root — not the sibling. The sibling's properly-configured
onboarding.yamlis silently ignored; the fork's copy (still at template defaults after/split-portfolioruns) is read instead.The result: every session starts with template placeholder values (
"Your Company Name",tool: "GitHub Issues",ticket_prefix: "GH") even when the adopter has a fully-configured sibling copy.Steps to reproduce
/split-portfolioon a single-fork adopteronboarding.yamlin the resulting sibling (private) repoExpected behaviour
_lib-portfolio-paths.shshould expose aportfolio_onboarding_yamlresolver (same pattern asportfolio_registry,portfolio_projects_dir,portfolio_workspace_dir,portfolio_agent_routing) that:<ops_root>/onboarding.yaml(current behaviour, unchanged)<private_sibling>/onboarding.yamlThe CLAUDE.md session-start instruction should be updated to resolve via the helper:
Why this matters
onboarding.yamlcarries the tracker tool (JiravsGitHub Issues),ticket_prefix, team structure, and company context. Without it, every role activation, ticket creation, and PR workflow instruction operates on wrong defaults. It is arguably the most important adopter-configuration file — it should be one of the first paths the helper resolves, not a gap.Acceptance criteria
portfolio_onboarding_yamlfunction added to_lib-portfolio-paths.sh_lib-portfolio-paths.shtest suite/split-portfoliooutput mentions thatonboarding.yamlshould be filled in the sibling, not the fork