cadence-skill-installer 0.2.20 → 0.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cadence-skill-installer",
3
- "version": "0.2.20",
3
+ "version": "0.2.21",
4
4
  "description": "Install the Cadence skill into supported AI tool skill directories.",
5
5
  "repository": "https://github.com/snowdamiz/cadence",
6
6
  "private": false,
package/skill/SKILL.md CHANGED
@@ -20,11 +20,12 @@ description: Structured project operating system for end-to-end greenfield or br
20
20
  ## Repo Status Gate
21
21
  1. At Cadence entry (first assistant response in the conversation), resolve `PROJECT_ROOT` with `python3 scripts/resolve-project-root.py --project-root "$PWD"` (resolve script paths from this skill directory but keep command cwd at the active project).
22
22
  2. If `"$PROJECT_ROOT/.cadence"` exists, run `python3 scripts/check-project-repo-status.py --project-root "$PROJECT_ROOT"`.
23
- 3. If `"$PROJECT_ROOT/.cadence"` does not exist, skip this gate at root entry and let `skills/scaffold/SKILL.md` establish repo mode after scaffold initialization.
24
- 4. Read `repo_enabled` from script output and treat it as the authoritative push mode for the active subskill conversation.
25
- 5. If `repo_enabled` is false, continue with local commits only until a GitHub remote is configured.
26
- 6. Do not rerun this gate between normal user replies inside the same active subskill conversation.
27
- 7. Rerun this gate only when:
23
+ 3. Never run `check-project-repo-status.py` without `--project-root`; this invocation is intentionally treated as ambiguous from the skill directory.
24
+ 4. If `"$PROJECT_ROOT/.cadence"` does not exist, skip this gate at root entry and let `skills/scaffold/SKILL.md` establish repo mode after scaffold initialization.
25
+ 5. Read `repo_enabled` from script output and treat it as the authoritative push mode for the active subskill conversation.
26
+ 6. If `repo_enabled` is false, continue with local commits only until a GitHub remote is configured.
27
+ 7. Do not rerun this gate between normal user replies inside the same active subskill conversation.
28
+ 8. Rerun this gate only when:
28
29
  - starting a new Cadence conversation
29
30
  - transitioning to a different subskill after a completed checkpoint
30
31
  - handling explicit resume/status/reroute requests
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Cadence"
3
3
  short_description: "Lifecycle + delivery system for structured project execution"
