pactkit-opencode 2.9.1__tar.gz → 2.9.2__tar.gz

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.
Files changed (18) hide show
  1. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/PKG-INFO +1 -1
  2. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/pyproject.toml +1 -1
  3. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/src/pactkit_opencode/deployer.py +1 -1
  4. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/src/pactkit_opencode.egg-info/PKG-INFO +1 -1
  5. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/tests/test_bug035_opencode_dual_layer.py +22 -5
  6. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/tests/test_story071_opencode_config_parity.py +15 -6
  7. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/tests/test_story073_command_model_routing.py +14 -4
  8. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/README.md +0 -0
  9. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/setup.cfg +0 -0
  10. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/src/pactkit_opencode/__init__.py +0 -0
  11. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/src/pactkit_opencode.egg-info/SOURCES.txt +0 -0
  12. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/src/pactkit_opencode.egg-info/dependency_links.txt +0 -0
  13. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/src/pactkit_opencode.egg-info/entry_points.txt +0 -0
  14. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/src/pactkit_opencode.egg-info/requires.txt +0 -0
  15. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/src/pactkit_opencode.egg-info/top_level.txt +0 -0
  16. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/tests/test_deploy_opencode_parity.py +0 -0
  17. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/tests/test_story069_opencode_format.py +0 -0
  18. {pactkit_opencode-2.9.1 → pactkit_opencode-2.9.2}/tests/test_story070_opencode_compliance.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pactkit-opencode
3
- Version: 2.9.1
3
+ Version: 2.9.2
4
4
  Summary: PactKit adapter for OpenCode IDE
5
5
  License-Expression: MIT
6
6
  Requires-Python: >=3.10
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pactkit-opencode"
7
- version = "2.9.1"
7
+ version = "2.9.2"
8
8
  description = "PactKit adapter for OpenCode IDE"
9
9
  requires-python = ">=3.10"
10
10
  license = "MIT"
@@ -113,7 +113,7 @@ class OpenCodeDeployer(DeployerBase):
113
113
  if replaced != content:
114
114
  atomic_write(cmd_md, replaced)
115
115
 
116
- n_rules = _deploy_rules(opencode_root, enabled_rules)
116
+ n_rules = _deploy_rules(opencode_root, enabled_rules, profile=self.profile)
117
117
  self._deploy_agents_md_inline(opencode_root)
118
118
 
119
119
  providers = self._load_opencode_providers(opencode_root)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pactkit-opencode
3
- Version: 2.9.1
3
+ Version: 2.9.2
4
4
  Summary: PactKit adapter for OpenCode IDE
5
5
  License-Expression: MIT
6
6
  Requires-Python: >=3.10
@@ -60,18 +60,35 @@ class TestR3ProjectInitOpencodeDetection:
60
60
  """R3: /project-init playbook must detect OpenCode environment."""
61
61
 
62
62
  def test_project_init_contains_opencode_detection(self):
63
- """project-init.md contains OpenCode environment detection instructions."""
63
+ """project-init.md rendered for OpenCode contains 'OpenCode' and 'opencode'.
64
+
65
+ After STORY-slim-074 DIP refactor, the raw template uses {DISPLAY_NAME} /
66
+ {FORMAT_NAME} placeholders. The rendered output (via _render_prompt) is
67
+ what gets deployed and must contain the format-specific strings.
68
+ """
69
+ from pactkit.generators.deployer import _render_prompt
70
+ from pactkit.profiles import get_profile
64
71
  from pactkit.prompts.commands import COMMANDS_CONTENT
65
72
 
66
- content = COMMANDS_CONTENT["project-init.md"]
73
+ profile = get_profile("opencode")
74
+ content = _render_prompt(COMMANDS_CONTENT["project-init.md"], profile)
67
75
  assert "opencode" in content.lower() or "OpenCode" in content
68
76
 
69
77
  def test_project_init_contains_opencode_json_generation(self):
70
- """project-init.md contains opencode.json generation instructions."""
78
+ """project-init.md template references format config via {PACTKIT_YAML} placeholder.
79
+
80
+ After STORY-slim-074 DIP refactor, opencode-specific paths are expressed as
81
+ template variables ({PACTKIT_YAML}, {FORMAT_NAME}) rather than hardcoded strings.
82
+ The rendered output for opencode will contain '.opencode/pactkit.yaml'.
83
+ """
84
+ from pactkit.generators.deployer import _render_prompt
85
+ from pactkit.profiles import get_profile
71
86
  from pactkit.prompts.commands import COMMANDS_CONTENT
