Skip to content

Commit 8c2ff5e

Browse files
authored
Merge pull request #22 from gaelic-ghost/release/socket-roadmap-cleanup
release: publish socket v6.0.12 roadmap cleanup
2 parents 50003d2 + 8f5de74 commit 8c2ff5e

29 files changed

Lines changed: 84 additions & 35 deletions

File tree

ROADMAP.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,57 +22,64 @@
2222

2323
## Milestone Progress
2424

25-
- Milestone 2: subtree workflow hardening - In Progress
26-
- Milestone 3: release and sync discipline - In Progress
25+
- Milestone 2: subtree workflow hardening - Completed
26+
- Milestone 3: release and sync discipline - Completed
2727

2828
## Milestone 2: subtree workflow hardening
2929

3030
### Status
3131

32-
In Progress
32+
Completed
3333

3434
### Scope
3535

36-
- [ ] Tighten the documented subtree add, pull, and push workflows without changing the child-repo ownership model.
36+
- [x] Tighten the documented subtree add, pull, and push workflows without changing the child-repo ownership model.
3737
- [x] Define `standard` and `subtrees` release modes so umbrella releases follow the `maintain-project-repo` protected-main shape with subtree-specific accounting.
3838

3939
### Tickets
4040

4141
- [x] Review subtree workflow docs against the current import and publish path.
42+
- [x] Add a documented audit pass for detecting stale child packaging paths in the root marketplace.
43+
- [x] Add a superproject-level checklist for removing public child repos that should no longer be imported.
4244

4345
### Exit Criteria
4446

4547
- [x] Root maintainer workflow docs describe the actual subtree sync path without stale or duplicate guidance.
4648

49+
Completed Milestone 2 by documenting the current subtree add, pull, and push paths, preserving the child-specific `apple-dev-skills` push-capable and `SpeakSwiftlyServer` pull-only rules, and adding explicit marketplace-audit and public-child-removal checklists to the maintainer workflow.
50+
4751
## Milestone 3: release and sync discipline
4852

4953
### Status
5054

51-
In Progress
55+
Completed
5256

5357
### Scope
5458

55-
- [ ] Keep root release and synchronization guidance explicit when superproject-level changes ship.
59+
- [x] Keep root release and synchronization guidance explicit when superproject-level changes ship.
5660

5761
### Tickets
5862

5963
- [x] Document the expected root release and sync rhythm once the current subtree migration experiment stabilizes.
60-
- [ ] Keep the root docs aligned with the current child packaging model during coordinated release-prep passes.
64+
- [x] Keep the root docs aligned with the current child packaging model during coordinated release-prep passes.
6165
- [x] Make coordinated semantic-version bumps across `socket` and the maintained child manifests explicit instead of relying on ad hoc release notes.
6266

6367
### Exit Criteria
6468

6569
- [x] Superproject release guidance is explicit enough that root changes can be shipped without improvising process each time.
6670
- [x] Root docs still describe the live packaging and versioning model after a coordinated release-prep pass.
6771

72+
Completed Milestone 3 by aligning the release-mode docs, subtree sync rules, shared-version workflow, and roadmap backlog cleanup around the current mixed monorepo model.
73+
6874
## Backlog Candidates
6975

70-
- [ ] Add a documented audit pass for detecting stale child packaging paths in the root marketplace.
71-
- [ ] Add a superproject-level checklist for removing public child repos that should no longer be imported.
76+
No active backlog candidates are currently tracked here. Add new candidates only when they represent real future work that is not already covered by the maintainer docs or milestone history.
7277

7378
## History
7479

80+
- Completed the subtree workflow and release-discipline milestones by adding the root marketplace audit pass, the public child plugin removal checklist, and a tighter roadmap state that no longer carries stale backlog items as active work.
7581
- Added explicit `standard` and `subtrees` release-mode guidance, including the pull-only `SpeakSwiftlyServer` rule for `socket` subtree sync.
82+
- Published `apple-dev-skills` `v6.0.11` after adding direct regression coverage for SwiftPM-generated `.swiftpm/xcode/package.xcworkspace` classification and synced the released child state back into `socket`.
7683
- Prepared the shared `v6.0.11` patch release after fixing `productivity-skills:maintain-project-repo` release-helper regressions for initial PR check discovery and approval-only review handling.
7784
- Added the placeholder `plugins/spotify` child repository, wired it into the root marketplace, and kept the superproject docs honest about that new monorepo-owned plugin surface.
7885
- Converted the former standalone `cardhop-mcp` checkout into the monorepo-owned `plugins/cardhop-app` child, added first-pass Codex plugin metadata plus a bundled MCP config, and recorded the new child as a normal `socket` marketplace entry.

docs/maintainers/subtree-workflow.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,33 @@ Use these rules:
138138
- do not leave stale marketplace entries behind after a packaging move or subtree removal
139139
- keep one surviving plugin identity for each real child plugin
140140

