Workspace Project Setup
Register or revise workspace-local FF15 project profiles for the VS Code extension. Each project profile lives at .ff15/projects/<id>.yaml and is activated through .ff15/config/config.yaml. The loader reads only <id>.yaml files; entries starting with _ (such as _template.yaml) are templates and are ignored.
When To Use
- Add or edit
.ff15/projects/<id>.yaml - Activate a project by adding its
idtoactive_projectsin.ff15/config/config.yaml - Diagnose why a registered project is not resolved for OpenSpec
- Validate project profile YAML after every edit
Profile Schema
A project profile is a YAML mapping with these fields:
id(required): unique project identifier. Must equal the file name stem, so a profile withid: applives at.ff15/projects/app.yaml.openspec_root(required): path to the project's OpenSpec directory, relative to the workspace root (the parent of.ff15). The resolved path must exist.repos(required, non-empty): list of repository mappings. Each entry has:id: repository identifier.root: repository root path, relative to the workspace root. The resolved path must exist.default_checks(recommended): list of check commands for the repo.
summary(optional): short human-readable description.
Config activation in .ff15/config/config.yaml:
active_projects: list of project ids to include in the session. Every listed id must have a matching.ff15/projects/<id>.yaml.openspec.project_id(optional): which active project supplies OpenSpec resolution. If set, it must be listed inactive_projectsand have a profile file.language:enorja.
Workflow
- Confirm the workspace root and the target profile path under
.ff15/projects/. Pick anidand name the file<id>.yaml. - Start from
.ff15/projects/_template.yamland fill inid,openspec_root,repos, andsummary. - Write
openspec_rootand every reporootas paths relative to the workspace root, and verify each resolves to an existing directory. - Activate the project: add
idtoactive_projectsin.ff15/config/config.yaml, and setopenspec.project_idif this project should drive OpenSpec resolution. - Run the bundled validator on every created or modified profile, and on
.ff15to check config consistency:node .claude/skills/ff15-workspace-project-setup/scripts/validate-project-yaml.mjs .ff15/projects/<id>.yaml- You may pass multiple files, the whole
.ff15/projectsdirectory, or.ff15(which also checksconfig.yamlconsistency). - The same
nodecommand works on Windows and WSL.
- Treat validator failures as blocking.
- Summarize changed files, validator results, and any remaining warnings.
Diagnostics
- If a project is not resolved for OpenSpec, check that its
idis present inactive_projectsand thatopenspec.project_id(when set) names an active project with an existing profile. - Check that the file name stem matches the
idfield; a mismatch makes the loader skip or misresolve the profile. - Check that
openspec_rootand each reporootresolve relative to the workspace root, not relative to.ff15. - Remember that
_-prefixed files are templates and never loaded as active profiles.
Guardrails
- Do not let the file name diverge from the
idfield. - Do not resolve
openspec_rootor reporootrelative to.ff15; they are relative to the workspace root. - Do not skip the validator for small edits.
- Keep top-level fields limited to
id,openspec_root,repos, andsummary.
Completion Criteria
- The validator passes for every touched profile YAML and reports no config-consistency errors.
- Every profile file name stem equals its
idfield. openspec_rootand every reporootresolve to existing directories.- Every id in
active_projectshas a matching profile, andopenspec.project_id(if set) names an active project with an existing profile. - Any remaining warning (such as a missing
default_checks) is called out explicitly.