72
87
 
73
- content = COMMANDS_CONTENT["project-init.md"]
74
- assert "opencode.json" in content
88
+ profile = get_profile("opencode")
89
+ content = _render_prompt(COMMANDS_CONTENT["project-init.md"], profile)
90
+ # {PACTKIT_YAML} renders to '.opencode/pactkit.yaml' for opencode format
91
+ assert ".opencode/pactkit.yaml" in content or "pactkit.yaml" in content
75
92
 
76
93
 
77
94
  # ===========================================================================
@@ -91,16 +91,25 @@ class TestAC3PreserveFields:
91
91
 
92
92
 
93
93
  class TestAC4PlaybookPactkitYaml:
94
- """AC4: project-init playbook explains pactkit.yaml stays in .claude/."""
94
+ """AC4: project-init playbook explains pactkit.yaml stays in .claude/ (classic) or .opencode/ (OpenCode)."""
95
95
 
96
96
  def test_playbook_mentions_pactkit_yaml_location(self):
97
- """project-init playbook references pactkit.yaml in .claude/ context."""
97
+ """project-init playbook rendered for classic format references pactkit.yaml in .claude/.
98
+
99
+ After STORY-slim-074 DIP refactor, config paths are expressed as {PACTKIT_YAML} and
100
+ {PROJECT_CONFIG_DIR} template variables. The raw template always contains 'pactkit.yaml'
101
+ (as part of the {PACTKIT_YAML} placeholder), and the rendered classic output contains '.claude'.
102
+ """
103
+ from pactkit.generators.deployer import _render_prompt
104
+ from pactkit.profiles import get_profile
98
105
  from pactkit.prompts import COMMANDS_CONTENT
99
106
 
100
- init_content = COMMANDS_CONTENT["project-init.md"]
101
- assert "pactkit.yaml" in init_content
102
- # Should mention it stays in .claude/ not .opencode/
103
- assert ".claude" in init_content
107
+ raw_content = COMMANDS_CONTENT["project-init.md"]
108
+ # Raw template always references pactkit.yaml via the {PACTKIT_YAML} variable name
109
+ assert "pactkit.yaml" in raw_content
110
+ # Rendered for classic: {PROJECT_CONFIG_DIR} → '.claude', {PACTKIT_YAML} → '.claude/pactkit.yaml'
111
+ classic_content = _render_prompt(raw_content, get_profile("classic"))
112
+ assert ".claude" in classic_content
104
113
 
105
114
 
106
115
  # ===========================================================================
@@ -127,16 +127,26 @@ class TestAC3ClassicNoModel:
127
127
 
128
128
 
129
129
  class TestAC4InitConditional:
130
- """AC4: project-init has conditional CLAUDE.md vs AGENTS.md."""
130
+ """AC4: project-init rendered per-format references the correct instructions file."""
131
131
 
132
132
  def test_init_has_conditional(self):
133
- """project-init playbook has OpenCode conditional for CLAUDE.md."""
133
+ """project-init playbook rendered for OpenCode contains 'OpenCode' and 'AGENTS.md'.
134
+
135
+ After STORY-slim-074 DIP refactor, the raw template uses {DISPLAY_NAME} and
136
+ {INSTRUCTIONS_FILE} placeholders instead of hardcoded format-specific strings.
137
+ _render_prompt() injects the correct values at deploy time.
138
+ """
139
+ from pactkit.generators.deployer import _render_prompt
140
+ from pactkit.profiles import get_profile
134
141
  from pactkit.prompts import COMMANDS_CONTENT
135
142
 
136
- init_content = COMMANDS_CONTENT["project-init.md"]
143
+ profile = get_profile("opencode")
144
+ init_content = _render_prompt(COMMANDS_CONTENT["project-init.md"], profile)
137
145
  assert "OpenCode" in init_content
138
146
  assert "AGENTS.md" in init_content
139
- assert "Claude Code" in init_content or ".claude/" in init_content
147
+ # Rendered for classic: {DISPLAY_NAME} → 'Claude Code', {PROJECT_CONFIG_DIR} '.claude'
148
+ classic_content = _render_prompt(COMMANDS_CONTENT["project-init.md"], get_profile("classic"))
149
+ assert "Claude Code" in classic_content or ".claude" in classic_content
140
150
 
141
151
 
142
152
  # ===========================================================================