VibePackr Enterprise · Part.5
Part.5 · SDK Engine practice and candidates
Guide connections, workflow and input/output map
First-use checkpoint and return points
- Start here
- W1 creates a fresh practice folder, copies matching-version installed examples and analyzes the full Custom request. Then choose A (run) or B (run-offline), once for each candidate.
- Have ready
- Actual SDK path, a supported Rust/native toolchain, and the optional verified set only for route B. For Bash, the native option array must stay the same for W1–W4; Windows uses its separate commands.
- Expected exercise result
- Open each candidate’s README.md, adapter.rs and manifest.json; hash the source and library separately. Four files/five stage records and CUSTOMER_REVIEW_CANDIDATE/authority_granted=false describe a local candidate, not a running adapter or registered integration.
Exercise and next steps
- Custom: W1
- MCP: W2
- Edit string score: W3
- Repeat and compare: W4
- After separate implementation review/registration: Part.6
Open the relevant failure case
- SDK-1: missing prerequisites
- SDK-2: macOS CLT choice
- SDK-3: number versus string/full input
- SDK-4: library hash differs
How to read numbers and file names
Part.1–8 identifies the current tool manuals. W1–W4 and codes such as GUI-01 identify exercises inside a Part. Use Case 1–5 is a separate retained procedure sequence, not the Part numbering. Case A–J and codes such as SDK-1 or IH-1 identify troubleshooting scenarios. Older filenames and pN section IDs remain valid bookmarks; read the page heading for the current Part number.
Exercise files: check the role before saving
Distinguish source-only JSON, complete requests and intentional errors. TXT files are human worksheets, not profiles, API inputs or GAPE manifests. If a file opens in the browser, save it with the correct extension and UTF-8.
Before starting: file roles, paths and shell
Save the exercise files at the beginning of this manual into a fresh workspace and check their roles. TXT worksheets are human notes, not client profiles, API requests or GAPE manifests. Distinguish source-only JSON, complete requests and intentional type-error examples too.
Use bash for macOS/Linux and PowerShell for Windows. Do not copy prompts. Replace /absolute/path, C:\absolute\path and bracketed values with actual supplied values first; retain quotes. Commands using variables need the setup shell. In a new shell restore paths only, without overwriting old outputs/logs. Long code and tables scroll horizontally.
Company connection/enrollment, approval, supported Packs, published targets and approved manifests require actual supplied material at their relevant steps. Do not invent IDs, screen names or addresses. Read each W section's success and failure/return criteria, then perform one step at a time.
W1 · SDK-01: restore installation paths and create a Custom result
Use the SDK prepared in Part.1. Replace the first sdk_install/$sdkInstall value if installed elsewhere. Use fresh VibePackr-SDK-practice-01; do not precreate final candidate folders. Choose another number when it exists. Downloads above let you inspect complete inputs; the default exercise copies the installed SDK's matching-version examples.
sdk_install="$HOME/VibePackr-SDK-install-01"
sdk_exe="$sdk_install/sdk/bin/packr-sdk-engine"
sdk_deps="$sdk_install/dependencies"
sdk_native_args=()
sdk_practice="$HOME/VibePackr-SDK-practice-01"
test -x "$sdk_exe" || exit 1
test -f "$sdk_install/sdk/examples/read-only-custom-api.json" || exit 1
test -f "$sdk_install/sdk/examples/read-only-mcp-transcript.json" || exit 1
test ! -e "$sdk_practice" || exit 1
umask 077
mkdir -m 700 "$sdk_practice" || exit 1
mkdir "$sdk_practice/inputs" "$sdk_practice/runs" || exit 1
cp "$sdk_install/sdk/examples/read-only-custom-api.json" "$sdk_practice/inputs/custom.json" || exit 1
cp "$sdk_install/sdk/examples/read-only-mcp-transcript.json" "$sdk_practice/inputs/mcp.json" || exit 1
"$sdk_exe" analyze "$sdk_practice/inputs/custom.json" unused || exit 1$sdkInstall = Join-Path $env:USERPROFILE 'VibePackr-SDK-install-01'
$sdkExe = Join-Path $sdkInstall 'sdk\bin\packr-sdk-engine.exe'
$sdkDeps = Join-Path $sdkInstall 'dependencies'
$sdkPractice = Join-Path $env:USERPROFILE 'VibePackr-SDK-practice-01'
if (!(Test-Path -LiteralPath $sdkExe -PathType Leaf)) { throw 'Set the actual installed SDK path' }
if (Test-Path -LiteralPath $sdkPractice) { throw 'Choose a fresh practice path' }
New-Item -ItemType Directory -Path $sdkPractice -ErrorAction Stop | Out-Null
$sdkInputs = Join-Path $sdkPractice 'inputs'
$sdkRuns = Join-Path $sdkPractice 'runs'
New-Item -ItemType Directory -Path $sdkInputs,$sdkRuns -ErrorAction Stop | Out-Null
Copy-Item -LiteralPath (Join-Path $sdkInstall 'sdk\examples\read-only-custom-api.json') -Destination (Join-Path $sdkInputs 'custom.json') -ErrorAction Stop
Copy-Item -LiteralPath (Join-Path $sdkInstall 'sdk\examples\read-only-mcp-transcript.json') -Destination (Join-Path $sdkInputs 'mcp.json') -ErrorAction Stop
& $sdkExe analyze (Join-Path $sdkInputs 'custom.json') unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed' }Choose exactly one route below. The installed-toolchain route needs supported Rust/native tools. The optional set also works on connected machines and is not a product default. Do not switch routes to evade a failed check.
A. Installed-toolchain run:
"$sdk_exe" run "$sdk_practice/inputs/custom.json" "$sdk_practice/runs/custom-01" || exit 1& $sdkExe run (Join-Path $sdkInputs 'custom.json') (Join-Path $sdkRuns 'custom-01')
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }B. Supplied-set run-offline: run only your OS's verification block first.
# macOS ARM64 only
"$sdk_exe" verify-offline-dependencies MACOS_ARM64 "$sdk_deps" || exit 1# Debian 13 AMD64 only
"$sdk_exe" verify-offline-dependencies DEBIAN_13_AMD64 "$sdk_deps" || exit 1& $sdkExe verify-offline-dependencies WINDOWS_AMD64 $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Dependency verification failed' }The Bash setup initializes sdk_native_args=() (no extra native options). Leave it empty for the default SYSTEM_ACTIVE route and on Debian. Only on macOS, if you explicitly chose the installed Command Line Tools route, set this once in the same Bash session before the first run-offline command:
# macOS CLT route only; omit this block for SYSTEM_ACTIVE or Debian
sdk_native_args=(--macos-developer-selection COMMAND_LINE_TOOLS)Every Bash run-offline command below expands this same array, so W2–W4 retain your choice. In a new Bash session restore the path variables and this selected array; do not recreate the practice directories. These are Bash arrays, not PowerShell commands.
After actual verification passage:
"$sdk_exe" run-offline "$sdk_practice/inputs/custom.json" "$sdk_practice/runs/custom-01" "$sdk_deps" "${sdk_native_args[@]}" || exit 1& $sdkExe run-offline (Join-Path $sdkInputs 'custom.json') (Join-Path $sdkRuns 'custom-01') $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }The selected array passes the macOS option to each B execution. The default is SYSTEM_ACTIVE; it does not change system developer selection. Windows uses the PowerShell blocks without this Bash array.
| Inspect after success | Location/expected content |
|---|---|
| Final directory | runs/custom-01, distinct from private failed stages |
| Files | adapter.rs, libadapter.rlib, README.md, manifest.json |
| manifest.status/authority_granted | CUSTOMER_REVIEW_CANDIDATE/false |
| stages/stage_digests | ANALYZE_GAP, GENERATE, BUILD, VALIDATE, PACKAGE |
| files | Digests for README.md, adapter.rs, libadapter.rlib |
Open README/source/manifest in a text editor. .rlib is not an executable. Classify analyze refusals under full input/encoding, TOOLCHAIN_UNAVAILABLE under route/native prerequisites, and OUTPUT_EXISTS_OR_UNAVAILABLE under existing output/fresh writable path. Preserve a refusal and stop before the next exercise.
W2 · SDK-02: run MCP into a separate result directory
Keep W1's path variables. Setup copied inputs/mcp.json. Read tools/list, read_repository, the synthetic response and name→repository_id/sha→revision mappings, then analyze the complete input.
"$sdk_exe" analyze "$sdk_practice/inputs/mcp.json" unused || exit 1& $sdkExe analyze (Join-Path $sdkInputs 'mcp.json') unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed; preserve the original error' }Run only the route selected in W1.
A. run:
"$sdk_exe" run "$sdk_practice/inputs/mcp.json" "$sdk_practice/runs/mcp-01" || exit 1& $sdkExe run (Join-Path $sdkInputs 'mcp.json') (Join-Path $sdkRuns 'mcp-01')
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }B. run-offline:
"$sdk_exe" run-offline "$sdk_practice/inputs/mcp.json" "$sdk_practice/runs/mcp-01" "$sdk_deps" "${sdk_native_args[@]}" || exit 1& $sdkExe run-offline (Join-Path $sdkInputs 'mcp.json') (Join-Path $sdkRuns 'mcp-01') $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }Retain the same macOS CLT option if selected. Inspect mcp-01's four files, five stages and input digest independently. This validates local transcript mapping, not an MCP server connection or credentials. Hand over actual target/protocol refusals without switching to a live server call.
W3 · SDK-03: edit a string score and generate a fresh candidate
Create a copy first:
test ! -e "$sdk_practice/inputs/custom-02.json" || exit 1
cp "$sdk_practice/inputs/custom.json" "$sdk_practice/inputs/custom-02.json" || exit 1$sdkModified = Join-Path $sdkInputs 'custom-02.json'
if (Test-Path -LiteralPath $sdkModified) { throw 'Choose a fresh input name' }
Copy-Item -LiteralPath (Join-Path $sdkInputs 'custom.json') -Destination $sdkModified -ErrorAction StopEdit only these values in custom-02.json using a UTF-8 text editor. Do not replace the complete file with this excerpt.
draft.fixture.response.score = "88"
draft.fixture.response.component = "my-test-component"Logical mapping expectation: component="my-test-component", integer quality_score=88. The command does not separately print this object to stdout, nor is it a live API response. Supplied custom-api-score-number.json instead makes score numeric: it is an intentional type-error example. Keep it separate from positive input and do not change declarations to force acceptance.
"$sdk_exe" analyze "$sdk_practice/inputs/custom-02.json" unused || exit 1& $sdkExe analyze (Join-Path $sdkInputs 'custom-02.json') unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed; preserve the original error' }After actual analysis passage, use the selected route.
A. run:
"$sdk_exe" run "$sdk_practice/inputs/custom-02.json" "$sdk_practice/runs/custom-02" || exit 1& $sdkExe run (Join-Path $sdkInputs 'custom-02.json') (Join-Path $sdkRuns 'custom-02')
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }B. run-offline:
"$sdk_exe" run-offline "$sdk_practice/inputs/custom-02.json" "$sdk_practice/runs/custom-02" "$sdk_deps" "${sdk_native_args[@]}" || exit 1& $sdkExe run-offline (Join-Path $sdkInputs 'custom-02.json') (Join-Path $sdkRuns 'custom-02') $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }Retain the same macOS CLT option when used. Compare original/edited input digests and manifests. Mapping source may remain unchanged while input/execution records differ. On failure check complete input, string type and UTF-8 first.
W4 · SDK-04: repeat the same input and compare individual files
Retain original inputs/custom.json and matching OS, SDK, compiler, dependencies and route. Use fresh final path custom-repeat-01.
A. run:
"$sdk_exe" run "$sdk_practice/inputs/custom.json" "$sdk_practice/runs/custom-repeat-01" || exit 1& $sdkExe run (Join-Path $sdkInputs 'custom.json') (Join-Path $sdkRuns 'custom-repeat-01')
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }B. run-offline:
"$sdk_exe" run-offline "$sdk_practice/inputs/custom.json" "$sdk_practice/runs/custom-repeat-01" "$sdk_deps" "${sdk_native_args[@]}" || exit 1& $sdkExe run-offline (Join-Path $sdkInputs 'custom.json') (Join-Path $sdkRuns 'custom-repeat-01') $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }Retain the same macOS CLT option, then query file digests:
# macOS
shasum -a 256 "$sdk_practice/runs/custom-01/adapter.rs" "$sdk_practice/runs/custom-repeat-01/adapter.rs"
shasum -a 256 "$sdk_practice/runs/custom-01/libadapter.rlib" "$sdk_practice/runs/custom-repeat-01/libadapter.rlib"# Linux
sha256sum "$sdk_practice/runs/custom-01/adapter.rs" "$sdk_practice/runs/custom-repeat-01/adapter.rs"
sha256sum "$sdk_practice/runs/custom-01/libadapter.rlib" "$sdk_practice/runs/custom-repeat-01/libadapter.rlib"Get-FileHash -LiteralPath (Join-Path $sdkRuns 'custom-01\adapter.rs'),(Join-Path $sdkRuns 'custom-repeat-01\adapter.rs') -Algorithm SHA256
Get-FileHash -LiteralPath (Join-Path $sdkRuns 'custom-01\libadapter.rlib'),(Join-Path $sdkRuns 'custom-repeat-01\libadapter.rlib') -Algorithm SHA256Compare source with source and library with library. Whole-manifest hashes need not match. Check input digest, compiler, five stages and dependency before/after records too. If matching conditions produce different file hashes, preserve both inputs/results/versions and use SDK-4. In a new terminal restore only path variables; do not repeat folder-creation setup against existing work.
More exercises and checklists
Reading sequence
Check inputs → choose a task → use the detailed first exercise/commands below → inspect results → modify/repeat → follow the relevant failure case. Part numbers are not a mandatory installation sequence; choose only needed tools.
Prerequisites and input
Supported OS SDK, complete examples, installed toolchain or optional Rust set, and native OS prerequisites.
Both online and offline environments remain available. The optional SDK Rust set provisions SDK builds in closed on-premises environments; it is not a product default. Use actual supplied company endpoints, approval and enrollment material where an exercise needs them.
Find an exercise or case
| Exercise | Task |
|---|---|
| SDK-01 | Complete the five-stage Custom exercise |
| SDK-02 | Generate a separate candidate from an MCP transcript |
| SDK-03 | Change fixture values and compare candidates |
| SDK-04 | Check same-input reproducibility and retain results |
Exercise SDK-01 · Complete the five-stage Custom exercise
A first-time developer runs supplied read-only-custom-api.json after choosing installed-toolchain or supplied-set operation.
Actions:
- Prepare the OS SDK, selected toolchain and native prerequisites; compare digests.
- Extract privately and analyze the complete example; validate the full tree when using the dependency set.
- Run the OS-specific command against a nonexisting custom-01 result path; do not precreate the final directory.
- Read all four files and manifest stages/stage_digests/files; record original input and execution route.
Read the result: A local synthetic CUSTOMER_REVIEW_CANDIDATE; no live API connection.
Failure and next branch: Separate input, native/toolchain and existing-output refusals; use SDK-1–4 below.
Retain: OS, SDK/input digests, selected route, compiler, five stages and manifest.
Your exercise record: fill in time, version, input reference, actual actions, observed result and next owner. Do not copy expected outcomes into an execution success record.
Exercise SDK-02 · Generate a separate candidate from an MCP transcript
Use the supplied MCP transcript to review a legacy repository interface. Transcript analysis is separate from server connection.
Actions:
- Read tools/list, read_repository and synthetic response in the complete example.
- Inspect declared name→repository_id and sha→revision mappings and read-only scope.
- Analyze and run through the selected route into separate mcp-01; preserve Custom output.
- Inspect that MCP candidate's source/library/manifest, stages and input digest.
Read the result: A local transcript-based mapping candidate, not live MCP or credential validation.
Failure and next branch: For unsupported protocol/operation/permission, retain the actual reason and check supplied scope.
Retain: Complete MCP input digest, mapping/operation, candidate path and manifest.
Your exercise record: fill in time, version, input reference, actual actions, observed result and next owner. Do not copy expected outcomes into an execution success record.
Exercise SDK-03 · Change fixture values and compare candidates
Change score to string "88" and component to "my-test-component", retaining the same mapping.
Actions:
- Copy the complete example to fresh inputs-02/input.json and preserve the original.
- Edit only the two draft.fixture.response values as UTF-8, keeping score quoted.
- Analyze, then run into fresh custom-api-candidate-02 while retaining the original output.
- Compare source/library digests separately from manifest input/stage digests.
Read the result: Observe that fixture value changes may leave mapping source unchanged while input/execution records differ.
Failure and next branch: Do not edit generated source/manifest to match prior validation; restore the complete input if an excerpt was saved.
Retain: Original/edited digests, both candidates, expected and actual differences.
Your exercise record: fill in time, version, input reference, actual actions, observed result and next owner. Do not copy expected outcomes into an execution success record.
Exercise SDK-04 · Check same-input reproducibility and retain results
Check whether another output directory yields the same library. This is not a comparison across operating systems.
Actions:
- Fix OS, SDK, compiler, dependency set, full input digest and route.
- Run the same input into a fresh repeat path and preserve both outputs.
- Compare adapter.rs/libadapter.rlib separately, together with stages and dependency before/after records.
- Record field-level manifest differences; complete bytes may differ with execution records.
Read the result: Matching results establish reproducibility for those OS/version/input conditions, not universal determinism.
Failure and next branch: If hashes differ under matching conditions, preserve outputs and hand over the SDK-4 minimal record.
Retain: Both inputs, SDK/compiler/set identities, source/library digests and manifests.
Your exercise record: fill in time, version, input reference, actual actions, observed result and next owner. Do not copy expected outcomes into an execution success record.
Repeat, modify and resume after failure
Preserve earlier input/version/validation/results and distinguish a new input or revision. Use fresh output paths for SDK/GAPE; retain product-returned candidate revisions for Builder. Helper commands take the same complete request rather than the preceding result. Query an existing ID first when Work is running or uncertain.
After closing a terminal, restore absolute paths and the selected environment. Recheck affected stages and hand over pending company authority, registration or approval as pending. Support records use minimal messages/shareable references, without bulk private keys, raw prompts, customer responses or full logs.
Detailed commands, inputs and troubleshooting sources
The following detailed guides share the same maintained documentation source. Use their first exercises, complete JSON, OS-specific commands, file inspection and symptom cases. Cross-Part references lead to the appropriate manual.
Full workflow and skip conditions
SDK Engine: installation and candidate use online and offline
SDK Engine: installation and candidate use online and offline
Detailed section contents
What this component does
Use this tool on an integration workstation to prepare a candidate, before any live connection or Pack registration. It accepts a declared read-only Custom API operation or an MCP transcript, each with a synthetic response. The result is a locally compiled value-mapping library and its source. The tool does not call the source API or MCP server, read credentials, change the appliance, register a Pack, or execute Work.
For the supplied-set route, use the matching generation of the separate OS-native offline Rust dependency package. This set is optional when choosing the installed-toolchain online route. It supplies the compiler, standard library, Cargo and exact declared crate versions. Rust and crates need no additional download for that declared coverage. Other OSes, targets or new crates require their own verified inputs. macOS arm64 and Debian 13 amd64 bundles use Rust 1.96.0; Windows amd64 uses Rust 1.97.1.
Native prerequisites are separate: an existing Debian system C linker and libc development files; trusted Apple developer tools and SDK on macOS; or Visual Studio 2022 BuildTools MSVC 14.44.35207 and Windows SDK 10.0.26100.0. These native assets are not redistributed. Provisioning a fresh OS with all prerequisites has not been validated.
On macOS, run-offline uses the active Apple developer tools by default (SYSTEM_ACTIVE). To select an already installed Command Line Tools package for one run, append --macos-developer-selection COMMAND_LINE_TOOLS after the dependency root. This selects the registered /Library/Developer/CommandLineTools installation and retains all trust checks. It does not change the system developer selection or fall back to another installation. The option is rejected on other operating systems.
./bin/packr-sdk-engine run-offline examples/read-only-custom-api.json ./quality-candidate /absolute/path/dependencies --macos-developer-selection COMMAND_LINE_TOOLSCheck official signing/notarization and customer activation/delivery status in the package and separately trusted release inventory. Local example success does not authorize those states.
Choose the environment first: online and offline
SDK Engine can be used in both online development and offline environments. The offline dependency set is optional provisioning for closed on-premises installations where compiling an SDK adapter may otherwise require unavailable Rust assets. It does not set an offline-only product default. Its purpose is to address dependencies that can arise while building a new integration candidate with SDK Engine.
| Environment | Preparation | Command and evidence scope |
|---|---|---|
| Online development | Obtain the SDK through your approved delivery route and install or reuse a supported Rust compiler and native tools. The shared dependency set is also an option. | Use run with an existing toolchain, or run-offline with the verified dependency set. The checks and receipts differ. |
| Closed on-premises | Prepare the SDK, matching OS dependency set, native prerequisites and trusted digest inventory before transfer. | Verify the complete dependency tree, then use run-offline. The declared Rust/crate coverage requires no additional download. |
| Connected environment requiring fixed build inputs | Choose the same dependency set while the machine remains connected. | The command name run-offline does not disable the computer's network or make the whole product offline-only. |
The compatibility path below uses an installed compiler in an online development environment. Run it from the extracted SDK directory after checking the actual compiler selected by rustc --version, its supported target and native prerequisites. Choose fresh output directories. This path uses the compiler on PATH and does not provide the separate dependency set's full-tree/native-trust receipts; validate that environment separately.
rustc --version
./bin/packr-sdk-engine analyze examples/read-only-custom-api.json unused
./bin/packr-sdk-engine run examples/read-only-custom-api.json ./online-custom-candidate-01
./bin/packr-sdk-engine run examples/read-only-mcp-transcript.json ./online-mcp-candidate-01rustc --version
if ($LASTEXITCODE -ne 0) { throw 'Rust compiler unavailable' }
.\bin\packr-sdk-engine.exe analyze .\examples\read-only-custom-api.json unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed' }
.\bin\packr-sdk-engine.exe run .\examples\read-only-custom-api.json .\online-custom-candidate-01
if ($LASTEXITCODE -ne 0) { throw 'Custom candidate failed' }
.\bin\packr-sdk-engine.exe run .\examples\read-only-mcp-transcript.json .\online-mcp-candidate-01
if ($LASTEXITCODE -ne 0) { throw 'MCP candidate failed' }run is retained as a compatibility command for an installed compiler. It does not establish the same checks as the separately verified dependency route. Do not use it to avoid a failed run-offline trust or permission check. The dependency-set procedure below can also be chosen on a connected machine. Neither command's synthetic examples contact a live API or MCP server.
Prepare the two archives in a fresh location
The SDK archive contains bin, docs, examples, licenses and notices. The optional Rust dependency set contains DEPENDENCIES.json, FILES.json, toolchain, cargo-home and notices. Extracting the SDK alone does not install the optional dependencies. Use a new generation-specific location to preserve earlier installations and results.
| Platform | SDK | Optional dependency set | Native coverage to check |
|---|---|---|---|
| macOS ARM64 | Matching .tar.gz | RUST_DEPENDENCIES_MACOS_ARM64.tar.gz | Apple Silicon, registered Apple tools and SDK |
| Debian 13 AMD64 | Matching .tar.gz | RUST_DEPENDENCIES_DEBIAN_13_AMD64.tar.gz | x86-64, system C linker and libc development files |
| Windows AMD64 | Matching .zip | RUST_DEPENDENCIES_WINDOWS_AMD64.zip | x64, registered MSVC and Windows SDK |
Check both archives with shasum -a 256 on macOS, sha256sum on Debian, or Get-FileHash -Algorithm SHA256 on Windows. Compare with a separately trusted component inventory. A digest obtained from the same untrusted location does not establish publisher identity. Stop on a mismatch even if the file name is unchanged.
On Linux or macOS, replace the archive paths below with the real files. The example stops if the install root already exists. Use an unshared directory under your private home; every ancestor must also exclude writes by other users.
sdk_archive="/absolute/path/sdk-package.tar.gz"
deps_archive="/absolute/path/RUST_DEPENDENCIES_OS.tar.gz"
install_root="$HOME/VibePackr-SDK-install-01"
test ! -e "$install_root" || exit 1
umask 077
mkdir -m 700 "$install_root" || exit 1
mkdir "$install_root/sdk" "$install_root/dependencies" "$install_root/runs" || exit 1
tar -xzf "$sdk_archive" -C "$install_root/sdk" || exit 1
tar -xzf "$deps_archive" -C "$install_root/dependencies" || exit 1
cd "$install_root/sdk" || exit 1In Windows PowerShell 5.1, choose a fresh directory beneath an access-controlled user home. Check the organization's approved current-user directory and ACL first; avoid shared, synchronized or network locations. The example assumes that the parent permissions have already been verified. It neither overwrites an old directory nor changes system-wide ACLs.
$sdkArchive = 'C:\absolute\path\sdk-package.zip'
$depsArchive = 'C:\absolute\path\RUST_DEPENDENCIES_WINDOWS_AMD64.zip'
$installRoot = Join-Path $env:USERPROFILE 'VibePackr-SDK-install-01'
if (Test-Path -LiteralPath $installRoot) { throw 'Choose a fresh install root' }
New-Item -ItemType Directory -Path $installRoot -ErrorAction Stop | Out-Null
$sdkRoot = Join-Path $installRoot 'sdk'
$depsRoot = Join-Path $installRoot 'dependencies'
$runsRoot = Join-Path $installRoot 'runs'
New-Item -ItemType Directory -Path $sdkRoot,$depsRoot,$runsRoot -ErrorAction Stop | Out-Null
Expand-Archive -LiteralPath $sdkArchive -DestinationPath $sdkRoot -ErrorAction Stop
Expand-Archive -LiteralPath $depsArchive -DestinationPath $depsRoot -ErrorAction Stop
Set-Location -LiteralPath $sdkRootIf full dependency verification rejects the permissions, do not use that installation; resolve it through the approved installation procedure. Do not disable checks, elevate the product, bypass execution policy or change the system trust store. Extraction of a dependency set is optional when using only an existing toolchain in an online environment.
Check and install the supplied package
- Confirm that your release inventory lists SDK Engine for your workstation OS. Compare both SDK and dependency archive SHA-256 values with a separately trusted inventory before extraction. Verify a release signature when supplied; record an absent official distribution signature and distinguish an unsigned candidate from a signed release. Do not substitute a package for another OS.
- Extract the archive into a new, access-controlled directory. Keep the directory's
bin,docs, andexamplestogether. Use the signed release's platform-specific installation instructions for any system-wide placement. - Extract dependencies into a separate fresh directory writable only by the trusted current user. All intermediate directories must exclude other users’ writes. Preserve the included
cargo-homeas verified input: do not use it as a mutable cache or merge it into a global cache. No activation script or shell session mutation is needed. Replace the absolute dependency paths below with your actual paths, verify the full tree, then check the examples.
Linux or macOS terminal:
./bin/packr-sdk-engine verify-offline-dependencies DEBIAN_13_AMD64 /absolute/path/dependencies
# On macOS arm64 replace DEBIAN_13_AMD64 with MACOS_ARM64.
test -f examples/read-only-custom-api.json
test -f examples/read-only-mcp-transcript.json
./bin/packr-sdk-engine analyze examples/read-only-custom-api.json unusedWindows PowerShell:
.\bin\packr-sdk-engine.exe verify-offline-dependencies WINDOWS_AMD64 C:\absolute\path\dependencies
Test-Path .\examples\read-only-custom-api.json
Test-Path .\examples\read-only-mcp-transcript.json
.\bin\packr-sdk-engine.exe analyze .\examples\read-only-custom-api.json unusedanalyze reads the declaration without creating an output directory. A successful result reports authority_granted: false. If your release inventory lacks this component, stop and obtain the correct package through your support channel.
OS-specific examples with the optional dependency set
The commands below assume the preceding path variables remain in the same shell. Set actual absolute paths again in a new shell. The final unused argument to analyze is required by the CLI shape; it does not name a created output directory.
On macOS ARM64, this example explicitly chooses already installed Command Line Tools. The default selection is SYSTEM_ACTIVE; the option below applies only to that run.
./bin/packr-sdk-engine verify-offline-dependencies MACOS_ARM64 "$install_root/dependencies" || exit 1
./bin/packr-sdk-engine analyze examples/read-only-custom-api.json unused || exit 1
./bin/packr-sdk-engine run-offline examples/read-only-custom-api.json "$install_root/runs/custom-01" "$install_root/dependencies" --macos-developer-selection COMMAND_LINE_TOOLS || exit 1
./bin/packr-sdk-engine run-offline examples/read-only-mcp-transcript.json "$install_root/runs/mcp-01" "$install_root/dependencies" --macos-developer-selection COMMAND_LINE_TOOLS || exit 1On Debian 13 AMD64:
./bin/packr-sdk-engine verify-offline-dependencies DEBIAN_13_AMD64 "$install_root/dependencies" || exit 1
./bin/packr-sdk-engine analyze examples/read-only-custom-api.json unused || exit 1
./bin/packr-sdk-engine run-offline examples/read-only-custom-api.json "$install_root/runs/custom-01" "$install_root/dependencies" || exit 1
./bin/packr-sdk-engine run-offline examples/read-only-mcp-transcript.json "$install_root/runs/mcp-01" "$install_root/dependencies" || exit 1On Windows AMD64:
.\bin\packr-sdk-engine.exe verify-offline-dependencies WINDOWS_AMD64 $depsRoot
if ($LASTEXITCODE -ne 0) { throw 'Dependency verification failed' }
.\bin\packr-sdk-engine.exe analyze .\examples\read-only-custom-api.json unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed' }
.\bin\packr-sdk-engine.exe run-offline .\examples\read-only-custom-api.json (Join-Path $runsRoot 'custom-01') $depsRoot
if ($LASTEXITCODE -ne 0) { throw 'Custom candidate failed' }
.\bin\packr-sdk-engine.exe run-offline .\examples\read-only-mcp-transcript.json (Join-Path $runsRoot 'mcp-01') $depsRoot
if ($LASTEXITCODE -ne 0) { throw 'MCP candidate failed' }Inspect the first result and resume in a new terminal
After the OS-specific installation/run blocks create separate Custom and MCP candidates, inspect them below. SDK is not an installer that creates a desktop app icon: locate the extracted bin executable and result paths. Run commands from that SDK directory. The installed-toolchain online route does not require optional dependency variables.
If you used the installed-toolchain online run examples unchanged, results are online-custom-candidate-01 and online-mcp-candidate-01 under the SDK directory. Substitute those actual paths in the inspection commands below. runs/custom-01 and runs/mcp-01 belong to the earlier supplied-set run blocks.
Open the actual Custom result
ls -la "$install_root/runs/custom-01"
cat "$install_root/runs/custom-01/README.md"
cat "$install_root/runs/custom-01/adapter.rs"
cat "$install_root/runs/custom-01/manifest.json"$candidate01 = Join-Path $runsRoot 'custom-01'
Get-ChildItem -LiteralPath $candidate01
Get-Content -LiteralPath (Join-Path $candidate01 'README.md') -Raw -Encoding UTF8
Get-Content -LiteralPath (Join-Path $candidate01 'adapter.rs') -Raw -Encoding UTF8
Get-Content -LiteralPath (Join-Path $candidate01 'manifest.json') -Raw -Encoding UTF8| Item | First check | Meaning |
|---|---|---|
| Output directory | adapter.rs, libadapter.rlib, README.md, manifest.json | Distinct from failed temporary stages |
| adapter.rs | Component mapping and score → quality_score conversion | Synthetic value mapping, not an API client |
| manifest.json | compiler_version, 3 file digests, five stages, authority_granted=false | This execution's candidate and validation records |
| offline_execution | Dependency/native observations when using the supplied-set route | Do not assume the same receipt for online run |
| MCP output | Separate mcp-01 directory and repository mapping | Custom success is not MCP success |
libadapter.rlib is a Rust library; do not double-click or execute it as an OS program. Mapping 97 to an integer quality_score is part of synthetic validation, not a response from a live server. Read the original input values and compare mapping/stage records.
Create the editable input.json copy first
These commands copy the complete example into a fresh inputs-02 directory. Edit/analyze it here, then rerun in the later Edit input.json section. Choose a new number if that directory already exists.
test ! -e "$install_root/inputs-02" || exit 1
mkdir "$install_root/inputs-02" || exit 1
cp ./examples/read-only-custom-api.json "$install_root/inputs-02/input.json" || exit 1$inputs02 = Join-Path $installRoot 'inputs-02'
if (Test-Path -LiteralPath $inputs02) { throw 'Choose a fresh input folder' }
New-Item -ItemType Directory -Path $inputs02 -ErrorAction Stop | Out-Null
Copy-Item -LiteralPath .\examples\read-only-custom-api.json -Destination (Join-Path $inputs02 'input.json') -ErrorAction StopOpen this copy in an editor, keeping score a string "88" and setting component to "my-test-component". Changing fixture values while retaining mapping may leave adapter.rs unchanged. Preserve both the first and modified results.
After opening a new terminal
These commands restore the existing installation paths. Do not extract again or delete old results. Replace the root name if you used a different one, and select a fresh result directory for the next run.
install_root="$HOME/VibePackr-SDK-install-01"
test -f "$install_root/sdk/bin/packr-sdk-engine" || exit 1
cd "$install_root/sdk" || exit 1$installRoot = Join-Path $env:USERPROFILE 'VibePackr-SDK-install-01'
$sdkRoot = Join-Path $installRoot 'sdk'
$depsRoot = Join-Path $installRoot 'dependencies'
$runsRoot = Join-Path $installRoot 'runs'
Set-Location -LiteralPath $sdkRoot -ErrorAction Stop
if (!(Test-Path -LiteralPath '.\bin\packr-sdk-engine.exe' -PathType Leaf)) { throw 'SDK path does not match the prior installation' }Return path: executable missing → install root/nested extraction directory; analyze refusal → complete input/encoding; build refusal → selected dependencies/native prerequisites; output refusal → fresh name. Never open a failed temporary stage as a successful candidate.
Example declaration
The included file declares one synthetic read_quality operation. The source returns component and a string score; the target contract expects component and integer quality_score. This mapping is local preparation only.
{
"definition": {
"integration_id": "acme-quality-hub",
"operation_id": "read_quality",
"credential_requirements": [],
"execution_boundary": "READ_ONLY_SYNTHETIC_SANDBOX"
},
"mapping": {
"field_mappings": [
{"source": "component", "target": "component", "transform": "IDENTITY"},
{"source": "score", "target": "quality_score", "transform": "STRING_TO_INTEGER"}
]
},
"fixture": {
"scope": "LOCAL_SYNTHETIC_SANDBOX",
"response": {"component": "fixture-component", "score": "97"}
}
}This excerpt explains the fields; run the complete supplied JSON file, which also binds the exact registered Contract, adapter, schema digest, permissions, and evidence capabilities. Do not place a password, token, private key, or real customer response in a fixture.
Example: a legacy repository exposed through MCP
If your organization exposes a legacy repository through a supported MCP interface, start with examples/read-only-mcp-transcript.json. Its synthetic transcript declares tools/list and a read-only read_repository tool. The mapping copies name to repository_id and sha to revision. The Engine parses the supplied transcript; it does not establish an MCP session.
./bin/packr-sdk-engine analyze examples/read-only-mcp-transcript.json unused
./bin/packr-sdk-engine run-offline examples/read-only-mcp-transcript.json ./repository-candidate /absolute/path/dependenciesWindows PowerShell:
.\bin\packr-sdk-engine.exe analyze .\examples\read-only-mcp-transcript.json unused
.\bin\packr-sdk-engine.exe run-offline .\examples\read-only-mcp-transcript.json .\repository-candidate C:\absolute\path\dependenciesBefore substituting a real declaration, confirm the exact operation, field types, read-only permission, contract revision, and synthetic response with the integration owner. A live MCP tool call and any credential use require their own approved connection workflow.
Run the five stages
From the extracted package directory, choose an output directory that does not already exist:
./bin/packr-sdk-engine run-offline examples/read-only-custom-api.json ./quality-candidate /absolute/path/dependenciesWindows:
.\bin\packr-sdk-engine.exe run-offline .\examples\read-only-custom-api.json .\quality-candidate C:\absolute\path\dependenciesOne command performs the stages in order:
- ANALYZE_GAP checks the registered Contract, adapter, protocol revision, read-only operation, bounded input, and synthetic fixture.
- GENERATE creates
adapter.rs, a local mapping function. It contains no API transport, credential handling, or Work execution path. - BUILD invokes the absolute packaged
rustcafter full tree verification to compilelibadapter.rlibfrom that generated source. - VALIDATE compiles and runs a temporary fixture test. It verifies the expected mapping and denial of an unknown source field. The temporary fixture source and test executable are removed after success.
- PACKAGE writes
README.mdandmanifest.json. The manifest records the input digest, compiler version, SHA-256 for the three candidate files, and the input and output digest of each stage.
The expected output directory contains exactly adapter.rs, libadapter.rlib, README.md, and manifest.json. The v2 manifest includes offline_execution: minimal public digests for the pre/post tree, compiler, native prerequisites, environment and argv. It is an unsigned observation record, not independent runtime attestation or a release signature. Check the manifest. The result is CUSTOMER_REVIEW_CANDIDATE; it is not a live integration or an authorization decision.
Edit input.json and generate a second candidate
Copy the complete supplied examples/read-only-custom-api.json into input.json in a fresh input workspace. Preserve the original example and first output. Edit only these two values in a text editor and save as UTF-8. Do not replace the whole file with this excerpt.
draft.fixture.response.component = "my-test-component"
draft.fixture.response.score = "88"Keep score quoted: the source field is a string and STRING_TO_INTEGER converts it to integer quality_score. Do not guess replacements for Contract IDs, adapter revisions, schema digests, permissions or evidence capabilities. PowerShell 5.1's default Out-File can write UTF-16; choose UTF-8 in your JSON editor.
For example, create a fresh inputs-02 directory under the install root and save input.json there before running the following. On macOS retain the Apple tools selection used earlier. Never merge the two candidate directories.
./bin/packr-sdk-engine analyze "$install_root/inputs-02/input.json" unused
./bin/packr-sdk-engine run-offline "$install_root/inputs-02/input.json" "$install_root/runs/custom-api-candidate-02" "$install_root/dependencies"
# For an explicit macOS CLT selection append: --macos-developer-selection COMMAND_LINE_TOOLS$input02 = Join-Path $installRoot 'inputs-02\input.json'
.\bin\packr-sdk-engine.exe analyze $input02 unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed' }
.\bin\packr-sdk-engine.exe run-offline $input02 (Join-Path $runsRoot 'custom-api-candidate-02') $depsRoot
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed' }If you selected the installed-toolchain online path, use run with the same input and a fresh output; omit the dependency path and macOS selection option. Keep records for the two execution paths separate.
Read adapter.rs and manifest.json and compare outputs
adapter.rs contains field-mapping code. Changing only synthetic response values while retaining mapping rules may leave that source unchanged. manifest.json records the individual input, artifacts and stages, so input digests, paths and observations can differ. Do not expect .rlib hashes from different OSes or compiler versions to match.
cat "$install_root/runs/custom-api-candidate-02/adapter.rs"
cat "$install_root/runs/custom-api-candidate-02/manifest.json"Get-Content -LiteralPath (Join-Path $runsRoot 'custom-api-candidate-02\adapter.rs')
Get-Content -LiteralPath (Join-Path $runsRoot 'custom-api-candidate-02\manifest.json') -Raw
Get-FileHash -LiteralPath (Join-Path $runsRoot 'custom-api-candidate-02\libadapter.rlib') -Algorithm SHA256Editing generated source invalidates the recorded manifest hashes. For a reproducible Engine candidate, edit supported declarations/mappings in the input JSON and rerun into a new directory. Do not edit the manifest to represent altered artifacts as previously validated. Arbitrary Rust code, additional crates and live networking are outside this synthetic example's validation coverage.
Check reproducibility by rerunning the same complete input on the same OS with the exact SDK, compiler and dependencies into another fresh directory, then comparing SHA-256 for adapter.rs and libadapter.rlib. Comparing two different inputs answers a different question. Entire manifest hashes need not match; inspect all five stages, artifact/input digests and before/after dependency-tree digests as well.
Common problems and exact actions
| What you see | Likely cause | Action |
|---|---|---|
TARGET_MISMATCH, FIXTURE_REJECTED, CREDENTIAL_REQUIREMENT, or INVALID_INPUT | The operation, Contract/adapter revision, input shape, or fixture is unsupported; a credential requirement may be present. | Compare the complete declaration with the release's supported target list. Remove secrets from fixtures. Do not change the target ID to a guessed value. |
TOOLCHAIN_UNAVAILABLE before a library appears | Dependency files, platform, permissions, compiler or native tool trust verification failed. | Check full dependency verification and native prerequisites. Preserve the error and failed stage. Do not bypass trust/permission checks or fall back to PATH/Rustup downloads. |
OUTPUT_EXISTS_OR_UNAVAILABLE | The selected directory exists from an earlier attempt or cannot be created. | Inspect its contents and choose a writable new directory. Do not merge outputs from two attempts. |
| Fixture test fails | The declared mapping and response do not agree or a generated value cannot be converted. | Correct the source declaration or synthetic fixture, then run again into a new directory. Do not use a fixture PASS as proof of a live API. |
| Archive hash or signature differs | Wrong or modified download. | Stop; get the package listed in the release inventory. |
| Candidate compiles but does not appear on the appliance | This tool only prepares local code. | Use the separate reviewed registration, binding, and Work workflow supplied with your release. Require authenticated decisions and a matching Work receipt. |
run-offline builds in a private sibling stage, performs post-use verification, then publishes with an atomic no-replace move. On failure the final path remains absent, while a private stage and failure record may remain. Never consume a stage as a candidate. A later run does not automatically reuse earlier failed stages or results. Retain its error output when contacting support; remove any customer data before sharing it.
Update, retain, remove and prepare security review materials
Extract each SDK generation into a separate directory and compare its dependency set and digest inventory. Preserve earlier inputs, packages and outputs while validating the new location, then change the working path. To roll back, select the recorded previous SDK with its matching dependencies and input. Do not overwrite or reuse an old candidate directory automatically.
Before removal retain the input JSON, edits, candidate artifacts/manifests and support record. Manage the portable installation separately from results. This procedure installs no system service and changes no global Rustup/Cargo configuration; it does not require removing those settings or a pre-existing organizational toolchain.
For security review retain package/dependency digests, exact versions and OS, file inventory, LICENSE/NOTICE, any supplied SBOM and advisory-query date, and actual checks with their limits. Distinguish unsigned candidates from signed releases. Matching digests establish byte identity; the manifest is not independent execution attestation. Known-marker checks do not guarantee universal secret absence or certify every supply-chain, privilege, network-isolation or current vulnerability property.
Use the separately supplied procedures and authority for appliance registration, live connections, customer activation/delivery and Work. Return to the post-install tool index or prepare the next integration declaration using the source Document guide.
Support record
Record both package digests and whether a signature was supplied, workstation OS, verified compiler version, input JSON digest, target Contract and adapter revisions, stage result, candidate manifest, and your integration owner. For a later live run, record the separate appliance registration decision and Work receipt. Keep secrets and raw customer responses out of the support record.
Read the tool-specific troubleshooting examples
These teaching examples use documented input, command and authority boundaries. Read them alongside actual product states/reasons; do not treat illustrative outcomes as execution history. Distinguish checks shared by online/offline environments from checks specific to the optional dependency route.
Worked scenario SDK-1: After extracting only the SDK, distinguish dependency and native prerequisites
Situation: The SDK executable opens, but an optional-dependency build does not start. Check SDK extraction, Rust-set verification and native OS tooling as separate stages.
Read these observations separately.
- SDK: bin/docs/examples confirm SDK file preparation only.
- Dependencies: matching-OS DEPENDENCIES.json/FILES.json/toolchain belong in a separate root.
- Native tools: release prerequisites are separate from the Rust set.
Check and action sequence:
- Record whether this is the installed-toolchain or optional-set route; this scenario concerns the latter.
- Compare SDK/set digests and platform, then use verify-offline-dependencies with the exact absolute root.
- If refusal remains after tree verification, check native prerequisites, path permissions and product reasons; do not switch routes to avoid checks.
Condition for resuming: Record preparation complete only after selected-route prerequisites and all five stages pass into fresh output.
If still unresolved: Hand over exact missing assets/unsupported combinations; do not fill gaps with arbitrary downloads or mixed global caches.
Worked scenario SDK-2: Select an installed macOS CLT package for one run
Situation: A Mac has multiple Apple tool installations. A run using the active system selection is refused while registered Command Line Tools are also installed. Presence alone does not establish trust validation.
Read these observations separately.
- Default tool selection: SYSTEM_ACTIVE; this is separate from an online/offline operating default.
- COMMAND_LINE_TOOLS selects an already installed registered location.
- Trust checks: still apply to the selected tools.
Check and action sequence:
- Check SDK/dependency generation and Apple tools/SDK prerequisites.
- Append the documented --macos-developer-selection COMMAND_LINE_TOOLS after the dependency root and choose fresh output.
- If refused again, retain the exact reason; do not change global developer selection, the trust store or official signing status.
Condition for resuming: Record success only for the selected tools and candidate validation actually observed for that run.
If still unresolved: Hand over absent/refused CLT prerequisites; do not use the option on another OS.
Worked scenario SDK-3: Changing score to a number or replacing the request with an excerpt
Situation: A user changes score to 88 without quotes or saves only an explanatory excerpt as input.json. Valid JSON syntax does not establish the declared type or complete request structure.
Read these observations separately.
- Original example: contains the full request_id/correlation_id/draft.
- score: source schema requires a string; the mapped quality_score is integer.
- Encoding: PowerShell 5.1 default file output may not be UTF-8.
Check and action sequence:
- Copy the complete original into a fresh input path; set draft.fixture.response.score to "88" and component to "my-test-component".
- Check UTF-8 and completeness, then inspect analyze; do not guess edits to target IDs or schema digests.
- Run the selected route into fresh output and inspect manifest, source and library together.
Condition for resuming: Close only that candidate when the edited supported input and its five stages/artifact digests are confirmed.
If still unresolved: Do not represent a remaining target/authority/data-boundary refusal as resolved by editing fixture values.
Worked scenario SDK-4: adapter.rs matches but the library digest differs
Situation: Two outputs have identical adapter.rs but different libadapter.rlib digests. Before comparing paths alone, establish whether input, OS, compiler, SDK, dependencies and command are identical.
Read these observations separately.
- Matching source digest: does not establish all build inputs.
- Different OS/compiler/SDK generations: do not assume identical libraries.
- Manifest: per-run observations can make its overall digest differ.
Check and action sequence:
- Compare full input digest, compiler, SDK, dependencies, platform and execution route side by side.
- For same-input reproducibility, use the identical verified combination in fresh output and retain previous results/failures.
- Compare adapter.rs and libadapter.rlib separately and read stages/before-after dependencies; do not edit manifests to force a match.
Condition for resuming: Record matching repeats as reproducibility for that OS/version/input combination only.
If still unresolved: If conditions match but bytes differ, hand over package/input/artifact digests and minimal run records; do not turn failed protection checks into success.
첫 사용 점검·복귀 지점
- 시작 지점
- W1에서 새 연습 폴더·동일 버전 예제를 준비하고 전체 Custom 요청을 분석합니다. 각 결과마다 A(run) 또는 B(run-offline) 하나만 선택합니다.
- 필요한 준비물
- 실제 SDK 경로·지원 Rust·네이티브 도구가 필요하며 B에서만 선택 세트를 검증합니다. Bash의 네이티브 옵션 배열은 W1~W4에서 유지하며 Windows는 별도 명령을 사용합니다.
- 확인할 실습 결과
- 각 결과의 README·소스·manifest를 읽고 소스·라이브러리 해시를 따로 확인합니다. 네 파일·다섯 단계·후보 상태는 실행·등록된 연동을 뜻하지 않습니다.
실습·다음 단계
실패 시 바로 열기
번호·파일 이름 읽는 법
Part.1~8은 현재 도구별 매뉴얼, W1~W4와 GUI-01 같은 코드는 그 안의 실습입니다. Use Case 1~5는 보존한 작업 안내 번호이며 Part 번호와 다릅니다. Case A~J와 SDK-1·IH-1 같은 코드는 문제 해결 사례입니다. 이전 파일 이름과 pN 절 주소는 기존 북마크용으로 유지하므로 현재 Part는 본문 제목으로 확인합니다.
실습 파일: 내려받기 전에 용도 확인
JSON은 소스·전체 요청·의도적 오류 예제를 구분합니다. TXT는 사람이 채우는 양식이며 프로필·API 입력·GAPE manifest가 아닙니다. 파일이 브라우저에 열리면 다른 이름으로 저장하고 UTF-8/확장자를 확인하십시오.
시작 전에: 파일 종류·경로·셸 확인
이 문서 첫머리의 실습 파일을 새 작업 폴더에 저장하고 역할을 확인합니다. TXT 양식은 사람이 작성하는 메모이며 앱 프로필·API 요청·GAPE manifest가 아닙니다. JSON도 소스 Document, 전체 요청, 의도적 오류 예제를 구분합니다.
macOS/Linux는 bash, Windows는 PowerShell 블록을 사용합니다. 프롬프트는 복사하지 않습니다. /absolute/path·C:\absolute\path·대괄호는 실제 제공 값으로 먼저 바꾸고 따옴표를 유지합니다. 변수가 있는 명령은 준비 절과 같은 셸에서 실행합니다. 새 셸이면 경로만 다시 지정하며 기존 결과·로그를 덮지 않습니다. 긴 코드/표는 가로 스크롤할 수 있습니다.
회사별 연결/등록·승인·지원 Pack·게시 대상·승인 manifest가 필요한 단계에서는 실제 제공 자료가 있어야 합니다. 없는 자료의 ID·화면 이름·주소를 만들어 진행하지 않습니다. 각 W 절의 정상 결과와 실패 후 복귀 기준을 모두 읽고 한 단계씩 수행합니다.
W1 · SDK-01: 설치 경로 복원부터 Custom 결과까지
Part.1에서 준비한 SDK 설치가 필요합니다. 다른 루트에 설치했다면 첫 줄의 sdk_install/$sdkInstall만 실제 경로로 바꿉니다. 새 연습 폴더 VibePackr-SDK-practice-01을 사용하며 결과 최종 폴더는 미리 만들지 않습니다. 같은 이름이 있으면 새 번호를 고릅니다. 이 Part 앞의 다운로드 파일은 전체 입력을 살펴보는 용도이며 기본 실습은 설치된 SDK의 같은 버전 예제를 복사합니다.
sdk_install="$HOME/VibePackr-SDK-install-01"
sdk_exe="$sdk_install/sdk/bin/packr-sdk-engine"
sdk_deps="$sdk_install/dependencies"
sdk_native_args=()
sdk_practice="$HOME/VibePackr-SDK-practice-01"
test -x "$sdk_exe" || exit 1
test -f "$sdk_install/sdk/examples/read-only-custom-api.json" || exit 1
test -f "$sdk_install/sdk/examples/read-only-mcp-transcript.json" || exit 1
test ! -e "$sdk_practice" || exit 1
umask 077
mkdir -m 700 "$sdk_practice" || exit 1
mkdir "$sdk_practice/inputs" "$sdk_practice/runs" || exit 1
cp "$sdk_install/sdk/examples/read-only-custom-api.json" "$sdk_practice/inputs/custom.json" || exit 1
cp "$sdk_install/sdk/examples/read-only-mcp-transcript.json" "$sdk_practice/inputs/mcp.json" || exit 1
"$sdk_exe" analyze "$sdk_practice/inputs/custom.json" unused || exit 1$sdkInstall = Join-Path $env:USERPROFILE 'VibePackr-SDK-install-01'
$sdkExe = Join-Path $sdkInstall 'sdk\bin\packr-sdk-engine.exe'
$sdkDeps = Join-Path $sdkInstall 'dependencies'
$sdkPractice = Join-Path $env:USERPROFILE 'VibePackr-SDK-practice-01'
if (!(Test-Path -LiteralPath $sdkExe -PathType Leaf)) { throw 'Set the actual installed SDK path' }
if (Test-Path -LiteralPath $sdkPractice) { throw 'Choose a fresh practice path' }
New-Item -ItemType Directory -Path $sdkPractice -ErrorAction Stop | Out-Null
$sdkInputs = Join-Path $sdkPractice 'inputs'
$sdkRuns = Join-Path $sdkPractice 'runs'
New-Item -ItemType Directory -Path $sdkInputs,$sdkRuns -ErrorAction Stop | Out-Null
Copy-Item -LiteralPath (Join-Path $sdkInstall 'sdk\examples\read-only-custom-api.json') -Destination (Join-Path $sdkInputs 'custom.json') -ErrorAction Stop
Copy-Item -LiteralPath (Join-Path $sdkInstall 'sdk\examples\read-only-mcp-transcript.json') -Destination (Join-Path $sdkInputs 'mcp.json') -ErrorAction Stop
& $sdkExe analyze (Join-Path $sdkInputs 'custom.json') unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed' }아래 두 실행 경로 중 하나만 선택합니다. 온라인 기존 툴체인은 지원 Rust/네이티브 도구가 준비돼야 합니다. 선택 세트는 네트워크가 있는 환경에서도 쓸 수 있고 제품 기본값이 아닙니다. 검사 실패를 우회하려고 경로를 바꾸지 않습니다.
A. 기존 설치 툴체인의 run:
"$sdk_exe" run "$sdk_practice/inputs/custom.json" "$sdk_practice/runs/custom-01" || exit 1& $sdkExe run (Join-Path $sdkInputs 'custom.json') (Join-Path $sdkRuns 'custom-01')
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }B. 선택 의존성 세트의 run-offline: 먼저 자기 OS의 검증 한 블록만 수행합니다.
# macOS ARM64 only
"$sdk_exe" verify-offline-dependencies MACOS_ARM64 "$sdk_deps" || exit 1# Debian 13 AMD64 only
"$sdk_exe" verify-offline-dependencies DEBIAN_13_AMD64 "$sdk_deps" || exit 1& $sdkExe verify-offline-dependencies WINDOWS_AMD64 $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Dependency verification failed' }Bash 준비의 sdk_native_args=()는 추가 네이티브 옵션이 없는 배열입니다. 기본 SYSTEM_ACTIVE와 Debian은 비워 둡니다. macOS에서 이미 설치된 Command Line Tools 경로를 명시적으로 선택한 경우에만 첫 run-offline 전에 같은 Bash에서 한 번 지정합니다.
# macOS CLT 경로 전용; SYSTEM_ACTIVE 또는 Debian은 생략
sdk_native_args=(--macos-developer-selection COMMAND_LINE_TOOLS)아래 Bash run-offline은 같은 배열을 펼치므로 W2~W4에서도 선택을 유지합니다. 새 Bash에서는 경로 변수와 선택 배열만 복원하고 연습 폴더를 다시 만들지 않습니다. Bash 배열이며 PowerShell 명령이 아닙니다.
검증이 실제 통과한 후:
"$sdk_exe" run-offline "$sdk_practice/inputs/custom.json" "$sdk_practice/runs/custom-01" "$sdk_deps" "${sdk_native_args[@]}" || exit 1& $sdkExe run-offline (Join-Path $sdkInputs 'custom.json') (Join-Path $sdkRuns 'custom-01') $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }선택 배열이 각 B 실행에 macOS 옵션을 전달합니다. 기본은 SYSTEM_ACTIVE이며 시스템 개발 도구 선택을 바꾸지 않습니다. Windows는 Bash 배열 없이 별도 PowerShell 명령을 사용합니다.
| 성공 결과에서 직접 볼 것 | 위치·기대 내용 |
|---|---|
| 최종 폴더 | runs/custom-01; 비공개 실패 stage와 다름 |
| 생성 파일 | adapter.rs, libadapter.rlib, README.md, manifest.json |
| manifest.status·authority_granted | CUSTOMER_REVIEW_CANDIDATE·false |
| stages·stage_digests | ANALYZE_GAP, GENERATE, BUILD, VALIDATE, PACKAGE |
| files | README.md·adapter.rs·libadapter.rlib의 지문 |
텍스트 편집기에서 README·adapter.rs·manifest를 엽니다. .rlib는 실행 파일이 아니므로 더블클릭하지 않습니다. analyze 거부는 전체 입력/인코딩, TOOLCHAIN_UNAVAILABLE는 선택 경로/네이티브 전제 조건, OUTPUT_EXISTS_OR_UNAVAILABLE는 기존 결과/쓰기 가능한 새 경로로 분류합니다. 어느 단계든 거부되면 원래 결과를 보존하고 다음 예제로 넘어가지 않습니다.
W2 · SDK-02: MCP를 다른 결과 폴더에 실행하기
W1의 설치·연습 경로 변수를 그대로 사용합니다. inputs/mcp.json은 준비 단계에서 복사됐습니다. tools/list, read_repository, 합성 응답과 name→repository_id/sha→revision 매핑을 읽고 전체 입력을 분석합니다.
"$sdk_exe" analyze "$sdk_practice/inputs/mcp.json" unused || exit 1& $sdkExe analyze (Join-Path $sdkInputs 'mcp.json') unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed; preserve the original error' }W1에서 선택한 경로 한 가지만 실행합니다.
A. run:
"$sdk_exe" run "$sdk_practice/inputs/mcp.json" "$sdk_practice/runs/mcp-01" || exit 1& $sdkExe run (Join-Path $sdkInputs 'mcp.json') (Join-Path $sdkRuns 'mcp-01')
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }B. run-offline:
"$sdk_exe" run-offline "$sdk_practice/inputs/mcp.json" "$sdk_practice/runs/mcp-01" "$sdk_deps" "${sdk_native_args[@]}" || exit 1& $sdkExe run-offline (Join-Path $sdkInputs 'mcp.json') (Join-Path $sdkRuns 'mcp-01') $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }Mac CLT 선택을 썼다면 B에 같은 옵션을 적용합니다. mcp-01의 네 파일·다섯 단계·입력 지문을 따로 읽습니다. 이는 제공된 MCP 기록의 로컬 분석·매핑 검증이며 MCP 서버에 연결하거나 자격 증명을 검사하지 않습니다. 실제 대상/프로토콜 거부가 나오면 그 사유를 인계하고 실제 서버 호출로 바꾸지 않습니다.
W3 · SDK-03: 문자열 점수를 수정하고 새 후보 만들기
먼저 사본만 만듭니다.
test ! -e "$sdk_practice/inputs/custom-02.json" || exit 1
cp "$sdk_practice/inputs/custom.json" "$sdk_practice/inputs/custom-02.json" || exit 1$sdkModified = Join-Path $sdkInputs 'custom-02.json'
if (Test-Path -LiteralPath $sdkModified) { throw 'Choose a fresh input name' }
Copy-Item -LiteralPath (Join-Path $sdkInputs 'custom.json') -Destination $sdkModified -ErrorAction Stop텍스트 편집기에서 custom-02.json의 다음 두 값만 바꾸고 UTF-8로 저장합니다. 전체 JSON을 아래 발췌로 덮어쓰지 않습니다.
draft.fixture.response.score = "88"
draft.fixture.response.component = "my-test-component"논리적 변환 기대 예: component="my-test-component", 정수 quality_score=88. 이 객체를 stdout에 따로 출력하는 명령은 아니며 실제 API 응답도 아닙니다. 제공한 custom-api-score-number.json은 반대로 score를 숫자로 만든 의도적 형식 오류 예제입니다. 정상 입력과 구분하고 이를 통과시킬 목적으로 선언을 바꾸지 않습니다.
"$sdk_exe" analyze "$sdk_practice/inputs/custom-02.json" unused || exit 1& $sdkExe analyze (Join-Path $sdkInputs 'custom-02.json') unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed; preserve the original error' }분석이 실제 통과하면 선택 경로로 실행합니다.
A. run:
"$sdk_exe" run "$sdk_practice/inputs/custom-02.json" "$sdk_practice/runs/custom-02" || exit 1& $sdkExe run (Join-Path $sdkInputs 'custom-02.json') (Join-Path $sdkRuns 'custom-02')
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }B. run-offline:
"$sdk_exe" run-offline "$sdk_practice/inputs/custom-02.json" "$sdk_practice/runs/custom-02" "$sdk_deps" "${sdk_native_args[@]}" || exit 1& $sdkExe run-offline (Join-Path $sdkInputs 'custom-02.json') (Join-Path $sdkRuns 'custom-02') $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }Mac CLT를 사용했다면 같은 옵션을 유지합니다. 원본/수정 입력 지문과 두 결과의 manifest를 비교합니다. 매핑이 같으므로 adapter.rs는 같을 수 있고 입력/실행 기록은 달라질 수 있습니다. 오류가 나면 전체 입력·문자열 타입·UTF-8부터 확인합니다.
W4 · SDK-04: 같은 입력을 반복하고 파일별로 비교하기
W1의 원래 inputs/custom.json과 같은 OS·SDK·컴파일러·의존성·실행 경로를 유지합니다. 이번에는 custom-repeat-01이라는 새 최종 경로를 사용합니다.
A. run:
"$sdk_exe" run "$sdk_practice/inputs/custom.json" "$sdk_practice/runs/custom-repeat-01" || exit 1& $sdkExe run (Join-Path $sdkInputs 'custom.json') (Join-Path $sdkRuns 'custom-repeat-01')
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }B. run-offline:
"$sdk_exe" run-offline "$sdk_practice/inputs/custom.json" "$sdk_practice/runs/custom-repeat-01" "$sdk_deps" "${sdk_native_args[@]}" || exit 1& $sdkExe run-offline (Join-Path $sdkInputs 'custom.json') (Join-Path $sdkRuns 'custom-repeat-01') $sdkDeps
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed; preserve this attempt' }Mac CLT를 썼다면 같은 옵션을 적용한 뒤 파일별 지문을 조회합니다.
# macOS
shasum -a 256 "$sdk_practice/runs/custom-01/adapter.rs" "$sdk_practice/runs/custom-repeat-01/adapter.rs"
shasum -a 256 "$sdk_practice/runs/custom-01/libadapter.rlib" "$sdk_practice/runs/custom-repeat-01/libadapter.rlib"# Linux
sha256sum "$sdk_practice/runs/custom-01/adapter.rs" "$sdk_practice/runs/custom-repeat-01/adapter.rs"
sha256sum "$sdk_practice/runs/custom-01/libadapter.rlib" "$sdk_practice/runs/custom-repeat-01/libadapter.rlib"Get-FileHash -LiteralPath (Join-Path $sdkRuns 'custom-01\adapter.rs'),(Join-Path $sdkRuns 'custom-repeat-01\adapter.rs') -Algorithm SHA256
Get-FileHash -LiteralPath (Join-Path $sdkRuns 'custom-01\libadapter.rlib'),(Join-Path $sdkRuns 'custom-repeat-01\libadapter.rlib') -Algorithm SHA256adapter.rs끼리, libadapter.rlib끼리 비교합니다. manifest 전체 해시가 같아야 하는 것은 아닙니다. 입력 지문·컴파일러·다섯 단계·의존성 전후 기록도 확인합니다. 같은 조건에서 파일 지문이 다르면 두 입력/결과와 버전을 보존해 SDK-4 사례로 인계합니다. 새 터미널에서는 설치·연습 경로 변수만 다시 지정하며 준비 폴더 생성 명령을 반복하지 않습니다.
추가 용례·체크리스트
이 Part를 읽는 순서
준비물 확인 → 목적에 맞는 용례 선택 → 뒤의 첫 실습·실제 명령 수행 → 결과 읽기 → 수정·반복 → 실패 시 해당 사례로 이동합니다. 숫자 순서가 모든 도구의 필수 설치 순서는 아닙니다. 필요한 도구만 선택하십시오.
시작 조건과 입력
지원 OS SDK, 전체 포함 예제, 기존 툴체인 또는 선택 Rust 세트, OS 네이티브 전제 조건.
온라인과 오프라인을 모두 사용할 수 있습니다. SDK의 선택 Rust 의존성 세트는 폐쇄형 온프렘의 SDK 빌드용이며 전체 제품의 기본값이 아닙니다. 회사별 endpoint·승인·등록 자료가 필요한 용례는 실제 제공 자료를 사용합니다.
실습과 사례 찾아보기
| 용례 | 해볼 일 |
|---|---|
| SDK-01 | Custom 예제의 다섯 단계 완료 |
| SDK-02 | MCP 합성 기록으로 별도 후보 생성 |
| SDK-03 | 값을 바꾸고 두 후보 비교 |
| SDK-04 | 동일 입력의 재현성과 보관 |
용례 SDK-01 · Custom 예제의 다섯 단계 완료
처음 SDK를 사용하는 개발자가 제공된 read-only-custom-api.json을 실행합니다. 온라인 기존 툴체인과 선택 세트 경로 중 하나를 먼저 고릅니다.
진행 순서:
- 현재 OS용 본체·선택한 툴체인·네이티브 전제 조건을 준비하고 지문을 대조합니다.
- 새 개인 폴더에 해제하고 전체 예제를 analyze합니다. 선택 세트는 전체 의존성 검증도 수행합니다.
- OS별 명령으로 기존에 없는 custom-01 결과 경로에 실행합니다. 최종 폴더를 미리 만들지 않습니다.
- 네 파일과 manifest의 stages/stage_digests/files를 읽고 원본 입력·실행 경로를 기록합니다.
결과를 이렇게 읽습니다: CUSTOMER_REVIEW_CANDIDATE의 로컬 합성 후보입니다. 실제 API 연결은 하지 않습니다.
실패·다음 분기: analyze 입력 거부, native/toolchain 거부, 기존 출력 거부를 분리하고 아래 SDK-1~4에서 조치합니다.
남길 기록: OS·SDK/입력 지문·선택 경로·컴파일러·다섯 단계·manifest.
내 연습 기록: 수행 시각·버전·입력 참조·실제로 한 단계·관찰 결과·다음 담당자를 채우십시오. 예시에 적힌 기대 결과를 그대로 성공 기록에 복사하지 않습니다.
용례 SDK-02 · MCP 합성 기록으로 별도 후보 생성
레거시 저장소의 인터페이스를 검토하기 위해 제공 MCP 기록을 사용합니다. 기록 분석은 MCP 서버 접속과 다릅니다.
진행 순서:
- read-only-mcp-transcript.json 전체에서 tools/list·read_repository와 합성 응답을 읽습니다.
- name→repository_id, sha→revision의 선언된 매핑과 읽기 전용 범위를 확인합니다.
- 같은 설치의 선택 경로로 analyze 후 별도 mcp-01에 실행합니다. Custom 결과를 덮어쓰지 않습니다.
- 해당 MCP 후보의 소스·라이브러리·manifest와 단계·입력 지문을 확인합니다.
결과를 이렇게 읽습니다: MCP 기록 기반 로컬 매핑 후보이며 실제 MCP 호출·자격 증명 검증은 아닙니다.
실패·다음 분기: 미지원 프로토콜·작업·권한이면 실제 사유를 기록하고 제공 예제/대상 범위를 확인합니다.
남길 기록: MCP 전체 입력 지문, 매핑·작업·후보 경로와 manifest.
내 연습 기록: 수행 시각·버전·입력 참조·실제로 한 단계·관찰 결과·다음 담당자를 채우십시오. 예시에 적힌 기대 결과를 그대로 성공 기록에 복사하지 않습니다.
용례 SDK-03 · 값을 바꾸고 두 후보 비교
score를 문자열 "88", component를 "my-test-component"로 바꾸고 첫 결과와 비교합니다. 매핑은 그대로 유지합니다.
진행 순서:
- 제공 예제 전체를 새 inputs-02/input.json으로 복사하고 원본을 보존합니다.
- draft.fixture.response의 두 값만 UTF-8로 수정합니다. score의 문자열 따옴표를 유지합니다.
- analyze 후 새 custom-api-candidate-02에 실행하고 원래 결과를 유지합니다.
- adapter.rs·libadapter.rlib 지문과 manifest의 입력/단계 지문을 각각 비교합니다.
결과를 이렇게 읽습니다: 합성 값 변경은 매핑 소스를 바꾸지 않을 수 있고 입력/실행 기록은 달라질 수 있음을 확인합니다.
실패·다음 분기: 생성 소스·manifest를 고쳐 기존 검증과 맞추지 않습니다. 발췌만 저장했다면 전체 입력부터 복원합니다.
남길 기록: 원본/수정 입력 지문, 두 후보와 차이 항목·예상/실제 관찰.
내 연습 기록: 수행 시각·버전·입력 참조·실제로 한 단계·관찰 결과·다음 담당자를 채우십시오. 예시에 적힌 기대 결과를 그대로 성공 기록에 복사하지 않습니다.
용례 SDK-04 · 동일 입력의 재현성과 보관
다른 결과 폴더에서도 같은 라이브러리가 나오는지 확인합니다. 다른 OS끼리 비교하는 실험이 아닙니다.
진행 순서:
- 같은 OS·SDK·컴파일러·의존성·전체 입력 지문·실행 경로를 고정합니다.
- 동일 입력을 새 repeat 결과 경로에 실행하고 두 결과를 보존합니다.
- adapter.rs와 libadapter.rlib의 지문을 각각 대조하고 단계·의존성 전후 기록을 함께 확인합니다.
- manifest 전체 바이트는 실행 기록 차이로 달라질 수 있으므로 내용별 차이를 적습니다.
결과를 이렇게 읽습니다: 일치하면 해당 OS·버전·입력 조건의 재현성으로 기록합니다. 전체 플랫폼 결정성 인증은 아닙니다.
실패·다음 분기: 조건이 같은데 지문이 다르면 기존 결과를 보존하고 SDK-4의 최소 기록으로 인계합니다.
남길 기록: 두 입력·SDK/컴파일러/세트 식별자, 두 소스/라이브러리 지문과 manifest.
내 연습 기록: 수행 시각·버전·입력 참조·실제로 한 단계·관찰 결과·다음 담당자를 채우십시오. 예시에 적힌 기대 결과를 그대로 성공 기록에 복사하지 않습니다.
반복 사용·수정·실패 후 재개
이전 입력·버전·검증·결과를 보존하고 새 입력 또는 새 리비전을 구분합니다. SDK/GAPE 파일 출력은 새 경로를 쓰고, Builder는 제품이 반환한 새 후보 리비전을 기록합니다. Helper는 단계 결과를 다음 명령의 입력으로 바꾸지 않고 같은 전체 요청을 사용합니다. 진행 중이거나 결과가 불명확한 Work는 먼저 기존 ID로 조회합니다.
터미널을 닫았다면 절대 경로와 선택 환경을 다시 지정합니다. 실제 변경의 영향을 받는 단계부터 재확인하고, 회사별 권한·등록·승인이 미완료이면 그 상태로 인계합니다. 지원에는 최소 메시지와 공개 가능한 참조를 사용하며 비밀키·원문 프롬프트·고객 응답·전체 로그를 일괄 전달하지 않습니다.
상세 명령·입력 예제·문제 해결 원본
아래에는 이 Part에 해당하는 기존 상세 안내를 같은 작성 원본에서 이어 싣습니다. 첫 실습, 전체 JSON, OS별 명령, 실제 결과 파일 확인과 증상별 상세 사례를 필요할 때 펼쳐 읽으십시오. 다른 Part의 사례를 참조하는 링크도 해당 매뉴얼로 연결됩니다.
전체 흐름·생략 조건
SDK Engine: 온라인·오프라인 설치와 연동 후보 사용 안내
SDK Engine: 온라인·오프라인 설치와 연동 후보 사용 안내
상세 절 목차
이 도구의 범위
SDK Engine은 실제 연결이나 Pack 등록 전에 고객이 검토할 연동 후보를 준비합니다. 선언된 읽기 전용 Custom API 작업 또는 MCP 기록과 합성 응답을 검사하고, 값 매핑 소스를 생성하여 로컬 Rust 컴파일러로 빌드합니다. 이 도구는 원천 API·MCP 서버를 호출하거나, 자격 증명을 읽거나, Appliance를 변경하거나, Pack을 등록하거나, Work를 실행하지 않습니다.
패키지에는 합성 예제가 포함됩니다. 선택 세트 경로를 쓰려면 동일 세대의 운영체제별 공용 오프라인 Rust 의존성 패키지를 함께 준비하십시오. 기존 설치 툴체인을 선택한 온라인 경로에서는 이 세트가 필수가 아닙니다. 여기에 네이티브 컴파일러·표준 라이브러리·Cargo와 선언된 정확한 crate 버전이 들어 있으며, 이 범위에서는 Rust나 crate를 따로 다운로드하지 않습니다. 다른 OS·새 crate·다른 타깃은 별도 검증 대상입니다. macOS arm64와 Debian 13 amd64 패키지는 Rust 1.96.0, Windows amd64 패키지는 Rust 1.97.1을 사용합니다.
네이티브 전제 조건은 별도입니다. Debian은 기존 시스템 C 링커·libc 개발 파일, macOS는 신뢰 검증을 통과하는 Apple 개발 도구·SDK, Windows는 Visual Studio 2022 BuildTools의 MSVC 14.44.35207 및 Windows SDK 10.0.26100.0이 필요합니다. 이 자산은 Rust 의존성 패키지에 재배포하지 않습니다. 새 OS에 이 전제 조건까지 설치한다는 범위는 검증하지 않았습니다.
macOS의 run-offline은 기본적으로 현재 Apple 개발 도구 선택(SYSTEM_ACTIVE)을 사용합니다. 이미 설치된 Command Line Tools를 실행 한 번에 명시적으로 선택하려면 의존성 경로 뒤에 --macos-developer-selection COMMAND_LINE_TOOLS를 붙이십시오. 등록된 /Library/Developer/CommandLineTools 설치를 선택하며 기존 신뢰 검사를 모두 적용합니다. 시스템 개발 도구 설정을 바꾸거나 다른 설치로 자동 전환하지 않습니다. 다른 운영체제에서는 이 옵션을 거부합니다.
./bin/packr-sdk-engine run-offline examples/read-only-custom-api.json ./quality-candidate /absolute/path/dependencies --macos-developer-selection COMMAND_LINE_TOOLS공식 서명·공증, 고객 활성화·전달의 상태는 해당 패키지와 별도로 신뢰하는 릴리스 목록에서 확인하십시오. 로컬 예제 성공만으로 그 상태를 승인하지 않습니다.
먼저 운영 환경을 선택하십시오: 온라인과 오프라인
SDK Engine은 온라인 개발 환경과 오프라인 환경 모두에서 사용할 수 있습니다. 오프라인 의존성 세트는 인터넷이 차단된 온프렘에서 SDK가 어댑터를 컴파일할 때 필요한 Rust 자산을 미리 준비하기 위한 선택 구성입니다. 제품의 기본 운영 모드를 오프라인으로 고정하는 설정이 아닙니다. SDK에서 새 연동 후보를 빌드할 때 생길 수 있는 의존성 문제를 해결하는 데 목적이 있습니다.
| 사용 환경 | 준비 방법 | 실행 경로와 확인 범위 |
|---|---|---|
| 온라인 개발 환경 | 조직이 승인한 전달 경로로 SDK를 준비하고 지원되는 Rust 컴파일러·네이티브 도구를 설치 또는 재사용합니다. 공용 의존성 세트를 함께 사용해도 됩니다. | 기존 툴체인은 run, 검증된 별도 의존성 세트는 run-offline을 사용합니다. 두 명령의 검증·영수증 범위는 다릅니다. |
| 인터넷이 차단된 온프렘 | 반입 전에 SDK와 같은 OS용 의존성 세트, 네이티브 전제 조건과 지문 목록을 준비합니다. | 전체 의존성 검증 후 run-offline으로 로컬 빌드합니다. 허용된 세트 범위에서는 Rust·crate 추가 다운로드가 필요 없습니다. |
| 네트워크가 있지만 빌드를 고정하려는 환경 | 온라인 환경에서 동일한 의존성 세트를 선택해 사용할 수 있습니다. | run-offline이라는 명령 이름이 컴퓨터의 네트워크를 차단하거나 전체 제품을 오프라인 전용으로 만들지는 않습니다. |
온라인 환경에서 기존 설치 툴체인을 사용하는 호환 경로는 다음과 같습니다. 압축을 푼 SDK 디렉터리에서 rustc --version으로 실제 선택되는 컴파일러를 확인하고, 지원 버전·타깃·OS 도구를 준비한 다음 새 출력 폴더를 지정하십시오. 이 경로는 PATH의 컴파일러를 사용하며 별도 의존성 세트의 전체 파일·네이티브 신뢰 영수증을 제공하지 않습니다. 해당 환경에서 별도로 검증해야 합니다.
rustc --version
./bin/packr-sdk-engine analyze examples/read-only-custom-api.json unused
./bin/packr-sdk-engine run examples/read-only-custom-api.json ./online-custom-candidate-01
./bin/packr-sdk-engine run examples/read-only-mcp-transcript.json ./online-mcp-candidate-01rustc --version
if ($LASTEXITCODE -ne 0) { throw 'Rust compiler unavailable' }
.\bin\packr-sdk-engine.exe analyze .\examples\read-only-custom-api.json unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed' }
.\bin\packr-sdk-engine.exe run .\examples\read-only-custom-api.json .\online-custom-candidate-01
if ($LASTEXITCODE -ne 0) { throw 'Custom candidate failed' }
.\bin\packr-sdk-engine.exe run .\examples\read-only-mcp-transcript.json .\online-mcp-candidate-01
if ($LASTEXITCODE -ne 0) { throw 'MCP candidate failed' }run은 설치된 컴파일러를 쓰는 호환 명령으로 유지되어 있습니다. 현재 패키지의 별도 의존성 검증 경로와 같다고 해석하지 마십시오. run-offline의 신뢰·권한 검사에 실패한 뒤 그 검사를 피하기 위한 대체 실행으로 사용하지 않습니다. 아래의 검증된 의존성 세트 절차는 온라인 환경에서도 선택할 수 있습니다. 어느 경로의 합성 예제도 실제 API나 MCP 서버에 접속하지 않습니다.
두 압축 파일을 구분하고 새 위치에 준비하기
SDK 본체에는 bin, docs, examples, 라이선스·고지가 있습니다. Rust 의존성 세트에는 DEPENDENCIES.json, FILES.json, toolchain, cargo-home과 고지가 있습니다. 본체만 해제했다고 선택 구성인 의존성 세트까지 설치된 것은 아닙니다. 기존 설치와 결과를 보존하려면 세대별 새 위치를 선택하십시오.
| 플랫폼 | SDK 본체 | 선택 의존성 세트 | 지원 범위 확인 |
|---|---|---|---|
| macOS ARM64 | 해당 OS의 .tar.gz | RUST_DEPENDENCIES_MACOS_ARM64.tar.gz | Apple Silicon, 등록된 Apple 도구와 SDK |
| Debian 13 AMD64 | 해당 OS의 .tar.gz | RUST_DEPENDENCIES_DEBIAN_13_AMD64.tar.gz | x86-64, 시스템 C 링커·libc 개발 파일 |
| Windows AMD64 | 해당 OS의 .zip | RUST_DEPENDENCIES_WINDOWS_AMD64.zip | x64, 등록된 MSVC·Windows SDK |
macOS에서는 shasum -a 256, Debian에서는 sha256sum, Windows에서는 Get-FileHash -Algorithm SHA256으로 두 압축 파일을 각각 확인합니다. 동일 위치에서 받은 해시만으로 공급자 신원이 증명되지는 않습니다. 별도로 신뢰하는 구성요소 목록과 비교하십시오. 파일 이름이 같아도 해시가 다르면 진행하지 않습니다.
Linux·macOS에서 아래 경로를 실제 파일로 바꾸고 실행합니다. 예제의 루트는 기존에 존재하면 중단합니다. 개인 홈의 비공유 경로를 사용하고, 상위 경로도 다른 사용자가 수정할 수 없어야 합니다.
sdk_archive="/absolute/path/sdk-package.tar.gz"
deps_archive="/absolute/path/RUST_DEPENDENCIES_OS.tar.gz"
install_root="$HOME/VibePackr-SDK-install-01"
test ! -e "$install_root" || exit 1
umask 077
mkdir -m 700 "$install_root" || exit 1
mkdir "$install_root/sdk" "$install_root/dependencies" "$install_root/runs" || exit 1
tar -xzf "$sdk_archive" -C "$install_root/sdk" || exit 1
tar -xzf "$deps_archive" -C "$install_root/dependencies" || exit 1
cd "$install_root/sdk" || exit 1Windows PowerShell 5.1에서는 접근이 제한된 사용자 홈 아래의 새 디렉터리를 준비합니다. 공유·동기화·네트워크 경로를 사용하지 말고 조직이 승인한 현재 사용자 전용 경로와 ACL을 확인하십시오. 아래는 이미 해당 권한이 확인된 부모 경로를 가정합니다. 기존 디렉터리를 덮어쓰거나 시스템 전체 ACL을 바꾸지 않습니다.
$sdkArchive = 'C:\absolute\path\sdk-package.zip'
$depsArchive = 'C:\absolute\path\RUST_DEPENDENCIES_WINDOWS_AMD64.zip'
$installRoot = Join-Path $env:USERPROFILE 'VibePackr-SDK-install-01'
if (Test-Path -LiteralPath $installRoot) { throw 'Choose a fresh install root' }
New-Item -ItemType Directory -Path $installRoot -ErrorAction Stop | Out-Null
$sdkRoot = Join-Path $installRoot 'sdk'
$depsRoot = Join-Path $installRoot 'dependencies'
$runsRoot = Join-Path $installRoot 'runs'
New-Item -ItemType Directory -Path $sdkRoot,$depsRoot,$runsRoot -ErrorAction Stop | Out-Null
Expand-Archive -LiteralPath $sdkArchive -DestinationPath $sdkRoot -ErrorAction Stop
Expand-Archive -LiteralPath $depsArchive -DestinationPath $depsRoot -ErrorAction Stop
Set-Location -LiteralPath $sdkRoot다음 단계에서 전체 의존성 검증이 권한 문제로 거부되면 해당 설치를 사용하지 말고 승인된 설치 절차로 해결하십시오. 검사 완화, 관리자 권한 실행, 실행 정책 우회, 시스템 신뢰 저장소 변경을 해결 방법으로 사용하지 않습니다. 온라인에서 기존 툴체인만 쓰는 경우 의존성 압축 해제 단계는 선택 사항입니다.
제공 파일 확인과 설치
- 받은 릴리스 목록에 현재 운영체제용 SDK Engine이 있는지 확인하십시오. SDK와 의존성 압축 파일의 SHA-256을 별도로 신뢰하는 릴리스 목록과 대조하십시오. 서명이 있는 릴리스만 해당 서명을 검증하십시오. 공식 배포 서명이 없는 후보는 그 사실을 기록하고 서명된 릴리스와 구분하십시오. 다른 운영체제용 파일을 대신 사용하지 마십시오.
- 접근이 제한된 새 디렉터리에 압축을 풀고
bin,docs,examples를 함께 보관하십시오. 시스템 전체에 설치할 때는 해당 릴리스의 운영체제별 안내를 따르십시오. - 의존성 패키지도 신뢰하는 현재 사용자만 쓸 수 있는 별도의 새 디렉터리에 해제하십시오. 모든 중간 디렉터리에 다른 사용자의 쓰기 권한이 없어야 합니다. 포함된
cargo-home은 검증 입력으로 보존하며 작업 캐시로 직접 쓰거나 전역 캐시에 병합하지 마십시오. 활성화 스크립트나 셸 세션 변경은 필요하지 않습니다. 아래 의존성 절대 경로를 실제 경로로 바꾼 뒤 전체 파일 검증과 예제 확인을 수행하십시오.
Linux 또는 macOS 터미널:
./bin/packr-sdk-engine verify-offline-dependencies DEBIAN_13_AMD64 /absolute/path/dependencies
# macOS arm64: DEBIAN_13_AMD64 대신 MACOS_ARM64
test -f examples/read-only-custom-api.json
test -f examples/read-only-mcp-transcript.json
./bin/packr-sdk-engine analyze examples/read-only-custom-api.json unusedWindows PowerShell:
.\bin\packr-sdk-engine.exe verify-offline-dependencies WINDOWS_AMD64 C:\absolute\path\dependencies
Test-Path .\examples\read-only-custom-api.json
Test-Path .\examples\read-only-mcp-transcript.json
.\bin\packr-sdk-engine.exe analyze .\examples\read-only-custom-api.json unusedanalyze는 입력만 읽고 출력 디렉터리를 만들지 않습니다. 성공 결과에도 authority_granted: false가 표시됩니다. 릴리스 목록에 SDK Engine이 없으면 진행을 멈추고 해당 릴리스의 지원 경로에서 올바른 패키지를 받으십시오.
선택한 의존성 세트로 OS별 예제 실행
아래는 앞 단계의 경로 변수가 같은 셸에 남아 있다는 가정입니다. 새 셸에서는 실제 절대 경로를 다시 지정하십시오. analyze의 마지막 unused는 CLI 형식에 필요한 자리이며 결과 폴더가 아닙니다.
macOS ARM64에서 이미 설치된 Command Line Tools를 명시적으로 선택하는 예입니다. 기본 선택은 SYSTEM_ACTIVE이며 아래 옵션은 이 한 실행에만 적용됩니다.
./bin/packr-sdk-engine verify-offline-dependencies MACOS_ARM64 "$install_root/dependencies" || exit 1
./bin/packr-sdk-engine analyze examples/read-only-custom-api.json unused || exit 1
./bin/packr-sdk-engine run-offline examples/read-only-custom-api.json "$install_root/runs/custom-01" "$install_root/dependencies" --macos-developer-selection COMMAND_LINE_TOOLS || exit 1
./bin/packr-sdk-engine run-offline examples/read-only-mcp-transcript.json "$install_root/runs/mcp-01" "$install_root/dependencies" --macos-developer-selection COMMAND_LINE_TOOLS || exit 1Debian 13 AMD64:
./bin/packr-sdk-engine verify-offline-dependencies DEBIAN_13_AMD64 "$install_root/dependencies" || exit 1
./bin/packr-sdk-engine analyze examples/read-only-custom-api.json unused || exit 1
./bin/packr-sdk-engine run-offline examples/read-only-custom-api.json "$install_root/runs/custom-01" "$install_root/dependencies" || exit 1
./bin/packr-sdk-engine run-offline examples/read-only-mcp-transcript.json "$install_root/runs/mcp-01" "$install_root/dependencies" || exit 1Windows AMD64:
.\bin\packr-sdk-engine.exe verify-offline-dependencies WINDOWS_AMD64 $depsRoot
if ($LASTEXITCODE -ne 0) { throw 'Dependency verification failed' }
.\bin\packr-sdk-engine.exe analyze .\examples\read-only-custom-api.json unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed' }
.\bin\packr-sdk-engine.exe run-offline .\examples\read-only-custom-api.json (Join-Path $runsRoot 'custom-01') $depsRoot
if ($LASTEXITCODE -ne 0) { throw 'Custom candidate failed' }
.\bin\packr-sdk-engine.exe run-offline .\examples\read-only-mcp-transcript.json (Join-Path $runsRoot 'mcp-01') $depsRoot
if ($LASTEXITCODE -ne 0) { throw 'MCP candidate failed' }첫 예제의 결과 확인과 새 터미널에서 재개
앞의 OS별 설치·실행 블록으로 Custom과 MCP를 각각 새 폴더에 실행한 뒤 아래를 확인합니다. SDK는 바탕화면 앱 아이콘을 만드는 설치 프로그램이 아니므로 앱 목록 대신 해제한 bin의 실행 파일과 결과 경로를 찾습니다. 명령은 그 SDK 디렉터리에서 실행합니다. 본체만 쓰는 온라인 경로에서는 선택 의존성 변수를 만들 필요가 없습니다.
기존 툴체인의 온라인 run 예제를 그대로 사용했다면 결과는 SDK 폴더 아래 online-custom-candidate-01과 online-mcp-candidate-01입니다. 아래 조회 명령의 경로를 그 실제 결과로 바꾸십시오. runs/custom-01과 runs/mcp-01은 앞의 선택 세트 실행 블록이 만든 경로입니다.
Custom 결과를 실제로 열어 보기
ls -la "$install_root/runs/custom-01"
cat "$install_root/runs/custom-01/README.md"
cat "$install_root/runs/custom-01/adapter.rs"
cat "$install_root/runs/custom-01/manifest.json"$candidate01 = Join-Path $runsRoot 'custom-01'
Get-ChildItem -LiteralPath $candidate01
Get-Content -LiteralPath (Join-Path $candidate01 'README.md') -Raw -Encoding UTF8
Get-Content -LiteralPath (Join-Path $candidate01 'adapter.rs') -Raw -Encoding UTF8
Get-Content -LiteralPath (Join-Path $candidate01 'manifest.json') -Raw -Encoding UTF8| 읽을 대상 | 처음 확인할 내용 | 해석 |
|---|---|---|
| 출력 폴더 | adapter.rs, libadapter.rlib, README.md, manifest.json | 실패 stage의 임시 폴더와 구분 |
| adapter.rs | component 매핑과 score → quality_score 변환 | 합성 응답의 매핑 코드; API 클라이언트 아님 |
| manifest.json | compiler_version, files의 3개 지문, 다섯 단계, authority_granted=false | 이 실행의 후보와 검증 기록 |
| offline_execution | 선택 세트 경로로 실행했을 때만 해당 의존성·네이티브 관측 | 온라인 run에 같은 영수증이 있다고 가정하지 않음 |
| MCP 결과 | 별도 mcp-01 폴더와 repository 매핑 | Custom 성공을 MCP 성공으로 재사용하지 않음 |
libadapter.rlib는 Rust 라이브러리이며 더블클릭하거나 운영체제 실행 파일처럼 실행하지 않습니다. 결과에서 97이 quality_score 정수로 매핑되는 것은 합성 검증의 내용입니다. 실제 서버의 응답을 받았다는 뜻이 아닙니다. 원본 입력 값을 읽고 매핑·단계 기록과 대조하십시오.
input.json 사본을 만드는 빠진 준비 단계
아래 명령은 새 inputs-02 폴더에 전체 예제를 복사합니다. 이 절에서는 편집·분석까지 진행하고, 뒤의 input.json을 바꾸고 두 번째 후보 만들기에서 재실행합니다. 같은 이름이 있으면 새 번호를 고르십시오.
test ! -e "$install_root/inputs-02" || exit 1
mkdir "$install_root/inputs-02" || exit 1
cp ./examples/read-only-custom-api.json "$install_root/inputs-02/input.json" || exit 1$inputs02 = Join-Path $installRoot 'inputs-02'
if (Test-Path -LiteralPath $inputs02) { throw 'Choose a fresh input folder' }
New-Item -ItemType Directory -Path $inputs02 -ErrorAction Stop | Out-Null
Copy-Item -LiteralPath .\examples\read-only-custom-api.json -Destination (Join-Path $inputs02 'input.json') -ErrorAction Stop편집기에서 이 사본을 열어 score는 문자열 "88", component는 "my-test-component"로 바꿉니다. 매핑을 유지한 값 변경은 adapter.rs를 바꾸지 않을 수 있습니다. 첫 결과와 수정 결과를 모두 보존합니다.
새 터미널을 열었을 때
아래는 기존 설치 경로를 다시 지정하는 명령입니다. 압축을 다시 풀거나 기존 결과를 지우지 않습니다. 앞서 다른 루트명을 사용했다면 그 경로로 바꾸십시오. 다음 실행의 결과 폴더는 다시 새 이름을 선택합니다.
install_root="$HOME/VibePackr-SDK-install-01"
test -f "$install_root/sdk/bin/packr-sdk-engine" || exit 1
cd "$install_root/sdk" || exit 1$installRoot = Join-Path $env:USERPROFILE 'VibePackr-SDK-install-01'
$sdkRoot = Join-Path $installRoot 'sdk'
$depsRoot = Join-Path $installRoot 'dependencies'
$runsRoot = Join-Path $installRoot 'runs'
Set-Location -LiteralPath $sdkRoot -ErrorAction Stop
if (!(Test-Path -LiteralPath '.\bin\packr-sdk-engine.exe' -PathType Leaf)) { throw 'SDK path does not match the prior installation' }복귀 경로: 프로그램 경로를 찾지 못함 → 설치 루트·중첩 해제 폴더 확인, analyze 거부 → 전체 입력/인코딩 확인, build 거부 → 선택 의존성·네이티브 전제 조건 확인, 출력 경로 거부 → 새 이름 선택. 실패한 임시 stage를 성공 결과로 열지 않습니다.
포함된 실제 예제
예제의 read_quality 작업은 합성 응답의 component와 문자열 score를 읽습니다. 목표 Contract는 component와 정수 quality_score를 요구합니다. 아래 매핑은 로컬 준비용입니다.
{
"definition": {
"integration_id": "acme-quality-hub",
"operation_id": "read_quality",
"credential_requirements": [],
"execution_boundary": "READ_ONLY_SYNTHETIC_SANDBOX"
},
"mapping": {
"field_mappings": [
{"source": "component", "target": "component", "transform": "IDENTITY"},
{"source": "score", "target": "quality_score", "transform": "STRING_TO_INTEGER"}
]
},
"fixture": {
"scope": "LOCAL_SYNTHETIC_SANDBOX",
"response": {"component": "fixture-component", "score": "97"}
}
}이 발췌는 필드를 설명하기 위한 것입니다. 실행에는 정확한 Contract·어댑터·스키마 지문·권한·증거 범위를 포함한 패키지의 전체 JSON 파일을 사용하십시오. 예제에 암호, 토큰, 개인키 또는 실제 고객 응답을 넣지 마십시오.
예제: MCP로 제공되는 레거시 저장소
조직의 레거시 저장소가 지원되는 MCP 인터페이스를 제공한다면 examples/read-only-mcp-transcript.json부터 확인하십시오. 합성 기록에는 tools/list와 읽기 전용 read_repository 도구가 선언되어 있습니다. 매핑은 name을 repository_id로, sha를 revision으로 복사합니다. Engine은 제공된 기록을 분석하며 MCP 서버에 접속하지 않습니다.
./bin/packr-sdk-engine analyze examples/read-only-mcp-transcript.json unused
./bin/packr-sdk-engine run-offline examples/read-only-mcp-transcript.json ./repository-candidate /absolute/path/dependenciesWindows PowerShell:
.\bin\packr-sdk-engine.exe analyze .\examples\read-only-mcp-transcript.json unused
.\bin\packr-sdk-engine.exe run-offline .\examples\read-only-mcp-transcript.json .\repository-candidate C:\absolute\path\dependencies고객 선언으로 바꾸기 전에 연동 담당자와 작업 ID, 필드 형식, 읽기 전용 권한, Contract 버전, 합성 응답을 정확히 대조하십시오. 실제 MCP 호출과 자격 증명 사용에는 별도의 승인된 연결 절차가 필요합니다.
다섯 단계 실행
압축을 푼 디렉터리에서 아직 존재하지 않는 출력 경로를 지정하십시오.
./bin/packr-sdk-engine run-offline examples/read-only-custom-api.json ./quality-candidate /absolute/path/dependenciesWindows:
.\bin\packr-sdk-engine.exe run-offline .\examples\read-only-custom-api.json .\quality-candidate C:\absolute\path\dependencies한 명령이 다음 단계를 순서대로 수행합니다.
- ANALYZE_GAP: 등록된 Contract·어댑터·프로토콜 버전, 읽기 전용 작업, 입력 크기와 합성 응답을 검사합니다.
- GENERATE: 로컬 값 매핑 함수인
adapter.rs를 만듭니다. API 전송·자격 증명·Work 실행 코드는 없습니다. - BUILD: 전체 파일 검증을 통과한 패키지 내
rustc절대 경로로 생성 소스를libadapter.rlib로 컴파일합니다. - VALIDATE: 임시 합성 응답 검사를 컴파일·실행하여 예상 매핑과 미선언 필드 거부를 확인합니다. 성공 후 임시 검사 소스와 실행 파일을 제거합니다.
- PACKAGE:
README.md와manifest.json을 씁니다. 매니페스트에는 입력 지문, 컴파일러 버전, 후보 파일 세 개의 SHA-256과 단계별 입력·출력 지문이 기록됩니다.
성공한 출력 디렉터리에는 adapter.rs, libadapter.rlib, README.md, manifest.json만 있어야 합니다. v2 매니페스트의 offline_execution에는 전체 트리의 전후 지문, 컴파일러·네이티브 도구·환경·명령 인자의 최소 공개 지문이 포함됩니다. 이는 미서명 관측 기록이며 독립적인 실행 증명이나 릴리스 서명이 아닙니다. 매니페스트를 확인하십시오. 결과 CUSTOMER_REVIEW_CANDIDATE는 실제 연결이나 실행 승인을 뜻하지 않습니다.
input.json을 바꾸고 두 번째 후보 만들기
먼저 패키지의 전체 examples/read-only-custom-api.json을 새 입력 작업 폴더의 input.json으로 복사합니다. 제공 예제와 첫 결과는 보존합니다. 편집기에서 다음 두 값만 수정해 UTF-8로 저장하십시오. 파일 전체를 아래 발췌로 교체하지 마십시오.
draft.fixture.response.component = "my-test-component"
draft.fixture.response.score = "88"score는 문자열이므로 따옴표를 유지합니다. 이 예제의 STRING_TO_INTEGER가 결과의 정수 quality_score로 변환합니다. Contract ID, 어댑터 리비전, 스키마 지문, 권한, 증거 항목은 다른 값을 추측해 바꾸지 않습니다. Windows PowerShell 5.1의 기본 Out-File은 UTF-16을 쓸 수 있으므로 JSON 편집기는 UTF-8을 선택하십시오.
예를 들어 앞서 준비한 설치 루트에 inputs-02를 새로 만들고 그 안에 input.json을 저장한 뒤 실행합니다. macOS는 앞서 선택한 Apple 도구 옵션을 그대로 적용하십시오. 첫 결과와 두 번째 결과를 합치지 않습니다.
./bin/packr-sdk-engine analyze "$install_root/inputs-02/input.json" unused
./bin/packr-sdk-engine run-offline "$install_root/inputs-02/input.json" "$install_root/runs/custom-api-candidate-02" "$install_root/dependencies"
# macOS CLT 선택 시 마지막에 다음 인자를 추가: --macos-developer-selection COMMAND_LINE_TOOLS$input02 = Join-Path $installRoot 'inputs-02\input.json'
.\bin\packr-sdk-engine.exe analyze $input02 unused
if ($LASTEXITCODE -ne 0) { throw 'Analyze failed' }
.\bin\packr-sdk-engine.exe run-offline $input02 (Join-Path $runsRoot 'custom-api-candidate-02') $depsRoot
if ($LASTEXITCODE -ne 0) { throw 'Candidate failed' }온라인의 기존 툴체인 경로를 선택했다면 같은 입력과 새 결과 경로로 run을 사용하며 의존성 경로와 macOS 선택 옵션은 넣지 않습니다. 한 후보의 기록에 두 실행 경로의 결과를 섞지 않습니다.
adapter.rs·manifest.json을 읽고 결과 비교하기
adapter.rs는 필드 매핑 코드입니다. 합성 응답의 값만 바꾸고 매핑 규칙을 유지하면 코드가 같을 수 있습니다. manifest.json은 해당 실행의 입력·산출물·단계 기록이므로 입력 지문, 경로, 관측값 등은 달라질 수 있습니다. 다른 OS·컴파일러 버전의 .rlib 해시를 같아야 한다고 가정하지 않습니다.
cat "$install_root/runs/custom-api-candidate-02/adapter.rs"
cat "$install_root/runs/custom-api-candidate-02/manifest.json"Get-Content -LiteralPath (Join-Path $runsRoot 'custom-api-candidate-02\adapter.rs')
Get-Content -LiteralPath (Join-Path $runsRoot 'custom-api-candidate-02\manifest.json') -Raw
Get-FileHash -LiteralPath (Join-Path $runsRoot 'custom-api-candidate-02\libadapter.rlib') -Algorithm SHA256생성 코드를 직접 편집하면 기존 매니페스트의 지문과 맞지 않습니다. Engine의 재현 가능한 후보를 만들려면 입력 JSON의 지원되는 선언·매핑을 수정하고 새 결과 경로에서 다시 실행합니다. 매니페스트를 고쳐 기존 실행이 검증된 것처럼 만들지 않습니다. 임의 Rust 코드·추가 crate·실제 네트워크 연동은 이 합성 예제의 검증 범위에 포함되지 않습니다.
재현성은 같은 OS·동일 SDK·컴파일러·의존성·전체 입력으로 새 폴더에 실행한 뒤 adapter.rs와 libadapter.rlib의 SHA-256을 비교합니다. 입력을 바꾼 두 실행 비교와 같은 입력의 재현성 비교는 구분하십시오. 매니페스트 전체 해시까지 같아야 하는 것은 아닙니다. 두 출력의 다섯 단계, 파일 지문, 입력 지문과 의존성 전후 지문도 함께 확인합니다.
문제 상황과 조치
| 표시 또는 현상 | 가능한 원인 | 조치 |
|---|---|---|
TARGET_MISMATCH, FIXTURE_REJECTED, CREDENTIAL_REQUIREMENT, INVALID_INPUT | 작업·Contract/어댑터 버전·입력 형식·합성 응답이 지원 범위 밖이거나 자격 증명 요구가 있습니다. | 전체 선언을 릴리스의 지원 대상 목록과 대조하십시오. 예제에서 비밀값을 제거하고, 목표 ID를 추측해 바꾸지 마십시오. |
TOOLCHAIN_UNAVAILABLE | 의존성 파일·운영체제·권한·컴파일러 또는 네이티브 도구의 신뢰 검증이 실패했습니다. | 의존성 전체 검증과 OS 전제 조건을 확인하십시오. 신뢰 검사나 권한 검사를 우회하지 말고, 오류와 실패 stage를 보존하십시오. PATH·Rustup 다운로드로 대체하지 않습니다. |
OUTPUT_EXISTS_OR_UNAVAILABLE | 이전 시도의 파일이 남았거나 디렉터리를 만들 수 없습니다. | 내용을 확인하고 쓸 수 있는 새 디렉터리를 지정하십시오. 두 시도의 파일을 합치지 마십시오. |
| 합성 응답 검사 실패 | 선언된 매핑과 응답 형식이 다르거나 값 변환이 불가능합니다. | 선언 또는 합성 응답을 바로잡아 새 출력 경로에서 실행하십시오. 합성 검사 통과를 실제 API 검증으로 해석하지 마십시오. |
| 압축 파일 지문·서명 불일치 | 파일이 다르거나 변경됐습니다. | 설치를 중지하고 릴리스 목록의 파일을 다시 받으십시오. |
| 후보는 컴파일되나 Appliance에 보이지 않음 | 이 도구는 로컬 후보만 준비합니다. | 릴리스의 별도 등록·바인딩·Work 절차를 따르고 인증된 결정과 해당 영수증을 확인하십시오. |
run-offline은 비공개 sibling stage에서 생성·검사하고, 후검사가 끝나면 기존 경로를 덮어쓰지 않는 원자적 이동으로 새 결과를 게시합니다. 실패하면 최종 결과 경로는 없고 비공개 stage·실패 기록이 남을 수 있습니다. 이 stage를 후보 패키지로 사용하지 마십시오. 이전 실패 stage나 결과는 자동으로 재사용하지 않습니다. 지원에 오류 출력을 전달할 때 고객 데이터나 비밀값을 먼저 제거하십시오.
업데이트·보관·제거와 보안 검토 자료
새 SDK는 별도 세대 디렉터리에 해제하고 그 세대의 의존성·지문 목록과 대조합니다. 이전 결과·입력·패키지를 보존한 채 새 위치에서 검증한 다음 작업 경로를 바꿉니다. 되돌릴 때는 기록된 이전 SDK와 그에 맞는 의존성·입력 조합을 선택합니다. 자동 덮어쓰기나 기존 후보의 재사용은 하지 않습니다.
제거 전에 입력 JSON, 수정 내역, 후보 파일·매니페스트와 지원 기록을 보관합니다. 휴대형 설치 디렉터리와 작업 결과 디렉터리를 구분해 관리하십시오. 이 절차는 시스템 서비스나 전역 Rustup·Cargo 설정을 설치하지 않으므로 이를 삭제하거나 시스템 설정을 되돌리는 명령도 필요하지 않습니다. 기존 조직 툴체인을 별도로 제거하지 않습니다.
보안 검토에는 패키지·의존성 지문, 정확한 버전·OS, 파일 목록, LICENSE·NOTICE, 제공된 SBOM·취약점 조회 시점, 실제 검사 결과와 범위를 함께 전달합니다. 서명·공증이 없는 후보와 서명된 릴리스는 구분합니다. 지문 일치는 파일 동일성에 대한 확인이며, 매니페스트는 독립적인 실행 증명이 아닙니다. 알려진 마커 검사는 모든 비밀정보 부재를 보장하지 않으며 공급망·권한·네트워크 격리·최신 취약점 전부를 인증하지 않습니다.
Appliance 등록, 실제 연결, 고객 활성화·전달, Work 실행은 각 릴리스가 별도로 제공한 절차와 승인 범위를 따릅니다. 설치 후 도구 목록으로 돌아가거나, 소스 Document 안내에서 다음 연동 선언을 준비하십시오.
지원 기록
SDK·의존성 패키지 지문과 제공된 서명 유무, 컴퓨터 운영체제, 검증된 컴파일러 버전, 입력 JSON 지문, 대상 Contract·어댑터 버전, 단계 결과, 후보 매니페스트, 연동 담당자를 기록하십시오. 이후 실제 Work가 실행되면 별도의 Appliance 등록 결정과 Work 영수증을 보관하십시오. 지원 기록에는 비밀값과 실제 고객 응답을 넣지 마십시오.
도구별 문제 해결 사례 읽기
다음은 지원되는 입력·명령·권한 경계를 바탕으로 구성한 교육용 사례입니다. 제품의 실제 상태·사유와 함께 읽고, 자신의 실행 기록 없이 예시의 결과를 성공 이력으로 사용하지 않습니다. 온라인과 오프라인 환경 모두에 적용되는 확인 항목과 선택 의존성 경로에만 해당하는 항목을 구별합니다.
상세 예시 SDK-1: SDK 본체만 해제한 뒤 의존성·네이티브 전제 조건 구별
상황: SDK 실행 파일은 열리지만 선택 의존성 경로의 예제 빌드가 시작되지 않습니다. 본체 설치, Rust 세트 검증, OS 네이티브 도구 준비를 한 단계로 합치지 않고 각각 확인합니다.
관찰을 이렇게 나눠 읽습니다.
- 본체: bin·docs·examples 존재는 SDK 파일 준비만 확인합니다.
- 의존성: 같은 OS용 DEPENDENCIES.json·FILES.json·toolchain이 별도 경로에 있어야 합니다.
- 네이티브 도구: Rust 세트와 별도로 릴리스 전제 조건이 충족돼야 합니다.
확인·조치 순서:
- 온라인 기존 툴체인 경로인지 선택 세트 경로인지 먼저 기록합니다. 이 예시는 후자입니다.
- SDK·세트의 압축 파일 지문과 플랫폼을 대조하고 정확한 절대 경로로 verify-offline-dependencies를 수행합니다.
- 트리 검증 뒤에도 거부되면 네이티브 전제 조건·경로 권한·제품 사유를 확인합니다. 실패를 피하려고 다른 실행 경로로 바꾸지 않습니다.
다음 단계로 돌아갈 조건: 선택한 경로의 전제 조건이 충족되고 새 출력에서 다섯 단계가 검증돼야 후보 준비 완료로 기록합니다.
해결되지 않았을 때: 필요 자산 또는 지원 조합이 없으면 정확한 누락 항목을 인계합니다. 임의 다운로드·전역 캐시 혼합으로 빈칸을 메우지 않습니다.
상세 예시 SDK-2: macOS에서 설치된 CLT를 한 실행에 선택
상황: macOS에 Apple 개발 도구가 둘 이상 있습니다. 현재 시스템 선택을 사용하는 실행이 거부됐고, 등록된 Command Line Tools 설치가 별도로 준비돼 있습니다. 설치돼 있다는 사실만으로 신뢰 검증 성공을 가정하지 않습니다.
관찰을 이렇게 나눠 읽습니다.
- 기본 선택: SYSTEM_ACTIVE입니다. 전체 제품의 온라인·오프라인 기본값과 다른 설정입니다.
- 선택 옵션: COMMAND_LINE_TOOLS는 이미 설치된 등록 경로를 지정합니다.
- 신뢰 검사: 선택 후에도 그대로 적용됩니다.
확인·조치 순서:
- 현재 SDK·의존성 세대와 Apple 도구·SDK 전제 조건을 확인합니다.
- run-offline의 의존성 경로 뒤에 문서화된 --macos-developer-selection COMMAND_LINE_TOOLS를 명시하고 새 결과 폴더를 지정합니다.
- 거부가 계속되면 정확한 사유를 보존합니다. 시스템 개발 도구 선택·신뢰 저장소·공식 서명 상태를 바꿔 해결하지 않습니다.
다음 단계로 돌아갈 조건: 해당 실행의 선택된 도구와 후보 검증 결과가 확인돼야 이 경로의 성공으로 기록합니다.
해결되지 않았을 때: CLT가 없거나 신뢰 검증이 거부되면 그 전제 조건을 인계합니다. 이 옵션을 다른 OS에 사용하지 않습니다.
상세 예시 SDK-3: score를 숫자로 바꾸거나 전체 JSON을 발췌로 교체함
상황: 사용자가 예제의 점수를 88로 바꾸면서 문자열 따옴표를 지웠거나 설명용 JSON 발췌만 input.json에 저장했습니다. JSON 문법이 맞아도 선언된 입력 형식과 전체 요청 구조는 별도로 검사됩니다.
관찰을 이렇게 나눠 읽습니다.
- 원본 예제: 전체 request_id·correlation_id·draft를 포함합니다.
- score: 원본 선언은 문자열을 요구합니다. 변환 대상은 정수 quality_score입니다.
- 저장 인코딩: Windows PowerShell 5.1의 기본 파일 출력은 UTF-8과 다를 수 있습니다.
확인·조치 순서:
- 원본 전체 예제를 새 입력 경로에 복사하고 draft.fixture.response.score를 "88", component를 "my-test-component"로 바꿉니다.
- UTF-8 저장과 전체 선언을 확인한 뒤 analyze 결과를 읽습니다. 목표 ID·스키마 지문을 추측해 고치지 않습니다.
- 선택한 실행 경로로 새 결과를 만들고 매니페스트·생성 소스·라이브러리를 함께 확인합니다.
다음 단계로 돌아갈 조건: 수정 입력이 지원 형식으로 받아들여지고 같은 실행의 다섯 단계·산출물 지문이 확인되면 해당 후보만 완료로 기록합니다.
해결되지 않았을 때: 대상·권한·데이터 경계 거부가 남으면 예제 값을 바꾸는 것으로 해결됐다고 표시하지 않습니다.
상세 예시 SDK-4: adapter.rs는 같은데 라이브러리 지문이 다름
상황: 두 출력의 adapter.rs는 같지만 libadapter.rlib의 지문이 다릅니다. 출력 경로만 비교하기 전에 실제 입력·OS·컴파일러·SDK·의존성과 선택한 명령이 같은지 확인해야 합니다.
관찰을 이렇게 나눠 읽습니다.
- 소스 지문 일치: 컴파일 입력 전체의 일치는 아닙니다.
- 서로 다른 OS·컴파일러·SDK 세대: 라이브러리 동일성을 가정하지 않습니다.
- 매니페스트: 개별 실행 기록이므로 전체 파일 해시는 달라질 수 있습니다.
확인·조치 순서:
- 전체 입력 지문과 컴파일러·SDK·의존성·플랫폼·실행 경로를 두 매니페스트에서 나란히 대조합니다.
- 같은 입력 재현성 확인이 필요하면 동일한 검증된 조합으로 새 결과 폴더에 실행합니다. 기존 결과와 실패 기록은 보존합니다.
- adapter.rs와 libadapter.rlib를 각각 비교하고 단계·의존성 전후 기록도 읽습니다. 매니페스트를 편집해 지문을 같게 만들지 않습니다.
다음 단계로 돌아갈 조건: 같은 조건의 새 실행에서 지문이 일치하면 그 OS·버전·입력 범위의 재현성으로만 기록합니다.
해결되지 않았을 때: 조건이 같은데도 다르면 두 패키지·입력·산출물 지문과 최소 실행 기록을 인계합니다. 보안 후검사 실패를 성공으로 바꾸지 않습니다.
Local documentation edition. Company connection, approval and enrollment require actual supplied material. Educational scenarios are not customer execution evidence. Apple signing/notarization and customer activation/delivery remain held.
Connect the Guides and Parts 1–8
Choose a purpose in a Guide, then use the relevant Part for exact tool steps. The same sequence, vocabulary and artifact roles apply in both.
Purpose guides
- Common PoC Guide
Choose a question, collect scoped observations and review the result. A retained-reading route needs no new installation.
- Google Reviewer Guide
Bind the exact review delivery and criterion evidence. Cloud access, document coverage and actual Google approval remain separate.
- On-premises Guide
Prepare the exact OS, package, network choice and toolchain. Use the local SDK shortcut only after its prerequisites are supplied.
- Custom Execution Guide
Choose a supported task. Keep source-document preparation, full SDK candidates and actual Work/report inspection as distinct routes.
- Guide links open the public website and require network access; this offline manual and its local examples remain readable without it.
Recommended integration order and shortcuts
- Part.1 · Install and prepare
- Part.2 · Observe structure with GAPE
- Part.3A · Plan with Integration Helper
- Part.4 · Write the source Document and bind the published target Contract
- Part.3B · Check the complete request and identify implementation needs
- Part.5 if needed · SDK candidate, implementation review and separate registration
- Part.6 if needed · Builder Pack candidate and its approval path
- Part.7 · Permitted GUI or headless operation
- Part.8 · Results, troubleshooting and human review
Helper B checks the completed declarations before you decide whether implementation or a new Pack is needed. After an implementation or declaration change, repeat only the affected supported checks and finish the separate implementation/registration/Pack approval path before operation. A generated candidate grants no operating authority.
Select only the route needed for your goal. Retained PoC reading can begin without installation. A supplied local SDK exercise uses Part.1 → Part.5 and does not require a new GAPE scan or appliance account. An existing approved Pack can use Part.1 → Part.7 → Part.8 after its current prerequisites are checked. New integration/Pack authoring follows the full conditional sequence.
Part map and tool responsibilities
| Part | Role and expected boundary |
|---|---|
| Part.1 · Installation and first connection | OS preparation, supplied packages and first connection. Installation is not an executed Work. |
| Part.2 · GAPE observation, comparison and sharing | Revision-bound architecture observation. A worksheet is not the approved GAPE input manifest. |
| Part.3 · Integration Helper operation | A plans before the Document; B checks the completed full request. Each stage reads its typed status/reason. |
| Part.4 · Contract and Document authoring | Author the source Document and mappings; use the supplied target Contract/revision. JSON syntax alone does not establish semantic compatibility. |
| Part.5 · SDK Engine practice and candidates | Generate a local SDK implementation candidate. Reuse an implemented, registered, release-compatible integration when it already meets the need. |
| Part.6 · Builder and Additional Packs | Prepare a Pack candidate when a new Pack is needed. Reuse an existing approved Pack that meets the goal and installation scope. |
| Part.7 · PackrGUI and headless operation | Use the supplied GUI/headless route under its current authority and preconditions. Inspect the returned Work identity and result. |
| Part.8 · Operations, troubleshooting and support | Compare same-Work artifacts, receipt and closure; keep human acceptance pending until actually recorded. |
Shared vocabulary
- Guide / Part
- A Guide is a purpose/role route; a Part is a tool reference. They complement each other and are not two competing numbered workflows.
- Contract / source Document
- The published target Contract defines the supported target and revision. The source Document declares your source shapes. A source declaration does not authorize execution.
- Complete request / source-only file
- A complete SDK request includes request_id, correlation_id and draft with definition/source/mapping/fixture. The source-only status Document is one component, not that complete request.
- Fixture / actual observation
- A fixture supplies synthetic values for a declared local exercise. Its declared fields do not prove a real provider call, current connectivity or a customer result.
- SDK candidate / Pack candidate
- The SDK candidate has README.md, adapter.rs, libadapter.rlib and manifest.json. A Builder Pack candidate is a separate product-returned candidate with its own validation/approval path. Neither automatically becomes an approved Pack.
- Worksheet / receipt / acceptance
- A worksheet records a human note. A receipt is a product execution record. PASSED validation and automation completion can coexist with human acceptance pending; record each field at its actual scope.
- Online / Offline
- These are setup choices. Offline product development requires the exact declared dependency set and native tools; an offline manual ZIP only supports document reading.
Match each input to the right output
The status.read source-only example and the read_quality SDK exercise are different examples. Use a matching complete request; do not pass the status source file directly as the quality SDK request. Expected mapping values below are teaching expectations, not a newly captured run.
| File / role | Input | Output / check |
|---|---|---|
status-document.jsonSource-only CUSTOM_API declaration for status.read. Use it inside the complete supplied preparation request. | service: string | Declared service: string and healthy: boolean. This is a schema, not an observed service response. |
read-only-custom-api.json / custom-api-01.jsonThe complete maintained SDK base request; the guide copy is byte-equivalent JSON. | fixture.response.component = "fixture-component"; score = "97" (string) | STRING_TO_INTEGER maps score to expected integer quality_score 97. The documented SDK result is a local candidate. |
custom-api-02.jsonA complete second SDK request changing only the two fixture response values. | component = "my-test-component"; score = "88" (string) | Expected mapped component is "my-test-component" and quality_score is integer 88. Inspect actual manifest/stages; identical mapping source is possible. |
custom-api-score-number.jsonIntentional negative input, not a successful base example. | fixture.response.score = 88 (JSON number) against a declared string schema | Keep the actual typed failure result. Do not convert the example into a claimed successful candidate. |
Worksheet / SDK artifacts / Work reportsThree different artifact classes: human notes, local compiled candidate, actual Work/report/receipt records. | Use the matching tool and current target; never submit a worksheet or previous result as the next full request. | Bind outputs to the actual input, version, candidate or Work identity. File presence and exit 0 alone are insufficient. |
가이드와 Part.1–8 연결
가이드에서 목적을 고른 뒤 해당 Part에서 정확한 도구 단계를 확인합니다. 두 문서는 같은 순서·용어·자료 역할을 사용합니다.
목적별 가이드
- PoC 공통 가이드
질문을 정하고 범위에 맞는 관찰을 모아 결과를 검토합니다. 보존 기록 독해에는 신규 설치가 필요하지 않습니다.
- Google 심사자 가이드
정확한 심사 전달물과 기준 증거를 연결합니다. Cloud 접근·문서 범위·실제 Google 승인은 각각 구분합니다.
- 온프레미스 가이드
정확한 OS·패키지·네트워크 선택·도구 체인을 준비합니다. 로컬 SDK 준비 요건이 제공된 뒤에만 해당 단축 경로를 사용합니다.
- Custom Execution 가이드
지원 작업을 선택합니다. 소스 문서 준비·전체 SDK 후보·실제 Work 및 보고서 확인을 서로 다른 경로로 구분합니다.
- 가이드 링크는 네트워크가 필요한 공개 웹사이트를 엽니다. 이 오프라인 매뉴얼과 로컬 예제는 네트워크 없이 읽을 수 있습니다.
권장 연동 순서와 단축 경로
- Part.1 · 설치·준비
- Part.2 · GAPE 구조 관찰
- Part.3A · Integration Helper 계획
- Part.4 · 소스 Document 작성·게시된 대상 Contract 연결
- Part.3B · 전체 요청 확인·구현 필요 여부 확인
- 필요 시 Part.5 · SDK 후보·구현 검토·별도 등록
- 필요 시 Part.6 · Builder Pack 후보·승인 경로
- Part.7 · 허용된 GUI·헤드리스 사용
- Part.8 · 결과·문제 해결·사람 검토
Helper B는 구현·새 Pack 필요 여부를 결정하기 전에 완성된 선언을 확인합니다. 구현·선언 변경 후에는 영향을 받은 지원 검사를 다시 수행하고 별도 구현·등록·Pack 승인 경로를 마친 뒤 사용합니다. 생성 후보는 운영 권한을 부여하지 않습니다.
목표에 필요한 경로만 선택합니다. 보존 PoC 독해는 설치 없이 시작할 수 있습니다. 제공된 로컬 SDK 실습은 Part.1 → Part.5를 따르며 새 GAPE 관찰·어플라이언스 계정이 필요하지 않습니다. 기존 승인 Pack은 현재 준비 요건 확인 후 Part.1 → Part.7 → Part.8을 따를 수 있습니다. 새 연동·Pack 작성은 조건부 전체 순서를 따릅니다.
Part 연결과 도구 역할
| Part | 역할과 기대 범위 |
|---|---|
| Part.1 · 설치·초기 연결 | OS 준비·제공 패키지·초기 연결입니다. 설치는 실행된 Work가 아닙니다. |
| Part.2 · GAPE 관찰·비교·공유 | 리비전에 고정된 구조 관찰입니다. 워크시트는 승인된 GAPE 입력 매니페스트가 아닙니다. |
| Part.3 · Integration Helper 사용 | A는 Document 작성 전 계획, B는 완성된 전체 요청 확인입니다. 단계마다 타입이 있는 status·reason을 읽습니다. |
| Part.4 · Contract·Document 작성 | 소스 Document·매핑을 작성하고 제공된 대상 Contract·리비전을 사용합니다. JSON 구문만으로 의미상 호환성이 확인되지 않습니다. |
| Part.5 · SDK Engine 실습·연동 후보 | 로컬 SDK 구현 후보를 생성합니다. 기존 구현·등록·릴리스 호환 연동이 요구를 충족하면 재사용합니다. |
| Part.6 · Builder·추가 Pack 사용 | 새 Pack이 필요할 때 Pack 후보를 준비합니다. 목표·설치 범위에 맞는 기존 승인 Pack은 재사용합니다. |
| Part.7 · PackrGUI·헤드리스 사용 | 현재 권한·사전 조건에 따라 제공 GUI·헤드리스 경로를 사용합니다. 반환된 Work 식별·결과를 확인합니다. |
| Part.8 · 운영·문제 해결·지원 | 동일 Work 산출물·영수증·종결을 비교하며 사람 인수은 실제 기록될 때까지 대기로 유지합니다. |
공통 용어
- 가이드 / Part
- 가이드는 목적·역할 경로이고 Part는 도구 설명입니다. 서로 보완하며 경쟁하는 두 번호 순서가 아닙니다.
- Contract / 소스 Document
- 게시된 대상 Contract는 지원 대상·리비전을 정합니다. 소스 Document는 소스 형식을 선언합니다. 소스 선언은 실행을 승인하지 않습니다.
- 전체 요청 / 소스 전용 파일
- 전체 SDK 요청은 request_id·correlation_id와 definition·source·mapping·fixture가 있는 draft를 포함합니다. status 소스 Document는 한 구성 요소이며 전체 요청이 아닙니다.
- Fixture / 실제 관찰
- fixture는 선언된 로컬 실습의 합성 값을 제공합니다. 선언 필드는 실제 공급자 호출·현재 연결·고객 결과를 입증하지 않습니다.
- SDK 후보 / Pack 후보
- SDK 후보에는 README.md·adapter.rs·libadapter.rlib·manifest.json이 있습니다. Builder Pack 후보는 별도 제품 반환 후보이며 자체 검증·승인 경로를 가집니다. 어느 쪽도 자동으로 승인 Pack이 되지 않습니다.
- 워크시트 / 영수증 / 인수
- 워크시트는 사람 기록입니다. 영수증은 제품 실행 기록입니다. 검증 PASSED·자동화 완료와 사람 인수 대기는 함께 존재할 수 있으며 각 필드의 실제 범위를 기록합니다.
- Online / Offline
- 구성 선택 사항입니다. Offline 제품 개발에는 정확한 선언 의존성 세트·네이티브 도구가 필요하며 오프라인 매뉴얼 ZIP은 문서 열람을 지원합니다.
입력별 올바른 출력 연결
status.read 소스 전용 예제와 read_quality SDK 실습은 서로 다른 예제입니다. 일치하는 전체 요청을 사용하고 status 소스 파일을 quality SDK 전체 요청으로 제출하지 않습니다. 아래 매핑 값은 설명을 위한 기대값이며 새 실행 캡처가 아닙니다.
| 파일 / 역할 | 입력 | 출력 / 확인 |
|---|---|---|
status-document.jsonstatus.read의 소스 전용 CUSTOM_API 선언입니다. 제공된 전체 준비 요청 안에서 사용합니다. | service: string | service: string·healthy: boolean을 선언합니다. 스키마이며 관찰된 서비스 응답이 아닙니다. |
read-only-custom-api.json / custom-api-01.json유지관리되는 전체 SDK 기준 요청이며 가이드 사본은 같은 JSON입니다. | fixture.response.component = "fixture-component"; score = "97" (문자열) | STRING_TO_INTEGER는 score를 기대 정수 quality_score 97로 매핑합니다. 문서의 SDK 결과는 로컬 후보입니다. |
custom-api-02.jsonfixture 응답 값 두 개만 바꾼 두 번째 전체 SDK 요청입니다. | component = "my-test-component"; score = "88" (문자열) | 기대 매핑 component는 "my-test-component", quality_score는 정수 88입니다. 실제 매니페스트·단계를 확인하며 매핑 소스는 같을 수 있습니다. |
custom-api-score-number.json정상 기준 예제가 아닌 의도적 오류 입력입니다. | 선언된 문자열 스키마에 fixture.response.score = 88 (JSON 숫자) 사용 | 실제 타입 오류 결과를 보존하며 이 예제를 성공 후보로 기록하지 않습니다. |
Worksheet / SDK artifacts / Work reports사람 기록·로컬 컴파일 후보·실제 Work 및 보고서·영수증이라는 서로 다른 산출물 종류입니다. | 해당 도구·현재 타깃을 사용하며 워크시트·이전 결과를 다음 전체 요청으로 제출하지 않습니다. | 실제 입력·버전·후보 또는 Work 식별에 출력을 연결합니다. 파일 존재·종료 0만으로는 충분하지 않습니다. |
