Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions PROGRESS.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
13 changes: 12 additions & 1 deletion docs/skill-registry.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
13 changes: 9 additions & 4 deletions internal/sjskills/contracts_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
53 changes: 53 additions & 0 deletions internal/sjskills/data/registry-v4.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
]
},
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -153,6 +164,12 @@
"manager": "skills-cli",
"mode": "copy"
},
{
"name": "cagr-research",
"source": "kicpa",
"manager": "skills-cli",
"mode": "copy"
},
{
"name": "clarify",
"source": "agent-scripts",
Expand Down Expand Up @@ -207,6 +224,12 @@
"manager": "skills-cli",
"mode": "copy"
},
{
"name": "crowe-design",
"source": "kicpa",
"manager": "skills-cli",
"mode": "copy"
},
{
"name": "darty",
"source": "darty",
Expand Down Expand Up @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand Down
8 changes: 5 additions & 3 deletions plans/sjskills-private-github-sources.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
53 changes: 53 additions & 0 deletions skill-registry.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
]
},
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -153,6 +164,12 @@
"manager": "skills-cli",
"mode": "copy"
},
{
"name": "cagr-research",
"source": "kicpa",
"manager": "skills-cli",
"mode": "copy"
},
{
"name": "clarify",
"source": "agent-scripts",
Expand Down Expand Up @@ -207,6 +224,12 @@
"manager": "skills-cli",
"mode": "copy"
},
{
"name": "crowe-design",
"source": "kicpa",
"manager": "skills-cli",
"mode": "copy"
},
{
"name": "darty",
"source": "darty",
Expand Down Expand Up @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand Down