diff --git a/PROGRESS.md b/PROGRESS.md index 804944a..ffa2235 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -1,3 +1,15 @@ +# Recovered private KICPA registry draft + +- Preserved seven unpublished registrations on `codex/integrate-private-kicpa-skills` + and combined them with current main (50 registry entries, including Darty). +- Not ready to merge or publish: the draft adds private access requirements to + `kicpa`, contrary to the selected separate private-profile design. Follow the + [private-source plan](plans/sjskills-private-github-sources.md) before rollout. +- Targeted Go contract tests and 12 Node registry/wrapper tests pass. Bounded + review and documentation alignment completed; private fetching remains unverified. +- Full original checkout recovery remains in Git stash commit + `038118178cce4759e3acebf854f19b36723488fc`, including superseded hook drafts. + # sjskills maintenance plugin delivery - User authorized automatic CLI updates and configured skill sync on every diff --git a/docs/skill-registry.md b/docs/skill-registry.md index 8d2b6bf..086238a 100644 --- a/docs/skill-registry.md +++ b/docs/skill-registry.md @@ -40,11 +40,22 @@ Each `skills` entry records: A `repository` source names the published GitHub `skills/` catalog. An `external` source names a deliberately tracked upstream or a manual -boundary. Skills CLI-managed sources must be public Git shorthand +boundary. Skills CLI-managed sources must be Git shorthand (`owner/repo[/path]`) or credential-free HTTPS. Local paths, embedded credentials, URL query strings, npm specifiers, and other schemes are rejected for that manager. +Private repositories use the same source records; URL validation does not check +repository visibility. The `kicpa` profile includes skills from the private +`sjunepark/kicpa` catalog, so materializing that profile requires repository +access. Authentication must work non-interactively in the isolated staging +environment. Ordinary inherited environment variables, including Git +credential-helper configuration, are preserved, but home and XDG configuration +paths are replaced. Login or helper configuration stored only under the original +home is therefore not automatically available. `sjskills` does not provision +credentials; keep secrets out of registry URLs and verify access with a plan +before applying. + `manual` entries remain externally owned. `workflow` entries are provisioned by the named project workflow. `none` entries are catalog-only: they are classified for discovery but never selected by a desired set. diff --git a/internal/sjskills/contracts_test.go b/internal/sjskills/contracts_test.go index a0f4886..da97600 100644 --- a/internal/sjskills/contracts_test.go +++ b/internal/sjskills/contracts_test.go @@ -49,8 +49,8 @@ func TestCanonicalRegistryAndProfiles(t *testing.T) { if registry.Version != RegistryVersion { t.Fatalf("version = %d", registry.Version) } - if len(registry.Skills) != 43 { - t.Fatalf("skills = %d, want 43", len(registry.Skills)) + if len(registry.Skills) != 50 { + t.Fatalf("skills = %d, want 50", len(registry.Skills)) } global, err := ResolveGlobal(registry) if err != nil { @@ -155,10 +155,15 @@ func TestKicpaAndManagerBoundaries(t *testing.T) { if err != nil { t.Fatal(err) } - if len(state.Skills) != 5 || state.Skills[0].Name != "darty" || state.Skills[1].Name != "kasb" || state.Skills[2].Name != "kisnet-ytm" || state.Skills[3].Name != "krx-cli" || state.Skills[4].Name != "windows-cleanup" { + wantNames := []string{"cagr-research", "crowe-design", "darty", "kasb", "kisnet-ytm", "krx-cli", "organize-engagement-files", "render-markdown-pdf", "sync-rfi", "tf-basic-data-prep", "wacc-peer-screening", "windows-cleanup"} + var gotNames []string + for _, skill := range state.Skills { + gotNames = append(gotNames, skill.Name) + } + if !slices.Equal(gotNames, wantNames) { t.Fatalf("kicpa = %#v", state.Skills) } - if darty := state.Skills[0]; darty.Source != "https://github.com/cpaikr/darty/tree/main/skill/darty" || darty.Manager != ManagerSkillsCLI || darty.Mode != ModeCopy { + if darty := state.Skills[2]; darty.Source != "https://github.com/cpaikr/darty/tree/main/skill/darty" || darty.Manager != ManagerSkillsCLI || darty.Mode != ModeCopy { t.Fatalf("darty source and installation policy = %#v", darty) } for _, skill := range state.Skills { diff --git a/internal/sjskills/data/registry-v4.json b/internal/sjskills/data/registry-v4.json index b6aed0a..445af6c 100644 --- a/internal/sjskills/data/registry-v4.json +++ b/internal/sjskills/data/registry-v4.json @@ -49,10 +49,17 @@ }, "kicpa": { "skills": [ + "cagr-research", + "crowe-design", "darty", "kasb", "kisnet-ytm", "krx-cli", + "organize-engagement-files", + "render-markdown-pdf", + "sync-rfi", + "tf-basic-data-prep", + "wacc-peer-screening", "windows-cleanup" ] }, @@ -88,6 +95,10 @@ "kind": "external", "location": "https://github.com/cpaikr/kasb/tree/main/skills/kasb" }, + "kicpa": { + "kind": "external", + "location": "https://github.com/sjunepark/kicpa/tree/main/skills" + }, "kisnet-ytm": { "kind": "external", "location": "https://github.com/cpaikr/ytm/tree/main/skills/kisnet-ytm" @@ -153,6 +164,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "cagr-research", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "clarify", "source": "agent-scripts", @@ -207,6 +224,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "crowe-design", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "darty", "source": "darty", @@ -316,6 +339,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "organize-engagement-files", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "pdf-to-markdown", "source": "agent-scripts", @@ -334,6 +363,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "render-markdown-pdf", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "review-campaign", "source": "agent-scripts", @@ -357,12 +392,24 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "sync-rfi", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "teach", "source": "agent-scripts", "manager": "skills-cli", "mode": "copy" }, + { + "name": "tf-basic-data-prep", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "ui-lab", "source": "agent-scripts", @@ -375,6 +422,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "wacc-peer-screening", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "windows-cleanup", "source": "agent-scripts", diff --git a/plans/sjskills-private-github-sources.md b/plans/sjskills-private-github-sources.md index 6bb2766..187c0aa 100644 --- a/plans/sjskills-private-github-sources.md +++ b/plans/sjskills-private-github-sources.md @@ -32,9 +32,11 @@ Repository evidence was inspected at `076a487`: - [Status](../internal/sjskills/status.go) shares upstream evidence by fetch inputs. [Provenance](../internal/sjskills/provenance.go) records source and content ownership; temporary staging paths must never become source identity. -- No actual private repository URL or skill list has been supplied. A real - `kicpa-private` catalog entry cannot yet be populated. This is an enrollment - prerequisite, not a blocker to implementing and testing the capability. +- Cleanup on 2026-09-10 recovered seven registrations from the private + `sjunepark/kicpa` catalog on `codex/integrate-private-kicpa-skills`. That draft + currently extends `kicpa` and is not ready to merge: move the registrations + into the selected `kicpa-private` design after authenticated fetching is + implemented and verified. Recovery did not validate private materialization. ## Next action diff --git a/skill-registry.json b/skill-registry.json index b6aed0a..445af6c 100644 --- a/skill-registry.json +++ b/skill-registry.json @@ -49,10 +49,17 @@ }, "kicpa": { "skills": [ + "cagr-research", + "crowe-design", "darty", "kasb", "kisnet-ytm", "krx-cli", + "organize-engagement-files", + "render-markdown-pdf", + "sync-rfi", + "tf-basic-data-prep", + "wacc-peer-screening", "windows-cleanup" ] }, @@ -88,6 +95,10 @@ "kind": "external", "location": "https://github.com/cpaikr/kasb/tree/main/skills/kasb" }, + "kicpa": { + "kind": "external", + "location": "https://github.com/sjunepark/kicpa/tree/main/skills" + }, "kisnet-ytm": { "kind": "external", "location": "https://github.com/cpaikr/ytm/tree/main/skills/kisnet-ytm" @@ -153,6 +164,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "cagr-research", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "clarify", "source": "agent-scripts", @@ -207,6 +224,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "crowe-design", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "darty", "source": "darty", @@ -316,6 +339,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "organize-engagement-files", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "pdf-to-markdown", "source": "agent-scripts", @@ -334,6 +363,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "render-markdown-pdf", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "review-campaign", "source": "agent-scripts", @@ -357,12 +392,24 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "sync-rfi", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "teach", "source": "agent-scripts", "manager": "skills-cli", "mode": "copy" }, + { + "name": "tf-basic-data-prep", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "ui-lab", "source": "agent-scripts", @@ -375,6 +422,12 @@ "manager": "skills-cli", "mode": "copy" }, + { + "name": "wacc-peer-screening", + "source": "kicpa", + "manager": "skills-cli", + "mode": "copy" + }, { "name": "windows-cleanup", "source": "agent-scripts",