141+
### Marketplace Audit Pass
142+
143+
Run this audit whenever a child plugin is added, removed, moved, renamed, converted from subtree-managed to monorepo-owned, or changes its packaged plugin root:
144+
145+
1. List every marketplace entry in `.agents/plugins/marketplace.json`.
146+
2. For each `source.path`, verify the directory exists under `plugins/` and exposes `.codex-plugin/plugin.json` at the packaged plugin root.
147+
3. Compare the marketplace entries against the real child directories under `plugins/` and confirm every public child plugin that ships `.codex-plugin/plugin.json` is listed.
148+
4. Open each changed child repo's README or maintainer docs and confirm the child still treats the marketplace path as its installable plugin root.
149+
5. Run `uv run scripts/validate_socket_metadata.py`.
150+
6. Update `README.md`, this maintainer workflow, and `ROADMAP.md` when the audit finds a packaging-model change rather than only a metadata typo.
151+
152+
The audit is about the installable plugin roots that Codex can actually see. Do not rewrite marketplace paths to follow an invented uniform layout when the child repo still packages from a different root.
153+
154+
### Removing A Public Child Plugin
155+
156+
Use this checklist before removing a public child repository from `socket` or from the root marketplace:
157+
158+
1. Identify whether the child is monorepo-owned, subtree-managed with push-back, or pull-only.
159+
2. Confirm the child history is preserved where it belongs before deleting the directory, marketplace entry, branch, worktree, remote branch, or archive ref.
160+
3. Remove the child directory only when the source repo is no longer meant to be imported here, or when the child has been explicitly moved elsewhere.
161+
4. Remove the marketplace entry in the same commit as the directory removal when the plugin is no longer installable from `socket`.
162+
5. Update `README.md`, `ROADMAP.md`, and any maintainer docs that listed the child as active.
163+
6. Run `uv run scripts/validate_socket_metadata.py`.
164+
7. Account for local branches not contained by `main` before cleanup.
165+
166+
If the child is `SpeakSwiftlyServer`, do not use this checklist as permission to delete or rewrite the standalone live-service repository. That repo's standalone release, validation, and live-refresh path stays outside ordinary `socket` cleanup.
167+
141168
## Release Flow
142169

143170
For full release sequencing, use [`release-modes.md`](./release-modes.md). In short, `standard` is the normal `socket` release mode and `subtrees` is the normal mode plus explicit subtree accounting.

plugins/agent-plugin-skills/.codex-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "agent-plugin-skills",
3-
"version": "6.0.11",
3+
"version": "6.0.12",
44
"description": "Installable maintainer skills for skills-export repositories.",
55
"author": {
66
"name": "Gale",

plugins/agent-plugin-skills/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "agent-plugin-skills-maintenance"
3-
version = "6.0.11"
3+
version = "6.0.12"
44
description = "Maintainer-only Python tooling baseline for agent-plugin-skills."
55
requires-python = ">=3.11"
66
dependencies = []

plugins/agent-plugin-skills/uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/apple-dev-skills/.codex-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "apple-dev-skills",
3-
"version": "6.0.11",
3+
"version": "6.0.12",
44
"description": "Apple development workflows for Codex and Claude Code, including SwiftUI architecture and DocC authoring guidance.",
55
"author": {
66
"name": "Gale",

plugins/apple-dev-skills/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "apple-dev-skills-maintainer"
3-
version = "6.0.11"
3+
version = "6.0.12"
44
description = "Maintainer tooling for the apple-dev-skills repository"
55
requires-python = ">=3.9"
66
dependencies = []

plugins/apple-dev-skills/tests/test_swift_package_guidance_sync_workflow.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,21 @@ def test_ignores_generated_xcode_markers_in_swiftpm_state(self) -> None:
7777
self.assertIsNone(payload["detected_state"]["project"])
7878
self.assertIsNone(payload["detected_state"]["workspace"])
7979

80+
def test_ignores_swiftpm_generated_xcode_workspace(self) -> None:
81+
with tempfile.TemporaryDirectory() as tmpdir:
82+
repo_root = Path(tmpdir)
83+
(repo_root / "Package.swift").write_text("// swift-tools-version: 6.0\n", encoding="utf-8")
84+
(repo_root / ".swiftpm/xcode/package.xcworkspace").mkdir(parents=True)
85+
86+
code, payload = self.run_script("--repo-root", tmpdir, "--dry-run")
87+
88+
self.assertEqual(code, 0)
89+
self.assertEqual(payload["status"], "success")
90+
self.assertFalse(payload["detected_state"]["is_ambiguous_repo"])
91+
self.assertTrue(payload["detected_state"]["is_package_repo"])
92+
self.assertFalse(payload["detected_state"]["is_xcode_repo"])
93+
self.assertIsNone(payload["detected_state"]["workspace"])
94+
8095
def test_dry_run_plans_agents_creation(self) -> None:
8196
with tempfile.TemporaryDirectory() as tmpdir:
8297
Path(tmpdir, "Package.swift").write_text("// swift-tools-version: 6.0\n", encoding="utf-8")

plugins/apple-dev-skills/uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/cardhop-app/.codex-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cardhop-app",
3-
"version": "6.0.11",
3+
"version": "6.0.12",
44
"description": "Cardhop.app workflow guidance plus a bundled local MCP server for contact capture and updates on macOS.",
55
"author": {
66
"name": "Gale",

0 commit comments

Comments
 (0)