aax
무료Optional AAX support for Pulp, including developer-supplied Avid SDK setup, CMake enablement, DigiShell/AAX Validator workflows, and local AAX builds on macOS or Windows.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
The acceptance bar for anything Pulp can install (a `pulp tool` registry entry, `pulp add` package, or any downloadable). Validate the FULL lifecycle — install AND uninstall, from OUTSIDE a Pulp checkout, with the installed-user's binary — before its README or docs ship. TRIGGER when adding/editing tools/packages/tool-registry.json, a new binary_download/python_pip/npm_package tool, a `pulp add` importer, or writing docs that tell users to install something.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
A thing Pulp can install is not "done" when the code compiles or when it works in your repo checkout. It is done when a user who installed Pulp can install it, use it, and uninstall it — from their own project directory, not the Pulp source tree. Ship the README only after that is proven.
pulp tool install trace-processor shipped as a first-class tool (with a whole
showcase README promoting it) but worked only inside a Pulp git checkout:
the registry is resolved by walking up from cwd for
tools/packages/tool-registry.json, which installed users don't have, so it
errored Tool registry not found. It got that far because every validation ran
from inside the repo. Uninstall had a second latent problem — it never validated
the tool id, so uninstall ../../x could delete outside the managed tree.
Both are the kind of gap that only a from-the-user's-seat, full-lifecycle test catches. This skill is that checklist.
cd to a scratch dir whose parents
contain no tools/packages/tool-registry.json, point PULP_HOME at a throwaway
dir, and run the install with the user-facing pulp (the installed binary
or a fresh ./build/pulp), not a raw in-repo build invocation.pulp trace query, etc.)..., ../x, a/b, absolute
path, empty) must be refused before any deletion, with a plant-a-victim
test asserting nothing outside the managed tree was touched.Only after 1–4 pass do you write or update the README/docs that tell users to run the command.
pulp tool resolves its registry as: repo tools/packages/tool-registry.json
(walk up from cwd) first — so a Pulp dev's edits show without a rebuild —
else the copy compiled into the CLI (EMBEDDED_REGISTRY_JSON /
tool_registry::resolve_registry). Adding a tool to the JSON is enough for the
Rust-native verbs (list/info/path/doctor/uninstall, and any tool whose
install is handled Rust-side) to work standalone. Known boundary: archive
tools whose install delegates to pulp-cpp (tar/zip extraction — uv, deno,
ffmpeg) still need the registry reachable by the C++ side; a bare-binary or
self-fetching tool (like trace-processor, which routes to its verified fetcher)
does not. If you add a delegated archive tool, validate its standalone install
explicitly or thread the registry to the delegate.
Large or separately licensed tools that must never join pulp tool install --all set explicit_install_only: true and provide a named Rust-side
installer. Chrome for Testing is the reference: its complete versioned archive
is SHA-256 pinned, extracted transactionally below
$PULP_HOME/tools/chrome-for-testing/<version>/<platform>/, and selected only
through the exact current.json manifest. Imports never trigger its download.
Test install, repeat install, forced update, doctor --run, and uninstall from
outside the checkout; doctor --run must use a bounded probe such as
--version, never launch a long-lived GUI.
A tool may list aliases in its registry entry so a natural name resolves to the
canonical id — pulp tool install perfetto reaches trace-processor. Resolution
happens once at the run() dispatch boundary (ToolRegistry::canonical_id), so
every verb (install/info/uninstall/path/doctor/update) accepts the alias. This is
what lets a Claude Code plugin user in a Pulp project say "install perfetto" and
have it work. Add an alias when the tool's product name differs from its id;
keep it exact-match (no fuzzy matching that could mis-resolve).
Every binary_sources entry needs the sha256 of its release asset at
pinned_version; validate_registry.py fails without it, and the generic
installer (install_binary_tool in tools/cli/tool_registry.cpp) refuses a
pinned download whose digest differs. Watch out for:
.../latest/... or getrelease URL
changes bytes under you, so the digest breaks every install the day upstream
ships. Use a versioned, immutable asset URL (prefer one with ${version} so an
override fetches the overridden version)..sha256 sidecar when the project publishes one. A control
must be able to fail: check that a wrong asset against the same sidecar
differs, or an empty-vs-empty comparison will read as a match.${version} in url_template), an override to another
version is refused rather than installing the pin under the wrong name. This
is the one documented exception in extending-pulp.md. Prefer a templated
source when one exists. The rule runs in two places: the Rust front end
(refuse_unservable_version in cmd/tool.rs) refuses --version before
set_override, so a refused version is never saved, and the C++ installer
refuses env and file overrides. Its fix text must match the override's
source: pulp tool update clears only tool-overrides.json, so an env
override has to be unset by name.unverified-version. The C++ delegate resolves
the same precedence as the Rust front-end (env > tool-overrides.json >
pin); a version other than the pin installs with the observed digest recorded
in its manifest.json. Never make an override fail for lacking a digest.trace_fetch.rs, chrome_for_testing.rs);
their registry digests must match those constants, which the validator checks.uninstall_tool (tool_registry.rs) is the one place that calls
remove_dir_all. Two independent guards, both tested:
validate_tool_id rejects any id that is not a single safe path component.tools/<id>, tools/python-envs/<id>, tools/npm-packages/<id>).It returns the removed PathBuf so the command can tell the user exactly what
was deleted. Never delete silently; never widen the id contract without adding a
hostile-id test.
BIN=./build/pulp # or the installed ~/.pulp/bin/pulp
H=$(mktemp -d) # throwaway PULP_HOME — never the real one
cd "$(mktemp -d)" # scratch cwd, no registry above it
PULP_HOME="$H" "$BIN" tool info <id> # resolves? (embedded fallback)
PULP_HOME="$H" "$BIN" tool install <id> # installs from here?
PULP_HOME="$H" "$BIN" tool uninstall <id> # removes + names the path?
PULP_HOME="$H" "$BIN" tool uninstall ../x # REFUSED (exit 2)?
rm -rf "$H"
Unit-test equivalents live in experimental/pulp-rs/src/tool_registry.rs
(resolve_registry_falls_back_to_embedded_outside_a_checkout,
uninstall_tool_rejects_hostile_ids_without_deleting) and
experimental/pulp-rs/src/cmd/tool.rs.
When a README/guide tells a user to install something, the exact command in it must be the one that works for an installed user (validated per above). If two commands do the same thing, show one — don't paste a commented-out alias (it copies badly). Document how to remove it too, and warn that removal deletes files.
packages, kits, content, and installable-tools are Pulp's four ways to
extend a project or machine, and they share one lifecycle contract: add is
validated, remove is confirmed + confined to the surface's own area + names what
it deleted, and both add and remove ship tests. Pick the right surface and read
the shared contract in
extending-pulp.md.
packages — third-party audio DSP libraries → a projectkits — reusable Pulp code/UI/templates → a projectcontent — data-only packs (presets/samples) → an installed plugininstallable-tools — machine-level dev/agent tooling under ~/.pulp/tools/, plus the shared validate-and-uninstall-from-outside-a-checkout bar아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Optional AAX support for Pulp, including developer-supplied Avid SDK setup, CMake enablement, DigiShell/AAX Validator workflows, and local AAX builds on macOS or Windows.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Configure, implement, and test Pulp's optional desktop Ableton Link tempo-sync adapter while preserving the developer-supplied SDK, licensing, realtime, latency-compensation, and no-install boundaries.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Maintain Pulp's installed design-time agent capability manifest and public-surface ledger. Use when adding, removing, renaming, or materially changing public audio, MIDI, signal, timebase, or sequence APIs; registering a new algorithm for generators; changing capability support or deprecation state; or repairing agent-capabilities freshness, schema, fingerprint, tombstone, or installed-SDK tests.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Android platform development for Pulp — NDK cross-compilation, Oboe audio, Dawn/Skia GPU rendering, JNI bridge, touch interaction, emulator workflows, and end-to-end smoke validation. Covers build, deploy, debug, and the gotchas discovered during bringup.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Optional ARA support for Pulp, including developer-supplied ARA SDK setup, CMake enablement, adapter companion APIs, validation, and ARA-aware plugin implementation guidance.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
The measurement surface for ALL Pulp DSP and audio-pipeline work — read it BEFORE writing or gating DSP, not only when something already sounds wrong. Covers the C++ harness (signal generators, metrics, assertions, RenderScenario, contracts), the offline Audio Doctor (magnitude/frequency response, THD/THD+N, phase/group delay), and their Python sibling the Audio Quality Lab (tools/audio/quality-lab — null residual + alignment, LTAS log-spectral distance, spectral flux/centroid, HNR, Theil-Sen drift slope, Kaiser-sinc resampling, license-guarded corpus, regression-net ratchet). TRIGGER on AUTHORING work — "build/design an oscillator/filter/synth/effect", "add a DSP module", "what should the acceptance gate be", "how do I measure aliasing / anti-aliasing / alias floor", "null against a reference", "is this DSP correct", "choose a tolerance", "golden/regression corpus for audio", "measure drift or jitter", "A/B two renders" — AND on DEBUGGING work — "is there sound / no audio / I hear nothing", "does this filter/compressor/synth/delay produce the right signal", "prove the DSP / prove the contract", "measure the frequency response", "what's the THD / is it distorting", "what's the group delay / phase response / measured latency", "magnitude response curve", "render a test tone and assert", "audio regression", "64-frame works but 128 is silent", "sample-rate change pitch-shifted it", "describe what's in this buffer", "audio doctor", "compare before/after a DSP refactor". Reach for this BEFORE hand-rolling any FFT, null test, alias measurement, pitch tracker, or golden-render script — most of it already exists in one of the two lanes. Test/tool layer over HeadlessHost — deterministic, no audio device, no speakers. Off the realtime thread entirely.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.