Implement and run fetch-penpot-docs.mjs and commit the vendored Penpot reference #214
Closed
opened 2026-09-14 23:14:55 +00:00 by david
·
1 comment
No Branch/Tag specified
main
feature/issue-342/mssql-write-access-check-and-startup-warning-never
feature/issue-331/mssql-write-extensions-mssql-readme-md-setup-tools
feature/issue-330/mssql-register-extension-add-tests-to-root-test-sc
feature/issue-329/mssql-index-ts-wiring-load-env-refuse-on-invalid-l
feature/issue-328/mssql-mssql-table-schema-tool-parameterised
feature/issue-327/mssql-mssql-list-tables-tool
feature/issue-326/mssql-mssql-query-and-mssql-query-one-tools
feature/issue-325/mssql-stream-runner-with-row-cap-cancel-and-timeou
feature/issue-324/mssql-pool-config-builder-encrypt-on-certificate-s
feature/issue-323/mssql-audit-log-writer-pi-mssql-audit-log-mode-060
feature/issue-322/mssql-read-only-guard-module-validatesql-with-corp
feature/issue-321/mssql-certificate-trust-setting-and-limit-validati
feature/issue-320/mssql-loadenvfile-and-mssql-url-parsing
feature/issue-319/mssql-extension-skeleton-permanent-corpora-and-dep
feature/issue-318/mssql-spike-write-result-md-apply-the-gate-open-th
feature/issue-317/mssql-spike-scoring-runner-for-both-candidates
feature/issue-316/mssql-spike-candidate-b-guard-using-the-antlr4-t-s
feature/issue-315/mssql-spike-candidate-a-guard-using-node-sql-parse
feature/issue-314/mssql-spike-must-accept-corpus
feature/issue-313/mssql-spike-scaffold-spike-directory-and-must-reje
feature/issue-311/mssql-spike-check-dependencies-mssql-node-sql-pars
feature/issue-312/mssql-spike-check-whether-extension-tests-run-in-c
feature/issue-299/verify-the-ste-style-live-in-a-short-grill-session
feature/issue-298/bump-the-grillme-extension-to-0-4-0-and-add-the-ch
feature/issue-297/rewrite-extensions-grillme-design-md-in-ste-style
feature/issue-296/rewrite-extensions-grillme-readme-md-in-ste-style
feature/issue-295/rewrite-the-grill-me-command-output-and-read-only
feature/issue-294/rewrite-the-grill-me-tool-metadata-to-the-ste-rule
feature/issue-293/extract-buildgrillprompt-and-add-the-prompt-integr
feature/issue-292/add-ste-style-test-ts-checks-for-the-rule-text-and
feature/issue-291/add-the-pure-ste-style-ts-module-and-inject-the-st
feature/issue-264/verify-the-vision-tool-live-against-the-deepseek-a
feature/issue-263/list-the-vision-extension-in-the-repo-root-readme
feature/issue-262/write-extensions-vision-readme-md-the-10-section-p
feature/issue-261/wire-the-vision-extension-into-package-json-manife
feature/issue-260/implement-extensions-vision-index-ts-factory-regis
feature/issue-258/implement-extensions-vision-src-tool-ts-the-vision
feature/issue-257/implement-extensions-vision-src-client-ts-request
feature/issue-256/implement-extensions-vision-src-usage-ts-usage-map
feature/issue-255/implement-extensions-vision-src-images-ts-read-val
feature/issue-254/implement-extensions-vision-src-config-ts-env-reso
feature/issue-253/implement-extensions-vision-src-errors-ts-toolerro
feature/issue-252/penpot-add-text-stages-zero-area-auto-width-text-p
feature/issue-216/add-the-penpot-skill-and-extension-to-the-repo-roo
feature/issue-217/register-the-penpot-tests-in-npm-test-complete-the
feature/issue-215/write-the-penpot-skill-md-core-workflow-token-conv
feature/issue-214/implement-and-run-fetch-penpot-docs-mjs-and-commit
feature/issue-213/validate-screenshot-reconstruction-against-the-liv
feature/issue-212/add-the-image-to-design-workflow-to-skills-penpot
feature/issue-211/validate-svg-import-icon-and-illustration-against
feature/issue-210/implement-the-penpot-add-svg-tool-with-svg-raw-fal
feature/issue-209/implement-the-svg-to-shapes-converter-in-src-svg-t
feature/issue-208/validate-component-instancing-against-the-live-ins
feature/issue-207/implement-penpot-instance-component-with-id-remapp
feature/issue-206/author-and-commit-the-component-library-artifact-u
feature/issue-205/implement-file-library-linking-and-validate-the-ex
feature/issue-204/implement-penpot-export-library-sse-uri-plus-artif
feature/issue-203/implement-penpot-import-library-multipart-upload-p
feature/issue-202/implement-the-transit-decoder-and-sse-stream-parse
feature/issue-201/validate-a-full-composed-screen-one-commit-one-rev
feature/issue-200/implement-penpot-add-image-with-media-upload
feature/issue-199/implement-asset-reference-resolution-plus-penpot-a
feature/issue-198/implement-penpot-add-frame-with-auto-layout-props
feature/issue-197/validate-asset-creation-atomicity-and-write-safety
feature/issue-196/implement-the-designated-target-write-guard-with-a
feature/issue-195/implement-penpot-commit-with-revn-tracking-conflic
feature/issue-194/implement-the-staged-changeset-store-and-the-colou
feature/issue-193/validate-read-primitives-against-the-live-penpot-i
feature/issue-192/implement-the-penpot-list-library-tool-with-name-t
feature/issue-191/implement-the-penpot-get-file-tool-pages-objects-a
feature/issue-190/implement-the-penpot-list-projects-tool-teams-and
feature/issue-189/implement-the-penpot-whoami-tool-and-wire-the-exte
feature/issue-188/implement-the-rpc-client-and-error-decoding-in-src
feature/issue-187/implement-penpot-url-penpot-token-resolution-in-sr
feature/issue-186/scaffold-the-penpot-extension-directory-and-regist
feature/issue-172/add-end-to-end-main-tests-for-the-fj-rg-tool-state
feature/issue-171/make-reminder-report-dynamic-install-skip-counts-r
feature/issue-170/wire-settings-json-filter-rewrite-into-dedupeandre
feature/issue-169/implement-buildpackagefilters-with-exhaustive-unit
feature/issue-168/refactor-preflight-to-skip-warn-for-missing-fj-rg
feature/issue-167/add-fj-rg-tool-detection-helpers-rgavailable-detec
feature/issue-148/reconcile-design-md-and-implementation-plan-with-t
feature/issue-146/verify-extension-load-behavior-with-and-without-mo
feature/issue-145/write-extensions-mongodb-readme-md
feature/issue-144/write-tool-description-promptsnippet-guidance-for
feature/issue-143/implement-index-ts-async-factory-lifecycle-with-te
feature/issue-142/implement-the-mongo-list-collections-tool-with-uni
feature/issue-141/implement-the-mongo-count-tool-with-unit-tests
feature/issue-140/implement-the-mongo-find-tool-with-unit-tests
feature/issue-139/implement-src-errors-ts-with-unit-tests-toolerror
feature/issue-138/implement-src-serialize-ts-with-unit-tests-ejson-t
feature/issue-136/implement-src-env-ts-with-unit-tests-mongodb-uri-r
feature/issue-135/register-the-mongodb-extension-in-the-repo-root-pa
feature/issue-133/initialize-the-extensions-mongodb-package-package
feature/issue-116/src-actions-ts-downloadrunlogs-zip-guarded-unzip-c
feature/issue-115/src-actions-ts-downloadjoblog-cache-first-attempt
feature/issue-114/src-actions-ts-metadata-queries-listactionruns-get
feature/issue-113/src-actionscache-ts-cache-paths-cache-first-read-w
feature/issue-112/add-zip-extraction-dependency-adm-zip-vs-yauzl
feature/issue-111/tracking-forgejo-actions-tooling-read-only-runs-jo
feature/issue-93/add-unit-tests-for-scripts-local-install-mjs-node
feature/issue-92/validate-install-local-end-to-end-on-the-dev-machi
feature/issue-90/implement-pi-registration-with-url-dedupe-and-relo
feature/issue-89/validate-install-local-from-a-scratch-clone-fresh
feature/issue-88/implement-git-pull-and-npm-install-steps-in-script
feature/issue-74/write-victorialogs-readme-md-and-reconcile-design
feature/issue-73/wire-up-index-ts-extension-factory-and-register-al
feature/issue-72/implement-logs-facets-tool-src-tools-facets-ts
feature/issue-71/implement-logs-hits-tool-src-tools-hits-ts
feature/issue-70/implement-logs-search-tool-src-tools-search-ts
feature/issue-69/implement-parsejsonlines-helper-in-src-client-ts
feature/issue-68/implement-victorialogsrequest-in-src-client-ts
feature/issue-67/implement-resolvebaseurl-in-src-env-ts
feature/issue-66/implement-totoolerror-in-src-errors-ts
feature/issue-65/implement-src-defaults-ts-shared-constants-and-app
feature/issue-64/scaffold-the-victorialogs-pi-extension-project
feature/issue-53/skip-issue-creation-for-chore-documentation-commit
feature/issue-45/fix-local-install-preflight-env-var-requirements-s
feature/issue-41/add-npm-run-local-install-script-to-update-and-ins
feature/issue-26/cross-reference-forgejo-list-milestones-from-issue
feature/issue-25/add-forgejo-milestone-delete-tool
feature/issue-24/add-forgejo-milestone-close-and-forgejo-milestone
feature/issue-23/add-forgejo-milestone-edit-tool
feature/issue-22/add-forgejo-milestone-view-tool
feature/issue-21/add-forgejo-list-milestones-tool
feature/issue-20/add-forgejo-milestone-create-tool
feature/issue-18/add-forgejo-label-create-tool
feature/issue-29/bug-forgejo-issue-create-view-edit-close-etc-crash
No results found.
Labels
No labels
bug
chore
documentation
enhancement
feature
ready
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
david/pi-extensions-and-skills#214
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Implement
skills/penpot/scripts/fetch-penpot-docs.mjs: a one-command, version-pinned refresh of the skill's vendored Penpot reference — the instance's OpenAPI spec plus the relevantcommon/srcschemas — with deterministic output. Run it and commit the result underskills/penpot/docs/.Background
Depends on: #188
Penpot's RPC API is internal and unversioned and drifts between releases; the validated target is Penpot 2.17. Drift is real and already observed:
export-binfiletakesincludeLibraries/embedAssetsbooleans on 2.17 while later versions document atypeparameter. Vendoring heavily is the right call precisely because the version is controlled — refresh becomes a routine step of a Penpot upgrade instead of a re-learning exercise.Two sources, both needed:
<PENPOT_URL>/api/main/doc/openapi.json— ~1 MB, generated from Penpot's Clojure source, and the single highest-value artifact: it contains the command list, the change-type union, the shape variants and the layout enums. Note the URL carefully:/api/main/doc/openapi(without.json) serves a Swagger HTML page, so a wrong URL yields HTML that looks like a corrupted download.common/src/app/common/typesschemas from the Penpot repo at the tag matching the instance — the source of truth for field-level detail the spec only sketches:file,page,pages_list,shape,shape_tree,path,text,typography,typographies_list,color,component,components_list,fills,stroke,grid,token,tokens_lib,variant,library,objects_map.Determinism matters because the "re-run produces the committed bytes" check is how the vendored copy is kept honest: a diffable refresh means a Penpot upgrade produces a reviewable PR rather than an opaque blob dump.
Documentation Required
A separate process downloads these into the listed folders before this issue is implemented. Check the folders for the actual reference material before starting.
docs/reference/penpot-api/<PENPOT_URL>/api/main/doc/openapi.json— the spec this script downloads; open it once by hand to confirm the URL returns JSON (not the Swagger UI page) and to note the top-level structure that will be written to disk.PENPOT_URLhas no/apisuffix.Penpot source (pinned tag)
raw.githubusercontent.comURL shape the script should construct for each schema file.docs/reference/nodejs/mkdirSync/writeFileSync), plus reading a file back for the idempotency check.fetchused for both sources (no dependency).process.env, so the script fails loudly in a pipeline.scripts/local-install.test.mjsfollows, if a test is added for the script's pure helpers.Pi package conventions
docs/directory is packaged, so the vendored files ship with the skill.Implementation Details
Create
skills/penpot/scripts/fetch-penpot-docs.mjs(plain ESM.mjs, matchingscripts/local-install.mjs's style; no dependencies):Configuration
PENPOT_URL(normalise a trailing/or/api, reusing the same rule asextensions/penpot/src/env.ts— duplicate the small helper rather than importing TS from a.mjsscript, or import it if Node's type stripping makes that clean).PENPOT_TOKENoptional: send it when present (so a private instance works), and warn if absent.PENPOT_VERSIONenv override for the schema tag, defaulting to the pinned version recorded in the script (start at2.17.2, the newest 2.17 tag). Verify the tag exists with a HEAD/GET before downloading, and fail with a clear message naming the tag if not.--version <tag>/--out <dir>CLI flags.Fetch, in order, into
skills/penpot/docs/openapi.json— from the instance. If the response is HTML or the content type is not JSON, fail with the URL and a hint about the.jsonsuffix (this is the documented trap).schema/<file>.cljc— one file per schema in the list above, fromraw.githubusercontent.com/penpot/penpot/<tag>/common/src/app/common/types/<file>at the pinned tag.VERSION— a small text file recording: the Penpot version/tag, the instance host, the UTC date of the fetch, and the OpenAPI spec's own version/info fields if present.Determinism
openapi.json(write the parsed-and-re-serialised JSON with sorted keys if the raw bytes prove unstable, and document the choice). TheVERSIONfile is the only place a date appears, and it must be excluded from the byte-comparison check.Run it and commit the output, then add a short pointer index in
skills/penpot/SKILL.md— a "Reference" section listingdocs/openapi.json,docs/schema/*.cljcanddocs/VERSIONwith one line on what each is for. (The rest ofSKILL.mdis written in the next step; add only this section and keep the file valid.)Document the upgrade path: one short paragraph in the script's header comment and in
skills/penpot/docs/README.md— how to bump the pin on a Penpot upgrade (find the running version, update the pin, re-run, review the diff).Acceptance Criteria
skills/penpot/scripts/fetch-penpot-docs.mjsruns with no third-party dependency and writesskills/penpot/docs/openapi.json,skills/penpot/docs/schema/*.cljcandskills/penpot/docs/VERSION..json-suffix trap.docs/VERSION(proven by deletingdocs/, re-running, and diffing).skills/penpot/docs/README.mddocuments what the vendored files are and how to refresh them on a Penpot upgrade.skills/penpot/SKILL.mdhas a "Reference" section pointing at the vendored files, and the file remains valid skill frontmatter-wise.docs/VERSION.Test Plan
Then confirm in pi that
/skillsstill listspenpotand that the vendored files are present in the installed package.pi-loop opened and merged a pull request for this issue: #247