SkillPilot Claude personal marketplace release
This runbook governs the repository-backed personal marketplace for
skillpilot-coach-v1. It distributes one exact Claude plugin candidate; the
marketplace mechanism itself does not alter that candidate. It is not an
Anthropic-curated or Anthropic-verified listing. Version 1.1.10 is published in
the public personal Marketplace; its exact source, package and repository have
been independently verified. The website download serves the same 1.1.10
archive. Full real-client acceptance remains
pending; repository publication does not establish installation or
synchronization in every account.
Earlier published packages and their evidence remain immutable history.
1.1.10 repository publication
On 23 September 2026, the Product Owner reported that the coach exposed
private deliberation in a Voice conversation and reconsidered a goal closure
after the learner accepted its offer without adding new learning information.
The 1.1.10 successor was prepared locally with an instruction and Claude
connector correction. The coach now decides privately from the learner's work,
persists only demonstrated success before reporting it, and offers questions
or continuation after feedback. A failed exam still receives its full evaluation
and solution discussion without storing a failure; the same exam remains
repeatable. The exact 1.1.9 release dossier is retained under
release/history/1.1.9/; its published archive and Marketplace source remain
unchanged. The 1.1.10 exact-client regression plan is
ai/claude/plugin/skillpilot-coach-v1/release/1.1.10-incident-regression-plan.md.
Web and Android Voice client acceptance remain pending.
The website index and downloaded bytes now match the 1.1.10 archive at 41,166
bytes and SHA-256
4304cb825942db3fa2c7e6a352481794a523ea21afba0e6db71f6314fddee618.
The credential-free production support synthetic passed all eight checks on
23 September 2026. Neither check proves a real-client learning flow or an
installed Marketplace update. The local Marketplace export pins committed
SkillPilot source
revision 8dc0fa9b8fad65db28f2be25a165dd4a72a36bce and plugin-source
tree digest 16594707fbeca128fa8544f5da70486c6286702760e320b41c6334d7df1e4cb2.
That revision is available from enpasos/skillpilot. The corrected twelve-file
Marketplace export has tree SHA-256
ac46ca37e788ae137c7c2465ec2be53564b41e3de5f26d010ccc2a06307ed780.
Source CI
passed. Marketplace PR #13
passed its final-head validation
and was squash-merged with a head-SHA guard. The
main-branch validation
passed. verify-repository then checked
the public default branch, exact twelve-file inventory, rebuilt archive, both
strict Claude CLI validations and installation from its HTTPS URL in an
isolated profile. It reported revision
b5c1b7579eefe087f55872402642e962790adc9a with the same tree hash.
Only the repository evidence is pass; clean-account installation, update,
real-client learning flow and a new first-party guide decision remain pending.
1.1.9 publication for issue #55
On 23 September 2026, the Product Owner confirmed green CI and deployment and
requested Marketplace publication. The seven-file 1.1.9 plugin archive is
reproducible at
39,441 bytes, SHA-256
b53a1100fff6d84ee66c12f084a8ff359847496fbf75c8a951ee4c9a0230c3c5.
The plugin adds references/task-closure.md; its Marketplace export has twelve
files. The published 1.1.8 dossier is retained byte-identically in
release/history/1.1.8/. The deployed website index and archive match 1.1.9.
Marketplace PR #11
published the exact export after
final-head validation.
PR #12
then pinned its validation workflow to the reviewed SkillPilot source commit
54c7d04cc52c4844dfb5c5d7ddaf94dae6a574ea. This prevents later
release-evidence edits from changing the workflow's source hash. Both PRs were
squash-merged with exact head-SHA guards. The
final PR validation
and main-branch validation
passed. verify-repository then checked the public default branch, all twelve
files, the rebuilt archive, both strict Claude validations and installation
from the public HTTPS Marketplace in an isolated profile. The remote head was
stable throughout verification.
- Published revision:
c16ce0f1ff97cd8d428fdc83a9243c9db2022301. - Verification recorded:
2026-09-23T05:57:47.000Z. - Export tree SHA-256:
8862c32e873355d401e3e9a6073c8db75625cfcae9c708a312dbc1801945ae58. - Plugin: 1.1.9, 39,441 bytes, SHA-256
b53a1100fff6d84ee66c12f084a8ff359847496fbf75c8a951ee4c9a0230c3c5.
Only public-repository-default-branch is recorded as pass.
Clean-account installation, Marketplace update and real-client learning-flow
acceptance remain pending. No new first-party guide decision was made for 1.1.9.
The 1.1.9 Marketplace validation workflow checks a pinned SHA-256 of the full
canonical Claude plugin source tree immediately after checking out main and
before loading its package builder. It then checks the exact archive digest,
closed export inventory, source parity and both strict Claude validations.
This content pin keeps the Marketplace workflow bound to the reviewed source.
If the canonical source tree changes, external Marketplace validation fails
until the candidate is reviewed and the source digest is deliberately updated.
1.1.8 publication and automatic backend download
On 21 September 2026, the Product Owner confirmed green CI and backend deployment
and explicitly requested Marketplace publication of 1.1.8. The exact canonical
source is a8c2869632f5d9be04d64c4eb7f365bc70ad4cae
(source CI).
Marketplace PR #10 was independently checked against the closed export inventory, passed final-head validation and was squash-merged with an exact head-SHA guard. Two low-severity review notes were addressed without rebinding the tested package: the public README clarifies that the packaged setup text is a pre-publication snapshot, and the existing Verified Recall wording was reviewed in context. The protected package bytes remain identical to the green canonical source.
Main-branch validation
passed. verify-repository then cloned the actual public default branch, verified
all eleven files, ran both strict Claude validations and installed 1.1.8 from the
public HTTPS Marketplace in an isolated Claude profile. The remote head was
stable throughout verification.
- Published revision:
be68c85b2ac0f404f26178cc4810c5f8a53feba6. - Verification recorded:
2026-09-21T16:03:34.000Z. - Export tree SHA-256:
1ec4a4a7d5e568319dc0cf545a8891ee56869eb7fc72f5aab2a0c8011aa59dd7. - Plugin: 1.1.8, 35,909 bytes, SHA-256
1603c79c06b9fa39f2b57033c65d4b1d5748cb048b01271f72b5708652e7525b.
Only repository-publication evidence is marked pass; exact-client installation
and update acceptance remain pending. The Product Owner also requested that the
existing website guide display the actual download version and that each backend
rollout automatically carry the matching plugin file and index. This approves the
existing controlled-beta guide for this exact published candidate; it does not
claim successful updates in all Claude accounts or broader public acceptance.
The website index and actual downloadable bytes remain one source of truth;
there is no separate runtime GitHub version lookup.
Automatic alignment on backend rollout
processResources now runs generateClaudePluginPublication. It builds the
current plugin reproducibly and checks its version, SHA-256 and byte length
against the release dossier before packaging the archive and matching index
together. The build includes unchanged historical archives, but replaces the
historical source index with its generated index. Normal builds do not modify
tracked release files. /plugins already reads the served index for every
version label and the download link; no frontend version bump is needed.
After this automation is committed, passes CI and is deployed once, subsequent authorized backend deployments carry the matching plugin automatically. There is no separate manual download-index promotion step. Package versioning and review remain required when plugin content changes; backend packaging does not publish to the Git Marketplace or prove an update in a user's Claude account.
scripts/deploy.sh verifies the generated resources before restart and compares
the public index and archive with that exact build after readiness. For a local
default build, the equivalent resource check is:
cd backend
./gradlew processResources
node ../scripts/claude_direct_install_beta_release.mjs verify \
--publication-root build/resources/main/claude-plugin-publication
Use the matching configured build directory when SKILLPILOT_BACKEND_BUILD_DIR
is set. The ordinary source-only verify still checks historical integrity; it
does not assert that a newly deployed backend serves that old index.
Local verification passed: deterministic generation and immutable-version
regressions, generated classpath HTTP/download tests, processResources and
bootJar, and German/English desktop/mobile browser checks using the generated
1.1.8 archive. TypeScript, focused lint, documentation links and independent
review passed. The read-only production monitor accepts only the exact recorded
old publication or the exact locally reproduced current build during rollout;
unknown metadata and modified archives fail. All eight live checks passed before
deployment of this automation, with the download still at 1.1.7.
Completed 1.1.7 Marketplace publication
On 19 September 2026, the Product Owner confirmed green CI and production
deployment, then explicitly requested publication of the current Claude plugin.
The Marketplace was bound to the green SkillPilot source commit
80c8f3a3e94e5c7d43c183d18bacb7ce38bb4117
(source CI).
The plugin quotes the shared DAY/WEEK status per subject verbatim and announces
the active learning goal separately when teaching begins.
PR #9 passed the required final-head validation and was squash-merged with an exact PR-head SHA guard. An independent review confirmed the closed file inventory, canonical package parity and honest client-acceptance claims. The automatic review recommended approval with two wording notes: the Marketplace README was clarified; the packaged README's historical wording about daily quotas was retained to preserve the exact tested candidate. That documentation wording can be aligned in a later canonical source update; the current coaching instructions already use DAY/WEEK periods.
The main-branch validation
also passed. verifyPublishedClaudeMarketplace, the implementation used by
verify-repository, then cloned the actual public default branch, compared all
twelve files, ran both strict Claude validations and installed the exact plugin
from the public HTTPS repository in an isolated Claude profile. The remote HEAD
remained unchanged throughout verification.
- Published revision:
c06583c1a94e486ed5afe25cafe41ac8e16677b8. - Verified at:
2026-09-19T20:49:07.938Z. - Twelve-file export tree SHA-256:
5ea0bbe9ba5776154155cfb2d9b390a1aaac5a672261172855eb382fc58dccca. - Plugin: 1.1.7, 34,586 bytes, SHA-256
a7bb73da48087f44aeb1155b848768efc79efa71c55c9a2278c8e0cc4901d26b.
Twenty-six scoped Marketplace tests and the local installation smoke passed. The credential-free production synthetic passed before and after publication, including the separately served 1.1.6 download and the connector's OAuth metadata and unauthenticated challenge. No additional backend deployment or website download/guide promotion was performed by this publication.
At publication, only public-repository-default-branch was recorded as pass,
giving published_pending_acceptance; real-account installation/update checks
and the new candidate's guide decision were pending. The Product Owner later
confirmed seeing 1.1.7 in Claude and successfully starting with the plugin.
This is a partial host observation; status fidelity and the complete learning
flow remain to be checked. The subsequent website correction is recorded below.
1.1.7 website version and download alignment
After confirming the installed 1.1.7 plugin and a successful start, the Product
Owner reported that skillpilot.com/plugins still advertised 1.1.6 and supplied
a screenshot. The public publication index independently confirmed 1.1.6.
The requested correction aligns the existing installation guide, version badge,
version comparison and downloadable file with the published Marketplace version.
The existing Marketplace-first guide and file fallback are now bound to exactly
1.1.7, package SHA-256
a7bb73da48087f44aeb1155b848768efc79efa71c55c9a2278c8e0cc4901d26b,
repository revision c06583c1a94e486ed5afe25cafe41ac8e16677b8 and tree SHA-256
5ea0bbe9ba5776154155cfb2d9b390a1aaac5a672261172855eb382fc58dccca.
The candidate-bound guide decision records this request; previous approvals
and artifacts remain unchanged. The native prepare command adds the exact
34,586-byte artifact and advances the backend's served index. All visible
version labels and the download link continue to derive from that index.
Fifty Marketplace/direct-install tests passed. The publication Unit and browser tests passed for German/English and mobile/desktop, checking the visible 1.1.7 badge, version comparison, Marketplace instructions and actual downloaded bytes against the prepared index. Focused lint and documentation checks passed; all ten earlier plugin archives remain byte-identical. The backend caches its validated publication snapshot per process, so this update requires the normal backend deployment/restart as well as including the new resource files.
This change is prepared locally for the Product Owner's commit and production
deployment. It is not yet a claim that the live website serves 1.1.7. After
deployment, verify-public must confirm both the public index and the exact
immutable download. Full client acceptance remains pending; the observed
version and successful start do not establish every installation/update path
or the coach's verbatim status behavior.
1.1.6 explicit continuation candidate, 14 September 2026
The Product Owner required that a plan guide and prioritize but never prevent explicitly requested learning. The coach continues an active unmastered goal or lets the backend select a reachable open Personal Curriculum target, even with zero daily quota, empty backlog, future plan dates or an exhausted plan. Server capabilities authorize continuation; counts do not prohibit it. Prerequisites, automatic daily stopping and read-only status requests remain enforced. After the daily target, remaining backlog is offered as a pressure-free opportunity to catch up; a pause stays possible without becoming the primary recommendation.
The seven-file published 1.1.5 release dossier is archived byte-identically under
ai/claude/plugin/skillpilot-coach-v1/release/history/1.1.5/ and hash-protected.
During local candidate development, publication, guide and real-client evidence
started pending, while the served index and guide retained their 1.1.5 bindings.
Candidate preparation does not update that index or transfer historical guide
approval. The separate 1.1.6 publication and guide decisions are recorded below.
Use prepare-candidate and verify-candidate below for local work. The ordinary
verify command checks the served registry against its exactly referenced,
hash-protected historical dossier when it still names the previous release.
It does not rebuild that published artifact from successor source. The separate
candidate check still rebuilds current source and verifies exact bytes.
Independent Marketplace publication and download promotion
For 1.1.6, Marketplace CI checks the exact package against the already green
SkillPilot commit 114ff08b29bcb259aaebf6be2a90aef659bcd886. It uses the canonical
builder from that immutable revision, compares the seven package files with
the reviewed source, verifies the candidate's exact archive size and SHA-256,
and compares the extracted archive with the complete plugin directory. Both
strict Claude validations remain required. Extra files, symlinks, changed
package content and incorrect candidate bindings fail closed.
This removes the circular requirement to serve a new website download before
the Marketplace PR can pass. It does not waive download verification: the
public synthetic continues to check the actual served index and its immutable
download, and a later download-index promotion must verify the new public
artifact separately. No previous guide or client approval transfers to 1.1.6.
The Marketplace may be published_pending_acceptance while the served index
and its independently approved guide still reference 1.1.5. This is publication
separation, not a claim that an existing Claude installation has updated.
Completed 1.1.6 Marketplace publication
After the Product Owner confirmed the backend deployment and green CI for
SkillPilot commit 114ff08b29bcb259aaebf6be2a90aef659bcd886, the Marketplace
handoff was completed through
PR #8.
The required PR validation
passed before the SHA-guarded squash merge at 2026-09-14T18:38:41Z.
The main-branch validation
also passed for the published commit.
verify-repository cloned the actual public default branch and proved the
complete exported tree, both strict Claude validations, isolated installation
of the HTTPS Marketplace source and an unchanged remote HEAD:
- Repository revision:
2c009f47630132f6b14492b204c827f43ba21ba0. - Export: exactly twelve files, tree SHA-256
e466966eb72f4470730aff5a5fa6e75f2bff5e6593642a18d89cacea201a5599. - Plugin:
1.1.6, 34,263 bytes, SHA-256439ea142c3933333cb01d7a1051646041d61615089504b22a7d002fb637614ca.
Local validation included 145 scoped Node tests, executable rejection cases for modified packages and workflow bindings, App publication/browser tests, TypeScript and focused lint. The public read-only synthetic passed before and after publication, including the unchanged served 1.1.5 download and connector OAuth discovery/unauthenticated challenge. No additional backend deployment, credential change, learner-data mutation or guide promotion was performed.
At publication, only public-repository-default-branch was recorded as pass,
giving published_pending_acceptance; the guide decision and real-account
installation/update evidence remained pending. The next acceptance step is to
confirm installed version 1.1.6 in Claude and test explicit continuation and
catching up after a fulfilled daily quota in a fresh SkillPilot session.
Guide approval and website download promotion, 14 September 2026
After the Product Owner reported that /plugins still displayed 1.1.5, the
assistant explicitly asked whether website and download should also be updated
to 1.1.6, checked and deployed. The Product Owner replied "ja bitte".
This new candidate-bound decision was recorded at 2026-09-14T18:46:17.000Z.
It authorizes the existing Marketplace-first guide and direct-file fallback
for exactly version 1.1.6, package SHA-256
439ea142c3933333cb01d7a1051646041d61615089504b22a7d002fb637614ca,
published repository revision 2c009f47630132f6b14492b204c827f43ba21ba0
and tree SHA-256
e466966eb72f4470730aff5a5fa6e75f2bff5e6593642a18d89cacea201a5599.
activation.firstPartyGuideDecision is now approved,
marketplaceUiSwitchAllowed=true and firstPartyUiRoute=personal_git_marketplace.
The native direct-install prepare command advances the website index and
stores the exact reproducible 34,263-byte archive without changing any previous
artifact. The page derives its badge, comparison text and download from this
validated index; no separately hardcoded version label is introduced.
This is guide and deployment approval, not account-level acceptance. Both
Marketplace installation/update records and the exact-client direct-install
records remain pending; activation stays published_pending_acceptance and
openPublicBetaReady=false. No plugin payload, credentials, authorization,
session boundaries or learner data are changed. Local preparation is not a
claim of completed production deployment; the public index and exact download
must be verified after the normal deployment succeeds.
1.1.5 instruction consolidation, 12 September 2026
The Product Owner authorized removing overlapping Claude instructions while preserving the coaching semantics, independent regression verification and a complete production and Marketplace rollout after green CI.
The compact Skill owns the common coaching flow. The Verified Recall and exam
procedures move to conditional references; the duplicated coaching-policy.md
is removed from the current package. Its historical bytes remain inside the
immutable 1.1.4 artifact. The current package contains seven allowlisted files
and produces a twelve-file Marketplace tree. The fourteen tools, assessment
criteria, privacy, protected-answer, OAuth, session and progression boundaries
remain unchanged. This instruction cleanup does not reopen prohibited chat
feedback fields or imply host acceptance.
The complete seven-file 1.1.4 release dossier is archived byte-identically under
ai/claude/plugin/skillpilot-coach-v1/release/history/1.1.4/; the release checker
protects its exact hashes. No repository, guide or real-client approval is
inherited by 1.1.5. New evidence started pending. The final instruction content,
immutable artifact and local publication index were validated before rollout.
Production and Marketplace publication followed green CI as recorded below;
only the independently verified repository evidence now passes.
Local verification scope
The previously mandatory Skill plus policy contained 40,643 UTF-8 bytes. The shared 1.1.5 Skill contains 11,131 bytes, approximately 72.6% less normal-startup instruction text. Verified Recall and exam procedures are separate conditional references (1,692 and 1,513 bytes); all three instruction files total 14,336 bytes. These are source-size measurements, not observed Claude read counts, token usage, latency or account-level acceptance.
An independent reviewer evaluated fourteen synthetic decision cases plus three combined daily-completion and subject-switch cases from the instruction text. All seventeen decisions passed the bounded review: status alone causes no write; a subject request after daily completion requires clarification about voluntary extra work unless that intent is already explicit; explicit voluntary continuation uses only the current published subject option and state version. This instruction-only simulation did not invoke a real Claude host or exercise production tools, and complete executable backend fixtures were not supplied. Separately, forty local backend tests across seven contract classes passed with no failures or skips, covering exams, visualization, learning plans, mastery, memory practice and Verified Recall. These checks supplement, but do not replace, real-client acceptance or measured host behavior.
The first full CI run
passed every lane except one OAuth integration assertion. Its three consent
redirects passed, but verifyNoInteractions(connectionService) detected an
unrelated invocation. A local negative reproduction with a one-millisecond
cleanup interval reproduced that failure; the imported OAuth configuration
enables scheduling on the mocked connection service. The HTTP-flow fixture now
provides an inert test-only scheduler while retaining that aggressive interval
and every no-interaction assertion. All three tests pass with this isolation.
Production scheduling and OAuth behavior are unchanged. Gradle now prints full
failure exceptions, causes and stack traces without enabling standard-stream
logging. The original failed run does not authorize deployment; the corrected
commit requires a new green full CI run.
The expanded local OAuth suite also exposed a wall-clock-sensitive CIMD test: a one-second elapsed-time assertion included JVM scheduling latency. The test now proves causally that startup returns while the started resolver remains blocked, and that twenty retries still produce exactly one fetch. A separate test-harness deadlock guard replaces the stopwatch; the 50-ms test attempt budget, production six-second hard maximum and retry/cache policy are unchanged. All 106 expanded OAuth and connection-service tests then passed locally. These are test-only corrections, not changes to production authorization or scheduling.
Completed 1.1.5 production and Marketplace rollout
All five source push workflows passed on
13726bb00b8ae55fec40141eed415346ffa69633 before production changed:
34698744283,
34698744194,
34698744257,
34698744337 and
34698744205.
The full local backend run also passed: 202 suites, 1,788 tests, zero failures
and nine skips. Twenty Marketplace regression tests passed. These checks do
not substitute for account-level Claude acceptance.
A fresh restricted backup was preserved under
/home/enpasos/backups/skillpilot-predeploy-1.1.5-6kwlUBtY before deployment.
The SQL backup contains 10,620,167 bytes with mode 0600; privacy checks before
and after creation passed without exporting prohibited feedback as evidence.
The archived previous server JAR has SHA-256
59e62af381a3f87ca757f689c197b7708467547d0b6547728c37e819098c1e9d.
This records backup creation, not a restore test. The service starts through
bootRun, so that JAR alone is not a complete runtime rollback; rollback must
also restore the intended source and rebuilt resources without overwriting
learner data or unrelated generated files.
The exact green source was deployed through ./deploy_skillpilot.sh. The
production build, focused security tests, public artifact, frontend shell,
AI-transparency, OpenAI mTLS/route matrix and source-rationale checks all passed.
Readiness returned HTTP 200 after 40 seconds. The service became active at
2026-09-12T14:56:49Z with NRestarts=0, and OpenAI mTLS remained enforce.
The new deployment JAR has SHA-256
de70d9b515ff6e68ba2f0aab1e3a5e656dff2614471b5df0f490a2867fd618ad.
The optional OpenAI Apps challenge comparison was skipped because no expected
challenge was supplied. All eight public Claude synthetic checks passed at
2026-09-12T14:58:01.369Z; the scheduled support check
passed on attempt 2
at 2026-09-12T15:02:08Z after the artifact was live.
At the Product Owner's request, the Marketplace README now focuses on 1.1.5 and explains that automatic updates were observed in two Claude accounts during an earlier beta release. It no longer incorrectly says repository publication cannot update an existing installation. This does not claim that all accounts, or those same two accounts, have received 1.1.5. These README and changelog clarifications changed only the Marketplace publication tree, not the plugin artifact.
Publication PR #7
was merged. node scripts/claude_marketplace_release.mjs verify-repository
then verified the actual public HTTPS default branch, its closed file inventory,
both strict Claude validations and an isolated installation from that repository:
- repository revision:
228f6bd59f30fa03e3f0e44fa69ffaa122f98323; - verification timestamp:
2026-09-12T15:03:16.000Z; - publication inventory: 12 files;
- tree SHA-256:
c854f82f337200a75ee9ad1078d1f22b8c219e5e4543e0fa62da38a19b24f4b2; - plugin: 1.1.5, 32,535 bytes, SHA-256
8b1713178bbb289bc0b6669afa6e60328f2b362d42651353a78a869fe6aa76c1; - default-branch validation:
passed on that exact revision, observed at
2026-09-12T15:04:23Z.
Only public-repository-default-branch is recorded as pass; activation is
published_pending_acceptance. Clean-account installation, real-account update
and migration, other real-client acceptance, and the first-party guide decision
remain pending. marketplaceUiSwitchAllowed=false; the first-party route remains
controlled_direct_install_beta. No artifact or historical approval was rebound.
1.1.4 privacy correction, 12 September 2026
The Product Owner required removal of workFeedback, outcomeFeedback and
Recall feedback, then authorized deployment of both the corrected backend
and Claude Marketplace after CI passes. Claude creates its own feedback and
success messages in the chat; Core accepts only structured completion results.
This deliberately contracts the input schema. It is not backward compatible with old cached tool inputs. The controlled-beta correction keeps the plugin, tool and OAuth identities, session boundary and progression ownership unchanged. Deploy the corrected backend and immutable 1.1.4 artifact first, then publish the exact Marketplace tree and refresh installed plugin/connector catalogs. Confirm the installed version and a successful mastery write in a fresh Claude session. Never restore the prohibited text fields as a compatibility workaround.
The complete seven-file 1.1.3 release dossier is archived under
ai/claude/plugin/skillpilot-coach-v1/release/history/1.1.3/, with immutable hashes
enforced by the release checker. All 1.1.4 repository, guide and real-client
evidence starts pending; historical automatic updates do not establish new
candidate acceptance. Local preparation fixes artifact/index drift without
overwriting any published artifact. Publication and production evidence must
be recorded only after the corresponding operation actually succeeds.
Completed production and Marketplace rollout
The Product Owner authorized autonomous completion of both deployments, with
green CI required first. The complete application CI
and documentation deployment
passed on f28ce87e4d792c75649b01da20bc5f32cd709ad8 before production was changed.
The original failures were the stale 1.1.3 artifact binding and a missing
documentation-index entry. A subsequent frontend failure exposed a test that
required publication before CI and pinned the old 1.1.3 repository tree; it now
checks the prepared and separately verified publication states correctly.
Production was deployed from that exact commit through ./deploy_skillpilot.sh.
A fresh restricted database backup and a hash-verified copy of the prior server
artifact were preserved first. The database precheck and fresh-backup postcheck
found none of the prohibited feedback JSON keys; no feedback text was exported
as incident evidence. This is not a restore-test or a claim about older backups.
The server's Git SSH authentication was unavailable, so the exact public source
was fetched through HTTPS without changing credentials or Git configuration.
The existing deployment generated the canonical runtime deck copies; these
generated production-worktree changes are not additional release source edits.
The production build, focused backend security tests, public artifact, frontend
shell, AI-transparency, OpenAI mTLS/route matrix and source-rationale checks
passed. Readiness returned HTTP 200 after 45 seconds. The service became active
at 2026-09-12T12:13:17Z with NRestarts=0; OpenAI mTLS remained enforce.
The optional OpenAI Apps challenge comparison was skipped because no expected
challenge was supplied. All eight credential-free Claude support synthetic
checks passed at 2026-09-12T12:14:27.976Z. The earlier scheduled version-drift
alarm also passed on rerun
after the new artifact was live.
Publication PR #6
passed required validation and automatic review, then was merged. Verification
with node scripts/claude_marketplace_release.mjs verify-repository proved:
- public default-branch revision:
91d6646c64ebeda9afa3b729f10a4859c360d69e; - verification timestamp:
2026-09-12T12:18:50.000Z; - closed publication inventory: 11 files;
- tree SHA-256:
dd8bf77fa63ac8d1fd3747bf5b7ba3785780742c04945d3e649d77ff558003b7; - plugin: 1.1.4, 58,290 bytes, SHA-256
0b1aa078fa140f95a83f3ef699c1b2130ac3c2e9b4624e02cb84f859d5612831; - strict Marketplace/plugin validation and an isolated installation from the actual public HTTPS repository: passed;
- default-branch validation: passed.
Only the current candidate's public-repository-default-branch evidence is
recorded as pass; activation is published_pending_acceptance. The guide,
real-account update, clean-account installation and other real-client acceptance
records remain pending. No previous approval is inherited, and no automatic
update in a user's Claude account is claimed. Confirm installed version 1.1.4,
refresh connector tools if needed, and start a fresh SkillPilot learning session
to verify an actual mastery write with the new input contract.
1.1.3 production and Marketplace publication, 12 September 2026
The Product Owner explicitly authorized both the production deployment and
subsequent publication of the prepared 1.1.3 package. Production was deployed
from f455074b18a7d4bc03efbe0c3112c344403a0f9a through
./deploy_skillpilot.sh, after a restricted database backup and preservation
of the previous server artifact. The update fixes the two stale Whitepaper
image digests and synchronizes their runtime copies without changing inventory
counts or review claims. Liquibase migration 033-add-learner-goal-completions
is EXECUTED; the service is running with NRestarts=0.
The deployment completed its build, focused backend security tests, public
readiness, exact Claude artifact, frontend resources, AI-transparency,
OpenAI mTLS/route matrix and source-rationale checks. The optional OpenAI Apps
challenge comparison was skipped because no expected challenge was supplied
to that check; this is not a claim of challenge or real-host acceptance.
All eight public Claude support synthetic checks passed at
2026-09-12T06:31:26.766Z, binding the 1.1.3 artifact below.
Publication PR #5
passed the required Marketplace validation and was merged. Verification of the
actual public default branch with verify-repository then proved:
- repository revision:
f2d22431f84278f62cc37d8ebbe0bb92295aec13; - verification timestamp:
2026-09-12T06:33:19.000Z; - closed publication inventory: 11 files;
- tree SHA-256:
96675808155fa7d48b5890c617975ba8b25964ec20dcf01c3ab184408d459799; - plugin: 1.1.3, 56,661 bytes, SHA-256
0e0b951233d72c0dd68b2cb2f631ae7fbdd1ad2411d373d60f9414bf0019f663; - both strict Claude validations and an isolated install from the actual public HTTPS repository passed; the default-branch validation also passed.
Only public-repository-default-branch is now pass; activation is
published_pending_acceptance. The guide decision, clean-account installation,
real-account refresh, privacy, legal and support acceptance remain pending.
marketplaceUiSwitchAllowed=false, the first-party guide remains
controlled_direct_install_beta, and openPublicBetaReady=false.
Publication does not update an existing Claude installation or establish
real-client acceptance. The six immutable packaged files retain their
preparation-time text; the Marketplace root README and changelog describe the
subsequent publication. No prior package or historical approval was rebound.
First observed automatic update in two Claude accounts
On 12 September 2026, after the 1.1.3 publication, the Product Owner reported that the installed plugin version had updated automatically to 1.1.3 in two Claude accounts. This is the first reported real-account automatic update in this release history, beyond the repository and isolated-install checks above.
This is a Product Owner observation, not an agent-observed account test. The previous installed versions, exact clients and synchronization timing were not recorded in that report. It therefore documents the successful two-account version update without claiming a fresh-account installation, unchanged OAuth connectivity, a complete coaching acceptance run, or repeatable automatic updates on every client. The next release should explicitly record whether the same accounts update again; the two-consecutive-update repeatability gate and the remaining acceptance records stay pending.
Historical local 1.1.3 preparation, 11 September 2026
The following records the state before the publication above.
The Product Owner authorized local preparation using the existing candidate workflow below. Today’s newly completed due plan goals, including older due goals, count toward each subject’s stable daily quota. Automatic continuation stops at the daily target; further work is voluntary and extra completions are acknowledged separately. The backend owns completion evidence and counters. Backlog is shown in requested details, without a repeated routine warning.
The new local direct-install artifact has 56,661 bytes and SHA-256
0e0b951233d72c0dd68b2cb2f631ae7fbdd1ad2411d373d60f9414bf0019f663.
Local prepare advances the checked-in publication index to 1.1.3 and stores
the new artifact additively. Every prior artifact retains its exact bytes. The
complete former active dossier is retained under
ai/claude/plugin/skillpilot-coach-v1/release/history/1.1.2/, including the
published repository and guide approvals; its file hashes are checked by the
release checker. None of those candidate-bound approvals transfers to 1.1.3.
For the new candidate, Marketplace state is prepared_not_published, repository
and exact-client records are pending, the guide decision is pending, and
marketplaceUiSwitchAllowed=false. Consequently the local first-party guide
route returns to controlled_direct_install_beta. This is the existing
fail-closed candidate behavior; the previously deployed 1.1.2 guide is not
changed by these local files. Web, Android/Voice, privacy, legal and support
acceptance remain pending. The generated repository tree is local only.
Local validation passed: 123 focused package, archive, release, direct-install
and Marketplace tests; deterministic artifact verification; both strict CLI
validations; and an installation smoke test in an isolated Claude profile.
The generated 11-file tree has SHA-256
99881a8624dcf38eda781681397d7d4a9eaa657bab0923c3c0031a14ec86868d.
The release checker reports STRUCTURAL_PASS with all 15 formal release gates
still pending. These local results do not provide real-client acceptance.
This work does not deploy, publish, update the remote Marketplace repository,
modify credentials or record host acceptance. The historical OpenAI review
freeze is retired; current development follows the explicit successor
authorization in AGENTS.md. Older freeze references below retain their
historical context and do not constrain this local preparation.
Historical 1.1.2 first-party guide: Marketplace and file fallback, 9 September 2026
This section preserves the 1.1.2 guide decision. It does not approve the new local 1.1.3 candidate or its Marketplace route; current candidate status is recorded above.
After reviewing the new personal-account observations, the Product Owner explicitly authorized implementation of a Marketplace-first installation and update guide with download/upload as a usable fallback. This is a new guide-only decision, not an inference from a visible menu. It supersedes the 8 September direct-only recommendation and the documentation-only restriction inside the supplied r2 handoff, solely for this bounded first-party guide.
The separate activation.firstPartyGuideDecision is approved at
2026-09-09T08:02:01.000Z by product-owner, bound to the existing published
1.1.2 candidate, immutable artifact SHA-256 and verified repository revision/tree
listed below. firstPartyUiRoute = personal_git_marketplace and
marketplaceUiSwitchAllowed = true authorize the controlled-beta guide.
activation.state remains published_pending_acceptance. The original
repository evidence is unchanged; clean-account installation, migration/refresh
and all outstanding exact-client, privacy, legal and support checks stay
pending. No automatic-update, independent-account or native-mobile acceptance
is inferred. This change does not publish a new plugin or Marketplace tree,
deploy the application, modify GitHub permissions or operate a Claude account.
The precise boundary is recorded in freeze appendix 6.72. User-facing instructions and the retained incident history are maintained in personal installation and update guidance.
Observed navigation and the two installation paths
Open plugin management in Claude opens Plugins → Discover in the reported personal Claude Pro web account. The complete hash route is a navigation link only, not a refresh endpoint or a guaranteed cross-client interface. If it does not work, enter Claude's plugin area manually. Do not attach a learner ID, session, token or GitHub credential to this link.
- New installation: use the Add dropdown at the top right → Add
marketplace → Add from a repository, enter the canonical public repository
URL without a query parameter and synchronize the source. Open SkillPilot
Coach v1 under Discover and add it after checking the offered version.
The source shown in the observed UI is
skillpilot-claude-marketplace; the internal manifest name remainsskillpilot-marketplace. These are not the plugin name. An “already added” message means use the existing-source management path, not repeat Add. - Existing installation: Add at the top right → Manage marketplaces → ⋮
next to
skillpilot-claude-marketplace→ Check for updates. The observed German labels are Hinzufügen → Marketplaces verwalten → Nach Updates suchen. Do not confuse the global Add dropdown with the Add button on a featured plugin card. Check the synchronized catalog and the installed plugin version separately; opening this menu or seeing a new sync time is not proof of installation. If the installed version stays old, use the file fallback. - File fallback: first download the current
.pluginfile from SkillPilot, then remove only an older SkillPilot plugin if replacement is needed. Preserve unrelated plugins/connectors. Only then use Add → Upload plugin (Hinzufügen → Plugin hochladen) in Claude and retain exactly one active SkillPilot instance. Skip removal for a new installation; an already current installation needs neither removal nor reinstallation. Do not promise that same-name upload silently replaces every installation or preserves its connection. Removing the Marketplace source is not a prerequisite for this path. - Both paths finish the same way: verify the installed version and the bundled SkillPilot connector, connect it if needed, then return to SkillPilot and start a new session through the existing handoff. Do not create a second manual MCP connector. GitHub authorization is not the SkillPilot connection.
The guide obtains all current-version copy and the download from the validated public publication index. It does not retain a hardcoded current-version label or infer the installed account version from download, OAuth or tab return. Loading/error states do not display a guessed version or an older artifact. File download and version comparison require a valid index. The independently approved Marketplace navigation remains available if the index fails; it makes no version-match or installation-success claim. Do not remove an existing installation while the current version information is unavailable.
Evidence and limitations
The internal handoff is SkillPilot × Claude: persönliche Marketplaces,
Updates und GitHub-Rechte, revision r2, 9 September 2026. Its README SHA-256
is 9bd52977e8224ff0758d78d02ba6b653575173e276be49e39b2fc5c046c59c13.
Evidence filenames are recorded here without making ignored temporary files
dependencies of the published documentation:
- E7,
07-direktlink-plugins-entdecken.png: Discover view; the exact URL-to-view relation is the user's report, not an authenticated test by the assistant. - E8,
08-hinzufuegen-marketplaces-verwalten.png: top-right Add menu, including Manage marketplaces and Upload plugin. - E9,
09-marketplace-verwaltung-aktionsmenue.png: Check for updates, Automatically sync and Remove, plus the warning that removal also uninstalls that source's plugins. The synchronized commit value is obscured and is not reconstructed. - E3 shows historical synchronized versions 1.0.4 and 1.1.1, not acceptance of published 1.1.2. Contents history does not prove rollback, pinning, parallel active versions or adoption by an already running chat.
- E6 shows the GitHub App access request, not a completed authorization.
The earlier claim that Marketplace management was absent is obsolete for the observed account: the path was previously not found and is now visible. Whether Claude rolled it out later or it was overlooked is unknown. The normal update path is now documented, but a controlled version-to-version update via that specific action remains to be tested. English UI labels above are translations of the German observations, not separately verified English-client evidence.
Automatic sync is optional and not relied upon by the learner guide. The shown GitHub App requests write permissions including code and workflows. Do not require learners to grant repository-admin rights or authorize all repositories. If GitHub access is requested, use the manual path or file fallback. Any separately approved publisher setup should be limited to the necessary repository; selecting repositories narrows resources, not the App's permission types. The organizational documentation's webhook/PR-merge rules do not establish the triggers or cross-account distribution of personal Pro marketplaces.
Marketplace removal is not routine update troubleshooting: it also uninstalls
the source's plugins and does not establish revocation of GitHub App access.
The historical ?v=2 workaround remains incident evidence only; the canonical
repository URL is unchanged. Independent-account installation, two successive
real updates, duplicate prevention, connection retention and native-client
coverage still require their existing acceptance evidence.
The exported Marketplace-root README remains part of the exact already published 11-file tree. This guide change does not silently edit that template, invalidate its repository evidence or republish the six immutable plugin files. Updating that external README later requires a separately authorized documentation-only publication and fresh exact-tree verification.
1.1.2 Marketplace publication, 9 September 2026
This subsection records the publication decision and evidence before the later guide decision above. Its pending guide status and direct-only wording describe that point in time; repository and artifact evidence remain unchanged.
The Product Owner explicitly requested publication of the actual 1.1.2 plugin through the existing Marketplace under its normal name. This authorizes the bounded repository publication of the already prepared six-file package, normal publication wording in the Marketplace README and changelog, and exact repository evidence. It supersedes the preparation-only publication boundary below for this release. It does not change the first-party installation guide or approve any real-account installation or update acceptance.
The Marketplace remains skillpilot-marketplace, with plugin name
skillpilot-coach-v1 and the familiar title SkillPilot Coach v1. There is no
diagnostic version or timestamp in the catalog name. The canonical repository
URL remains https://github.com/enpasos/skillpilot-claude-marketplace.
The exact public direct-install index and artifact were verified on
9 September: version 1.1.2, 55,266 bytes, SHA-256
835c91844f950d9101f74ef245916fc6a7d65f53426ae3939f3a224f7ab827ca.
The credential-free public synthetic passed all eight checks. These results
establish artifact availability and the checked public endpoints only.
The generated publication tree was merged in
PR #4.
verify-repository passed at 2026-09-09T04:24:02.000Z against the actual
public main branch:
- revision:
25bf4d8272030a3701008f7b5a09d4a18cba15c5; - closed publication inventory: 11 files;
- tree SHA-256:
690e57846a250b49bb8ac2ac30b5bda0f7f4c1eaf50edc3c8de2561e1b03da66; - exact 1.1.2 package parity, both strict CLI validations and installation from the actual HTTPS repository in an isolated profile: passed;
- default-branch validation: passed.
Only public-repository-default-branch is recorded as pass; the state is
published_pending_acceptance. Clean-account install, existing-account
migration/refresh, first-party guide approval and all other exact-client and
readiness decisions remain pending.
The Product Owner clarified that the reported 1.1.1 synchronization occurred
only after adding the repository URL with ?v=2. This is a user-reported
workaround for that account, not proof that changing a catalog name triggers
automatic synchronization, nor a verified update route for 1.1.2. The canonical
URL and catalog identity are unchanged.
The six packaged files, both immutable 1.1.1 and 1.1.2 artifacts, and previous
release dossiers remain byte-identical. The packaged README and SETUP retain
their preparation-time wording because it belongs to the immutable artifact;
this runbook and the Marketplace-root README describe the later publication
state. The current /plugins guide continues to use download and upload, now
with the exact 1.1.2 artifact. No application deployment is part of this
Marketplace publication.
The exact authorization boundary is recorded in freeze appendix 6.70.
Historical 1.1.2 local preparation, 8 September 2026
The Product Owner authorized only the compact daily summary, matching Claude-only server instructions, tests and local patch preparation: “Heute: 2 von 48 geschafft · noch offen: 19 Mathe, 27 Physik.” Mention backlog only when present, for example “+ 5 überfällig”. The completed count remains the currently mastered subset of today's due goals, not a same-day event log. Warnings about unavailable plans remain explicit.
The current source manifests and locally prepared publication index name
1.1.2. The repository checker requires that index to match the current source
and deterministic package; it is not a record of deployment. The deployed
index, immutable 1.1.1 download and external Marketplace repository remain
unchanged until a separately authorized rollout. The 1.1.1 release dossier is
archived byte-for-byte under release/history/1.1.1/; its published repository
evidence and withdrawn guide decision are not transferred to the new candidate.
For 1.1.2, Marketplace state is prepared_not_published; repository, client,
migration and guide-decision evidence is pending. Direct-install external
acceptance and privacy evidence are also candidate-bound and pending. No
publication, deployment, account update, new support claim or Marketplace
promotion is authorized by this preparation. Do not run public verification
as an acceptance check before rollout: the public version intentionally differs.
Historical first-party guide decision: download and upload, 8 September 2026
On 8 September 2026, the Product Owner reported that the Marketplace path
still did not work reliably and explicitly requested the direct download and
upload instructions on /plugins. This decision supersedes the first-party
Marketplace recommendation recorded on 5 September; the publication and its
original evidence below remain historical facts.
The guide at that decision used the existing immutable 1.1.1 .plugin file only.
Download it from SkillPilot, remove only an older SkillPilot installation when
replacing it, upload the downloaded file in Claude, connect the plugin's bundled
SkillPilot connector, then return to SkillPilot and start a fresh chat. Other
plugins and connectors remain untouched. A separate manual MCP connection is
not part of the installation. Check the installed version in Claude against the
version shown beside the SkillPilot download; the page cannot read the plugin
version installed in the user's Claude account and does not promise automatic
updates for uploaded files.
activation.firstPartyGuideDecision.status = withdrawn retains every original
approval timestamp, approver, candidate digest, repository revision, tree digest
and evidence reference. The validator still checks those exact bindings. The
withdrawal sets marketplaceUiSwitchAllowed = false and
firstPartyUiRoute = controlled_direct_install_beta; it does not unpublish the
repository or change published_pending_acceptance. All repository, installation
and migration evidence, direct-install readiness blockers, published artifact
bytes and acceptance status remain unchanged. New Marketplace promotion would
need a new explicit decision and current matching evidence.
The authorization and its precise first-party boundary are recorded in freeze appendix 6.66.
Marketplace publication context
The canonical target is:
https://github.com/enpasos/skillpilot-claude-marketplace
As long as
ai/claude/plugin/skillpilot-coach-v1/release/marketplace-publication.json
has activation.state = prepared_not_published, that repository is not a
supported installation source. The first-party /plugins page must keep every
Claude installation route unavailable for a new candidate until its exact direct-install or
Marketplace route is deliberately opened for testing. It must not offer 1.0.4
as a fallback. A Marketplace route additionally requires a verified repository
and a candidate- and revision-bound Product Owner approval in
activation.firstPartyGuideDecision. Local export success never changes either
state by itself. The current direct-install lane reports
controlledBetaReady = false, guidedFirstPartyBetaReady = false and
openPublicBetaReady = false; exact-candidate Web, Android and Voice
acceptance, privacy approval, legal approval, support readiness and
exact-client acceptance therefore remain blockers. The bounded first
repository publication may occur with exact-client acceptance still pending
so that acceptance can be performed through the Marketplace installation
itself, but only after the local, supply-chain and OpenAI-freeze checks below
and explicit Product Owner approval. Repository publication alone does not
make the Marketplace the first-party primary route. A separate controlled-beta
guide decision can do so without claiming that full public acceptance passed.
Why this is a separate repository
Anthropic accepts a Git repository containing
.claude-plugin/marketplace.json as a personal marketplace. The SkillPilot
monorepo is unsuitable as that repository: its GitHub repository size is
currently several GiB, its default branch has no marketplace manifest at the
repository root, and Claude Web does not document a sparse-checkout option for
the personal Add from a repository flow. Exposing the complete application
repository would also broaden the publication surface far beyond the reviewed
plugin. The target repository is therefore a small generated publication tree.
The generator copies exactly the seven files in the existing publicationFiles
allowlist. It never copies package tests, builders, release evidence, learner
data, sessions, credentials, or other monorepo content. The exported files are
byte-identical to the direct-install candidate, whose version and SHA-256 are
bound in the marketplace lane.
Corrected contract
- Marketplace name:
skillpilot-marketplace - Stable technical plugin name:
skillpilot-coach-v1 - Current candidate version:
1.1.6(Marketplace published; website promotion separately approved) - Plugin source:
./plugins/skillpilot-coach-v1 - Version authority:
plugins/skillpilot-coach-v1/.claude-plugin/plugin.jsononly - Current candidate SHA-256: the exact binding in
ai/claude/plugin/skillpilot-coach-v1/release/direct-install-beta.json; earlier published bindings remain in their archived release dossiers.
Anthropic allows a marketplace entry name to differ from the embedded plugin
name. SkillPilot intentionally keeps the technical name equal, but Claude still
stores a marketplace-qualified installation record. That is why migration from
an uploaded copy remains explicit. No version is repeated in
marketplace.json.
Historical 1.1.1 hard cutover
Version 1.1.1 fully replaces every earlier package. The public Marketplace
repository and the direct-install registry may retain old Git or immutable
artifact history, but first-party instructions, the current publication index
and acceptance runs must name only 1.1.1. Mixed 1.0.x/1.1.1 operation and
fallback to 1.0.4 are not accepted release modes. The Marketplace route remains
prepared_not_published until its exact 1.1.1 repository tree is published and
verified; its earlier 1.0.4 repository revision cannot satisfy that gate.
Version 1.0.3 established the historical pre-public correction in which Claude decides only whether the current active goal is complete and the backend persists the completion, selects the successor and returns its canonical context. Version 1.0.4 preserves that API, tool schema, OAuth, session and persistence contract while correcting its learner-facing application. Version 1.1.1 preserves those rules and adds:
- At each normal start or resume, Claude first reports per-subject goals due
today, the subset currently mastered, goals still open today, open backlog,
and cross-subject totals from the authoritative
learningPlanTodaycontext. - The current-mastery count is never described as an event log of work completed during that calendar day.
- Every valid subject plan contributes to the day. Unavailable plans produce a safe partial-data warning without plan or landscape identifiers.
- With no active goal, Claude calls
resume_skillpilot_learning_planonly when the authoritative context says a candidate is available, and then continues the backend-selected goal without a Web-app Weiterlernen detour. - The fourteenth connector-owned tool,
switch_skillpilot_learning_plan_subject, switches only to an exact localized subject from the current daily-plan context. It parks an unfinished goal without mastery while every valid plan continues to count.
The retained 1.0.4 corrections were:
- Policy, instruction, tool-schema, parameter, retry and private-deliberation mechanics stay out of learner-facing text and speech.
- After the tailored orientation exchange, a clear start or continuation intent completes the orientation without another confirmation loop. Claude writes that completion immediately and continues only after the backend has confirmed it.
- Ordinary mastery feedback remains learner-facing, while an orientation transition is presented without mastery grading or internal bookkeeping.
- A topic used to personalize the current conversation is never described as a durable remembered preference; the current connector has no such memory feature.
The immutable 1.0.2, 1.0.3, 1.0.4 and 1.1.0 packages and their version-specific
evidence remain historical records. They are not overwritten, rebound to new
bytes, or promoted as a fallback. Every 1.1.1 exact-client, privacy,
Marketplace-repository, installation, migration and guide-decision record
starts at pending; no earlier approval transfers to the new candidate.
Local preparation and validation
Inspect the worktree and preserve unrelated changes. Verify the retained OpenAI review history and the current authorized successor package first:
node scripts/check_openai_plugin_review_freeze.mjs
node scripts/openai_plugin_release.mjs verify
node scripts/check_skillpilot_coach_plugin.mjs
node scripts/check_openai_plugin_versioning.mjs
For a new candidate version, store the deterministic package and its index
under tmp/claude-direct-install-beta/. Keep the served publication index and
approved guide on their published release throughout local development:
node scripts/claude_direct_install_beta_release.mjs prepare-candidate
node scripts/claude_direct_install_beta_release.mjs verify-candidate
node scripts/claude_direct_install_beta_release.mjs verify
On an authorized backend rollout, the build automatically packages the current
artifact and index as described above. Do not run prepare to manually advance
tracked runtime resources for an ordinary rollout; that command remains an
explicit source-registry maintenance operation. Marketplace publication is a
separate step. A changed guide route still requires its own release-bound
decision; preparation and archived approvals do not establish client acceptance.
Then run the marketplace checks and create the publication tree:
node --test scripts/claude_marketplace_release.test.mjs
node scripts/claude_marketplace_release.mjs check
node scripts/claude_marketplace_release.mjs prepare
node scripts/claude_marketplace_release.mjs validate-cli
node scripts/claude_marketplace_release.mjs smoke-local
The generated repository is written to:
tmp/claude-marketplace/skillpilot-claude-marketplace
check uses a temporary directory and proves reproducibility without leaving
an export behind. prepare replaces only that exact generated default path;
it refuses to overwrite an arbitrary checkout. validate-cli deliberately
runs both required validations:
claude plugin validate --strict \
tmp/claude-marketplace/skillpilot-claude-marketplace
claude plugin validate --strict \
tmp/claude-marketplace/skillpilot-claude-marketplace/plugins/skillpilot-coach-v1
Validating only the marketplace root is insufficient because it does not
fully validate the embedded plugin's skills and related components.
smoke-local then adds and installs the plugin in a disposable
CLAUDE_CONFIG_DIR, verifies the installed version, enabled state and bundled
SkillPilot MCP endpoint, and removes the isolated profile. It does not modify
the operator's normal Claude configuration.
Support readiness activation precondition
Follow the Claude support readiness runbook before full public activation. The bounded repository publication and the separately approved controlled-beta installation guide do not satisfy or bypass this gate. Its public synthetic is credential-free and read-only; run it before the repository publication and again for activation. It checks the immutable direct-install publication, legal and privacy pages, application readiness, connector OAuth discovery, and the unauthenticated MCP challenge:
node --test scripts/claude_support_synthetic.test.mjs
node scripts/claude_support_synthetic.mjs verify
The committed drill file is only an incomplete template. Support readiness remains blocked until accountable support, operations and security owners have proved mailbox access, operation of the scheduled public synthetic, intentional failed-run notification delivery, recorded Product Owner acceptance of the best-effort monitoring boundary, and incident containment and recovery for the exact candidate. This personal-marketplace beta has no host-side per-operation email monitor and makes no real-time detection or SLA claim. A backup is preferred; without one, the Product Owner must accept and rehearse the documented single-owner promotion-pause contingency. A green synthetic alone does not authorize a gate change or publication.
First publication
Repository creation and pushing are explicit external publication actions. They are intentionally not part of the normal application deploy and are not performed by the exporter.
After the bounded local package, reproducibility, marketplace, public synthetic
and OpenAI-freeze checks pass, the Product Owner may explicitly
approve the first public repository publication while the candidate-specific
exact-client evidence is still pending. This is required to perform the
first exact-client acceptance through the Marketplace itself; it is not public
activation and does not authorize the first-party UI switch.
After that explicit approval:
- Create the public repository
enpasos/skillpilot-claude-marketplacewithmainas its default branch. - Protect
main: require pull requests and the generatedValidate marketplaceworkflow; disallow force pushes and branch deletion. - Copy the complete generated publication tree into a fresh checkout. Do not hand-edit generated plugin files in the target repository.
- Review the closed file inventory, commit, and merge it atomically.
- Verify the actual default branch from this source repository:
node scripts/claude_marketplace_release.mjs verify-repository
This command requires an authenticated GitHub CLI with read access to the repository.
This first uses GitHub metadata to require the exact public repository and
main as its real default branch. It then clones the configured HTTPS repository into a temporary directory,
compares every allowed file with the canonical source, rejects extras and
symlinks, rebuilds the bound .plugin candidate, runs both strict Claude
validations, adds the actual HTTPS repository in an isolated Claude
profile, installs the plugin, and reports the full Git revision. It fails if
the remote default branch moves during that verification window.
- In a separate revision-bound evidence change, record only the verified
public-repository-default-branchitem aspass. This derivesactivation.state = published_pending_acceptance; the other Marketplace evidence remainspending. Without a separate, candidate-boundfirstPartyGuideDecision,marketplaceUiSwitchAllowedremainsfalseandfirstPartyUiRouteremainscontrolled_direct_install_beta.
Use the full HTTPS URL in end-user instructions. In Claude Code the
owner/repository shorthand can select SSH and therefore surprise users who
do not have GitHub SSH credentials.
Historical 1.0.4 controlled-beta guide switch
After the 1.0.4 repository publication, the Product Owner confirmed on 3 September 2026 that both controlled users had migrated from the uploaded plugin to the exact Marketplace candidate. The Product Owner then explicitly requested that the first-party installation guide use the Marketplace as the recommended installation and update route.
That historical decision was recorded separately as
activation.firstPartyGuideDecision. It was bound to the 1.0.4 candidate
version and digest plus the verified repository revision and tree digest. It
does not authorize the 1.1.1 route.
The switch is deliberately narrower than full Marketplace acceptance:
activation.stateremainspublished_pending_acceptance;- clean-account installation and migration/refresh evidence remain
pending; - direct-install legal, support, and exact-client blockers remain
pending; openPublicBetaReadyremainsfalse;- the then-current direct
.plugindownload remained a labelled fallback; and - no Anthropic-curated, Anthropic-verified, or generally released status is claimed.
For each replacement candidate, that historical guide decision is reset to
pending until a new exact-candidate decision and verified repository exist.
Neither the historical Marketplace install nor the 1.0.4 direct download may
be offered as an available fallback.
Historical 1.1.1 publication and controlled-beta update route
On 5 September 2026, the Product Owner explicitly required updates through
the Marketplace and merged publication PR #2.
The public default branch was subsequently verified with
node scripts/claude_marketplace_release.mjs verify-repository:
- revision:
5cc7aba22ddf90ab8273cd6c15b71e8186781fc3; - closed publication inventory: 11 files;
- tree SHA-256:
8c6c67b46763224d901a65b35408dad7752f6c7db08203fd38cf0f568a74c5d3; - version:
1.1.1, byte-identical to the bound immutable plugin artifact; - strict Marketplace and plugin validation plus isolated Git-source install: passed; default-branch validation passed as well.
Only public-repository-default-branch is recorded as pass. The separately
approved first-party guide decision binds this exact candidate, revision and
tree. The guide directs installation and updates through the Marketplace and
does not expose a file-upload alternative. The user's Claude Web screenshots
show no Update action on the installed 1.0.4 plugin. They do show this route:
Hinzufügen → Marketplace hinzufügen → Aus einem Repository hinzufügen,
the existing public repository URL, an enabled Automatisch synchronisieren
switch and a Synchronisieren button. The dialog describes automatic sync
as keeping plugins current when the GitHub repository changes. These are the
observed German labels; English guide labels are translations, not a separately
verified English-client observation.
The subsequent screenshot after pressing Synchronisieren reports Dieser Marketplace wurde bereits hinzugefügt. This route adds a source; it did not refresh the existing source in this account. Keep the observed synchronization steps for new installations only. An existing-account manual refresh route in this Web UI is not yet verified and must not be presented as working. Check the installed plugin details for 1.1.1 before starting a new session from SkillPilot. The resulting installed version and absence of duplicate installations still need real-client confirmation. Do not prescribe an unobserved Update button, delete the existing installation or claim a completed acceptance run.
activation.state remains published_pending_acceptance. Clean-account
installation, real-account migration/refresh, Web/Android/Voice, privacy,
legal and support acceptance remain pending; openPublicBetaReady stays false.
The exact guide-only authorization is documented in
the OpenAI review-freeze exception.
Real-client acceptance and activation
The generated workflow and remote byte check prove supply-chain integrity; they do not prove the user journey. Record all of this against the exact remote revision before activation:
- On a clean eligible paid Claude web account, open Plugins → Discover → Add (top right) → Add marketplace → Add from a repository and add the now-public canonical repository URL. The observed deep link above is an optional navigation shortcut, not an install or synchronization action.
- Confirm that exactly one
SkillPilot Coach v1entry appears and install it. - Connect the bundled SkillPilot connector through its normal OAuth flow. Do not add a second custom connector or enter the MCP URL manually.
- Return to
https://skillpilot.com/and start a new learning session through the established first-party handoff. - Confirm that the initial response quotes the backend's
learningPlanToday.textverbatim and identically to the SkillPilot cockpit: one line per subject with its daily or weekly target and any backlog or work ahead, without own counts, totals or judgement. The active learning goal must be announced separately and only once, when teaching begins, and not after a status-only question. Check both the day and the week basis. Completing an older due goal must count toward that subject's period target; work ahead in one subject must not offset backlog in another. A day without a target must not be described as completed required work. Prove that an unevaluable plan is named in the text and produces no plan or landscape identifier. The status must rest on backend completion evidence, not on an inferred completion date from a mastery snapshot. - With no active goal, prove that Claude calls
resume_skillpilot_learning_planautomatically only whenresumeAvailableis true and guidance isresume, uses the returned canonical context and continues the backend-selected goal without asking for the Web-app Weiterlernen button. Also prove that no resume call occurs when the flag is false. With guidancecomplete, further continuation requires an explicit request for voluntary extra work. - Exercise the intended coaching flow and both interactive MCP Apps on every surface that SkillPilot intends to advertise. Anthropic's technical availability is not SkillPilot acceptance evidence.
- Ask Claude to switch from Mathematics to Physics and back. Prove that it copies only exact localized subject names from the current daily-plan context, parks unfinished work without mastery, continues the backend-selected due goal without confirmation and never submits a plan, landscape, focus or goal ID.
- In Claude Web, engage with one tailored orientation follow-up and then say
Machen wir so, dann fangen wir einfach an.Prove that Claude gives non-assessing feedback, offers questions or closure, and waits for a separate learner response before persisting orientation completion. A bare path choice orKlingt gutis not closure consent. After consent, the next active goal must be exactly the backend-selected successor returned in the canonical mastery response. Confirm that no policy, instruction, private-deliberation, lazy-loading, schema, parameter or retry mechanics are narrated and that no durable anchor-memory promise is made. - Repeat the complete scenario and every assertion independently in native Claude Android Voice mode. A conversational statement that the goal was saved or a visually plausible next goal is not sufficient evidence. Also cover “jetzt Physik”, “zurück zu Mathe”, a status-only request, updated per-subject progress after Verified Recall, the final daily goal, and paused or blocked plans. The final daily goal must lead to a clear completion message; a generic focus menu must not replace the active plan.
- Test migration from the previously uploaded plugin: remove only the old SkillPilot plugin, add the marketplace, install once, reconnect if Claude asks, and verify a new SkillPilot-started session.
- Use Add (top right) → Manage marketplaces → ⋮ at the SkillPilot source → Check for updates and confirm that migration and refresh do not require another file upload. Check catalog, installed version, connection and a new SkillPilot-started session separately. A real version-to-version update is a mandatory release gate beginning with the next Marketplace version; verify two consecutive real updates for the repeatability claim. The fallback does not turn an unsuccessful Marketplace update into a passed Marketplace test.
Only after the public repository, clean-account installation,
upload-to-marketplace migration/refresh, candidate-specific Web and Android
Voice acceptance, and every remaining direct-install activation blocker are
approved may a separate Product Owner change set mark all remaining evidence
objects pass. The earlier controlled-beta guide decision is not evidence for
any of those checks. Every Marketplace pass record requires the same 40-character
remote revision, a canonical UTC timestamp, the exported tree SHA-256, the
current candidate version and direct-install SHA-256, and a non-empty evidence
reference. Stale evidence therefore becomes invalid when either candidate or
remote tree changes. Only then may that change set derive the activation fields
as:
{
"state": "published_verified",
"firstPartyUiRoute": "personal_git_marketplace",
"marketplaceUiSwitchAllowed": true
}
Only a new exact-candidate decision may make the first-party /plugins guide
Marketplace-first. It must preserve the scoped cleanup, connector OAuth, and
return-to-SkillPilot steps. No 1.0.4 direct-download fallback is permitted.
The former OpenAI review freeze is retired; no new review-time hash exception
is required. Claude candidate and guide acceptance remain independent gates.
Subsequent releases
For any plugin-content change:
- make and review the plugin change in the canonical SkillPilot repository;
- increment
plugin.jsonSemVer in the same change (1.1.2becomes at least1.1.3); - rebuild and bind a new direct-install artifact; never rebind an existing version to new bytes;
- update the marketplace lane's version and direct-install SHA-256, create or
rebind every candidate- or revision-bound evidence record as
pending, and reject stale evidence. Reusable generic controlled-beta capability observations may remainpassonly while their capability and preconditions are unchanged; rerun the current local package, archive and setup checks before retaining those local results; - update
CHANGELOG.md; - run all local checks above and prepare a new tree;
- only after separate publication authorization, publish through a target-repository pull request;
- run
verify-repositoryafter merge; - test the real marketplace update from the previous installed version; this is mandatory for every release after the first Marketplace publication.
Third-party marketplace updates must be treated as manual unless the tested Claude client proves otherwise. In Claude Code the explicit diagnostic path is:
/plugin marketplace update skillpilot-marketplace
/plugin update skillpilot-coach-v1@skillpilot-marketplace
Rollback is a new, higher SemVer release that restores reviewed content. Never
force-push main, delete history, or reuse an old version with different
bytes. Connector containment and recovery follow the
support readiness and incident runbook,
including retained OpenAI historical integrity and candidate-bound evidence.