4
- default_prompt: "Use Cadence to guide this project from lifecycle setup through phased execution, traceability, audit, and milestone completion. Always read and apply the active SOUL persona from .cadence/SOUL.json (fallback: SOUL.json). Keep user-facing responses concise and outcome-focused, and never expose internal skill-routing or command-execution traces unless the user explicitly asks. Do not announce successful internal checks; only surface them when a check fails and blocks progress. At Cadence entry (first assistant response in a conversation), resolve PROJECT_ROOT with scripts/resolve-project-root.py --project-root \"$PWD\". If \"$PROJECT_ROOT/.cadence\" exists, run scripts/check-project-repo-status.py --project-root \"$PROJECT_ROOT\" and treat repo_enabled as the authoritative push mode (if false, keep commits local-only). If \"$PROJECT_ROOT/.cadence\" is missing, run scaffold first and let scaffold establish repo mode. After scaffold handling, run scripts/read-workflow-state.py --project-root \"$PROJECT_ROOT\" and treat route.skill_name as authoritative for the next state-changing skill. During normal multi-turn subskill conversation flow, do not rerun repo/route gates between each user reply; rerun them only when checkpointing into a new subskill, handling explicit resume/status/reroute requests, or recovering from assertion/gate failures. Invoke skills/prerequisite-gate/SKILL.md only when route.skill_name is prerequisite-gate. If scaffold and prerequisite complete in-thread and route advances to ideator, force subskill handoff with: Start a new chat and either say \"help me define my project\" or share your project brief. In later chats, if route.skill_name is ideator, do not rerun prerequisite; invoke skills/ideator/SKILL.md in the same chat, and if the user has not provided ideation input yet, ask one kickoff ideation question in-thread instead of handing off again. Do not force a new-chat handoff when route advances from ideator to researcher; on the next cadence invocation, route directly from workflow state. If route.skill_name is researcher, invoke skills/researcher/SKILL.md and enforce one pass per conversation; when more passes remain, end with: Start a new chat and say \"continue research\". If user intent indicates resuming/continuing work or asking progress, invoke skills/project-progress/SKILL.md first, report current phase, then route to the next step. If the user manually requests a Cadence subskill, resolve PROJECT_ROOT with scripts/resolve-project-root.py --project-root \"$PWD\" and then run scripts/assert-workflow-route.py --skill-name <subskill> --project-root \"$PROJECT_ROOT\" before any state-changing actions. Ensure direct subskill execution follows the same Git Checkpoints policy from this main skill: run scripts/finalize-skill-checkpoint.py with each subskill's configured --scope/--checkpoint and --paths ., allow status=no_changes without failure, and treat checkpoint or push failures as blocking errors surfaced verbatim."
4
+ default_prompt: "Use Cadence to guide this project from lifecycle setup through phased execution, traceability, audit, and milestone completion. Always read and apply the active SOUL persona from .cadence/SOUL.json (fallback: SOUL.json). Keep user-facing responses concise and outcome-focused, and never expose internal skill-routing or command-execution traces unless the user explicitly asks. Do not announce successful internal checks; only surface them when a check fails and blocks progress. At Cadence entry (first assistant response in a conversation), resolve PROJECT_ROOT with scripts/resolve-project-root.py --project-root \"$PWD\". If \"$PROJECT_ROOT/.cadence\" exists, run scripts/check-project-repo-status.py --project-root \"$PROJECT_ROOT\" and treat repo_enabled as the authoritative push mode (if false, keep commits local-only). Never run scripts/check-project-repo-status.py without --project-root. If \"$PROJECT_ROOT/.cadence\" is missing, run scaffold first and let scaffold establish repo mode. After scaffold handling, run scripts/read-workflow-state.py --project-root \"$PROJECT_ROOT\" and treat route.skill_name as authoritative for the next state-changing skill. During normal multi-turn subskill conversation flow, do not rerun repo/route gates between each user reply; rerun them only when checkpointing into a new subskill, handling explicit resume/status/reroute requests, or recovering from assertion/gate failures. Invoke skills/prerequisite-gate/SKILL.md only when route.skill_name is prerequisite-gate. If scaffold and prerequisite complete in-thread and route advances to ideator, force subskill handoff with: Start a new chat and either say \"help me define my project\" or share your project brief. In later chats, if route.skill_name is ideator, do not rerun prerequisite; invoke skills/ideator/SKILL.md in the same chat, and if the user has not provided ideation input yet, ask one kickoff ideation question in-thread instead of handing off again. Do not force a new-chat handoff when route advances from ideator to researcher; on the next cadence invocation, route directly from workflow state. If route.skill_name is researcher, invoke skills/researcher/SKILL.md and enforce one pass per conversation; when more passes remain, end with: Start a new chat and say \"continue research\". If user intent indicates resuming/continuing work or asking progress, invoke skills/project-progress/SKILL.md first, report current phase, then route to the next step. If the user manually requests a Cadence subskill, resolve PROJECT_ROOT with scripts/resolve-project-root.py --project-root \"$PWD\" and then run scripts/assert-workflow-route.py --skill-name <subskill> --project-root \"$PROJECT_ROOT\" before any state-changing actions. Ensure direct subskill execution follows the same Git Checkpoints policy from this main skill: run scripts/finalize-skill-checkpoint.py with each subskill's configured --scope/--checkpoint and --paths ., allow status=no_changes without failure, and treat checkpoint or push failures as blocking errors surfaced verbatim."
@@ -11,7 +11,7 @@ import sys
11
11
  from pathlib import Path
12
12
  from typing import Any
13
13
 
14
- from project_root import read_oldpwd_hint, resolve_project_root, write_project_root_hint
14
+ from project_root import resolve_project_root, write_project_root_hint
15
15
  from workflow_state import default_data, reconcile_workflow_state
16
16
 
17
17
 
@@ -158,16 +158,11 @@ def main() -> int:
158
158
  and project_root_source == "cwd-fallback"
159
159
  and project_root == SCRIPT_DIR.parent
160
160
  ):
161
- oldpwd_root = read_oldpwd_hint(require_cadence=False)
162
- if oldpwd_root is not None and oldpwd_root != project_root:
163
- project_root = oldpwd_root
164
- project_root_source = "oldpwd"
165
- else:
166
- print(
167
- "AMBIGUOUS_PROJECT_ROOT: use --project-root when invoking from the Cadence skill directory.",
168
- file=sys.stderr,
169
- )
170
- return 1
161
+ print(
162
+ "AMBIGUOUS_PROJECT_ROOT: use --project-root when invoking from the Cadence skill directory.",
163
+ file=sys.stderr,
164
+ )
165
+ return 1
171
166
 
172
167
  write_project_root_hint(SCRIPT_DIR, project_root)
173
168
 
@@ -84,6 +84,11 @@ def resolve_project_root(
84
84
  if explicit_project_root:
85
85
  project_root = Path(explicit_project_root).expanduser().resolve()
86
86
  source = "explicit"
87
+ skill_root = script_dir.resolve().parent
88
+ if project_root == skill_root and not (project_root / ".cadence").is_dir():
89
+ raise ValueError(
90
+ "AMBIGUOUS_PROJECT_ROOT: explicit --project-root resolved to the Cadence skill directory."
91
+ )
87
92
  else:
88
93
  cwd = Path.cwd().resolve()
89
94
  project_root = find_cadence_project_root(cwd) or cwd