pi-career 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/LICENSE-APACHE +201 -0
- package/LICENSE-MIT +21 -0
- package/NOTICE +31 -0
- package/README.md +159 -0
- package/SECURITY.md +45 -0
- package/dist/index.js +2345 -0
- package/docs/design.md +78 -0
- package/docs/licenses/MIT-aho-corasick-memchr.txt +21 -0
- package/docs/licenses/MIT-anstyle-clap-family.txt +19 -0
- package/docs/licenses/MIT-dtolnay-family.txt +23 -0
- package/docs/licenses/MIT-heck.txt +25 -0
- package/docs/licenses/MIT-regex-family.txt +25 -0
- package/docs/licenses/MIT-strsim.txt +23 -0
- package/docs/licenses/MIT-utf8parse.txt +25 -0
- package/docs/licenses/Rust-1.97.1-COPYRIGHT.txt +34 -0
- package/docs/licenses/Rust-1.97.1-LICENSE-MIT.txt +25 -0
- package/docs/licenses/Rust-1.97.1-STDLIB-NOTICE.md +16 -0
- package/docs/licenses/Unicode-3.0.txt +39 -0
- package/docs/native-dependency-inventory.md +116 -0
- package/docs/product-flow.md +47 -0
- package/docs/releasing.md +122 -0
- package/package.json +91 -0
- package/runtime/LICENSE-APACHE +201 -0
- package/runtime/LICENSE-MIT +21 -0
- package/runtime/THIRD_PARTY_NOTICES.md +22 -0
- package/runtime/darwin-arm64/career +0 -0
- package/runtime/darwin-arm64/provenance.json +101 -0
- package/runtime/linux-x64-gnu/career +0 -0
- package/runtime/linux-x64-gnu/provenance.json +101 -0
- package/runtime/manifest.json +109 -0
- package/skills/career-core/SKILL.md +134 -0
- package/skills/career-core/references/cli-contract.md +45 -0
package/docs/design.md
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Self-contained package design and threat model
|
|
2
|
+
|
|
3
|
+
## Scope and authority
|
|
4
|
+
|
|
5
|
+
`pi-career` is a self-contained Pi package in a publicly readable Git repository on two reviewed native targets. It owns the Pi extension, package-owned native runtime artifacts and resolver, Pi-facing Agent Skill, package/build tests, and installation guidance. Career Core remains authoritative for operations, schemas, algorithms, errors, evidence, warnings, uncertainty, ordering, and assisted/non-authoritative semantics; this repository does not reimplement those contracts in TypeScript.
|
|
6
|
+
|
|
7
|
+
The stable Pi surface is exactly:
|
|
8
|
+
|
|
9
|
+
- `career_core_discover`
|
|
10
|
+
- `career_core_resume`
|
|
11
|
+
- `career_core_job`
|
|
12
|
+
|
|
13
|
+
The TypeScript source is authoritative. A checked-in deterministic `dist/index.js` supports clean local, pinned-Git, and npm Pi loading without development dependencies. Pi-provided imports remain external peers. Reviewed native artifacts are tracked directly in every package channel so installation needs no lifecycle script, Cargo, Rust, system `career` executable, or post-install runtime download. Package metadata permits only reviewed public publication of the unscoped `pi-career` package to the canonical npm registry.
|
|
14
|
+
|
|
15
|
+
The deterministic workflow layer additionally registers `/career-setup`, `/career-library`, `/career-vacancy`, `/career-match`, and `/career-analyze`. These commands call the shared `invokeCareerCli` helper directly; they never route through an LLM-facing tool, provider, model, network, PATH, Cargo, sibling checkout, or downloaded runtime. See [`product-flow.md`](product-flow.md) for the phase boundary.
|
|
16
|
+
|
|
17
|
+
## Runtime provenance and selection
|
|
18
|
+
|
|
19
|
+
[`../runtime/manifest.json`](../runtime/manifest.json) pins unsigned artifacts from Career Core commit `a3cdb4c6d7f966397e93ea4664071975bca7228c` and native artifact run [30953471793](https://github.com/revazi/career-core/actions/runs/30953471793). It records exact binary/provenance paths, target triples, sizes, modes, SHA-256 values, source archive identities, shared notices, and bounded capabilities/schema/representative-operation digests. Imported per-target provenance remains package-bounded.
|
|
20
|
+
|
|
21
|
+
Resolution order is fixed:
|
|
22
|
+
|
|
23
|
+
1. A bounded absolute `CAREER_CLI_PATH`, when explicitly set for reviewed development/recovery use.
|
|
24
|
+
2. The verified package-owned binary for the current supported target.
|
|
25
|
+
3. Otherwise a stable payload-free failure.
|
|
26
|
+
|
|
27
|
+
There is no PATH, Cargo, sibling-checkout, download, npm platform-package, or install-script fallback.
|
|
28
|
+
|
|
29
|
+
Supported targets are exactly:
|
|
30
|
+
|
|
31
|
+
- `darwin-arm64` (`aarch64-apple-darwin`)
|
|
32
|
+
- `linux-x64-gnu` (`x86_64-unknown-linux-gnu`, only when Node reports glibc)
|
|
33
|
+
|
|
34
|
+
Windows, macOS x64, Linux arm64, Linux musl, and unknown libc/platform combinations fail closed as `unsupported_platform`.
|
|
35
|
+
|
|
36
|
+
Before the first bundled spawn per process, the resolver rejects symlinks/non-files, requires exact `0755` mode and size, reads the bounded binary, and verifies SHA-256. Only successful verification is cached in memory. Selection/integrity errors expose no platform details, paths, hashes, environment values, or raw filesystem failures.
|
|
37
|
+
|
|
38
|
+
## Process boundary
|
|
39
|
+
|
|
40
|
+
The adapter calls `spawn(executable, argv, { shell: false })`; operations and schema IDs are bounded before spawn. Document JSON is one bounded object string sent only through child stdin with `--input - --format json-compact`.
|
|
41
|
+
|
|
42
|
+
The process adapter creates no payload/result temporary files and adds no network, model, provider, telemetry, repair, retry, or URL-fetching behavior. The workflow layer may read configured `.md`/`.txt` roots, atomically persist non-content global config, and append consented custom session entries, but it does not change the child-process boundary. A successful child must emit exactly one UTF-8 JSON object, no stderr, and a complete result within capture and Pi-context ceilings. Authoritative output is never truncated. Oversized results fail without partial output; pi-career has no full-result export.
|
|
43
|
+
|
|
44
|
+
## Threat model
|
|
45
|
+
|
|
46
|
+
| Threat | Mitigation |
|
|
47
|
+
|---|---|
|
|
48
|
+
| Shell or argument injection | Fixed allowlisted operation mappings, bounded schema-ID syntax, direct argv-only spawn, `shell: false`, document bytes on stdin only. |
|
|
49
|
+
| Executable substitution | Override is explicit, absolute, and bounded. Default runtime path is package-fixed; no PATH/sibling/Cargo fallback exists. |
|
|
50
|
+
| Bundled artifact corruption or target swap | Exact runtime allowlist, regular-file and executable-mode checks, target binary magic, manifest/provenance/source-run lock, size and SHA-256 verification before first spawn. |
|
|
51
|
+
| Unsupported platform/libc guessed as compatible | Exact platform/arch selection and positive glibc detection; every other combination fails `unsupported_platform`. |
|
|
52
|
+
| Oversized request, stream, diagnostic, or context | UTF-8 byte bounds before spawn, independent stdout/stderr ceilings, fixed timeout, 50,000-byte/2,000-line complete-result limits, fail closed without truncation. |
|
|
53
|
+
| Hung or cancelled child | Abort propagation and fixed timeout send `SIGTERM`, then `SIGKILL` after a bounded grace period; settlement waits for close. |
|
|
54
|
+
| Malformed, ambiguous, or multiple output documents | Fatal UTF-8 decoding and exact-one-object JSON validation. |
|
|
55
|
+
| Private payload disclosure in failures | Raw stderr, process/filesystem errors, input/output, paths, hashes, platform details, and environment values never cross adapter errors or logs. Only strictly shaped, bounded, allowlisted `career.error.v1` values may be nested. |
|
|
56
|
+
| Workflow persistence leaks or races | Global config contains canonical roots/labels only, uses a `0700` directory and atomic `0600` file, and never stores source text or Core output. Session state uses branch-aware custom entries excluded from LLM context; full Core JSON is never stored. |
|
|
57
|
+
| Pi session persistence mistaken for adapter persistence | Persisted workflow sessions require the exact local-persistence decision before private vacancy or card entries. Transient sessions receive a notice. This is not secure erasure and local-session approval is not provider consent. |
|
|
58
|
+
| Adapter changes Core authority | Successful JSON is returned complete and unchanged apart from removing one framing newline. Discovery-first skill guidance preserves evidence, warnings, uncertainty, baseline boundaries, and assisted labels. |
|
|
59
|
+
| Hidden external behavior | Workflow and runtime sources contain no fetch, provider, credential, telemetry, MCP, or model invocation. Commands invoke only the package-owned deterministic process helper. No-model/offline smokes enforce the surface. |
|
|
60
|
+
| Supply-chain or packaging drift | Exact Core source/run provenance, lockfile-pinned development tools, npm derived from the real Node installation instead of `PATH`, inherited `npm_execpath` verification, npm tree/severity environment sanitization, duplicate-key-rejecting bounded JSON, verified absolute system tar, four wildcard external peers, tracked deterministic bundle, runtime/package allowlists and limits, zero low-threshold production and full audits, native CI execution on each claimed target, and extracted isolated install acceptance. |
|
|
61
|
+
|
|
62
|
+
## Build, package, and CI boundary
|
|
63
|
+
|
|
64
|
+
`npm run build` rebuilds only `dist/index.js`; native artifacts are never built or downloaded implicitly. Runtime refresh requires a separate approved native artifact workflow and manifest review.
|
|
65
|
+
|
|
66
|
+
Package checks allow only reviewed docs, extension/skill files, and the eight runtime files. They invoke npm through `process.execPath` plus its derived absolute CLI and invoke verified root-owned `/usr/bin/tar`, never a PATH-selected npm/tar. They enforce the exact public npm registry/access metadata, compressed/unpacked bounds, modes, hashes, provenance, no packaged `node_modules` or Pi package contents, no package-owned runtime npm dependencies, exactly four wildcard external peers, and no lifecycle or publication scripts. The extracted package must load, execute the current target with `CAREER_CLI_PATH` unset and an empty `PATH`, and pass an isolated Pi install/list/remove smoke.
|
|
67
|
+
|
|
68
|
+
Hosted CI uses native Ubuntu x64 GNU and macOS arm64 runners. Both run the tracked-dist stale gate, process/runtime/audit tests, complete artifact/package checks, real bundled discovery and representative resume/job operations, no-model load, isolated install, strict low-threshold `audit:production`, and the authoritative readiness-only `check:publish`. The latter is a direct Node orchestrator rather than nested npm scripts and requires clean production and full development/host-Pi audits. Both remove omit/include/audit-level/`NODE_ENV` overrides and strictly reject duplicate decoded JSON keys; no audit-acceptance baseline is allowed. Hosted tests require no separate Core checkout or provider credential.
|
|
69
|
+
|
|
70
|
+
## Installation boundary
|
|
71
|
+
|
|
72
|
+
A normal supported-target user registers a reviewed clean absolute local path, the public Git URL pinned to a full reviewed commit, or `npm:pi-career` pinned to an exact reviewed version. Pi local paths follow changing files; pinned Git refs and npm versions require an explicit new coordinate. Removal only unregisters the package and does not erase Pi sessions, shell history, backups, or separately saved results.
|
|
73
|
+
|
|
74
|
+
`CAREER_CLI_PATH` is not an onboarding requirement. A caller choosing it assumes review/compatibility responsibility for that executable; the same argv/stdin, bounds, cancellation, and error boundary still applies.
|
|
75
|
+
|
|
76
|
+
## Provenance
|
|
77
|
+
|
|
78
|
+
The initial process adapter, tool mappings, synthetic fake executable, process tests, and skill guidance were adapted from Career Core commit `100774ed8bb3b39c019d64ce105af1e3f209144f`. Bundled runtime artifacts and their metadata were imported from exact Core commit `a3cdb4c6d7f966397e93ea4664071975bca7228c` via the reviewed native artifact run. This repository preserves the applicable `MIT OR Apache-2.0` terms and package-bounded notices in `NOTICE` and `runtime/`.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2015 Andrew Gallant
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright (c) Individual contributors
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
in the Software without restriction, including without limitation the rights
|
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
furnished to do so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Permission is hereby granted, free of charge, to any
|
|
2
|
+
person obtaining a copy of this software and associated
|
|
3
|
+
documentation files (the "Software"), to deal in the
|
|
4
|
+
Software without restriction, including without
|
|
5
|
+
limitation the rights to use, copy, modify, merge,
|
|
6
|
+
publish, distribute, sublicense, and/or sell copies of
|
|
7
|
+
the Software, and to permit persons to whom the Software
|
|
8
|
+
is furnished to do so, subject to the following
|
|
9
|
+
conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice
|
|
12
|
+
shall be included in all copies or substantial portions
|
|
13
|
+
of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
|
16
|
+
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
17
|
+
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
18
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
19
|
+
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
22
|
+
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
23
|
+
DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Copyright (c) 2015 The Rust Project Developers
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any
|
|
4
|
+
person obtaining a copy of this software and associated
|
|
5
|
+
documentation files (the "Software"), to deal in the
|
|
6
|
+
Software without restriction, including without
|
|
7
|
+
limitation the rights to use, copy, modify, merge,
|
|
8
|
+
publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software
|
|
10
|
+
is furnished to do so, subject to the following
|
|
11
|
+
conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice
|
|
14
|
+
shall be included in all copies or substantial portions
|
|
15
|
+
of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
|
18
|
+
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
19
|
+
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
20
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
21
|
+
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
22
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
23
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
24
|
+
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
25
|
+
DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Copyright (c) 2014 The Rust Project Developers
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any
|
|
4
|
+
person obtaining a copy of this software and associated
|
|
5
|
+
documentation files (the "Software"), to deal in the
|
|
6
|
+
Software without restriction, including without
|
|
7
|
+
limitation the rights to use, copy, modify, merge,
|
|
8
|
+
publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software
|
|
10
|
+
is furnished to do so, subject to the following
|
|
11
|
+
conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice
|
|
14
|
+
shall be included in all copies or substantial portions
|
|
15
|
+
of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
|
18
|
+
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
19
|
+
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
20
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
21
|
+
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
22
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
23
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
24
|
+
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
25
|
+
DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2015 Danny Guo
|
|
4
|
+
Copyright (c) 2016 Titus Wormer <tituswormer@gmail.com>
|
|
5
|
+
Copyright (c) 2018 Akash Kurdekar
|
|
6
|
+
|
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
in the Software without restriction, including without limitation the rights
|
|
10
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
furnished to do so, subject to the following conditions:
|
|
13
|
+
|
|
14
|
+
The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
copies or substantial portions of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
SOFTWARE.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Copyright (c) 2016 Joe Wilm
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any
|
|
4
|
+
person obtaining a copy of this software and associated
|
|
5
|
+
documentation files (the "Software"), to deal in the
|
|
6
|
+
Software without restriction, including without
|
|
7
|
+
limitation the rights to use, copy, modify, merge,
|
|
8
|
+
publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software
|
|
10
|
+
is furnished to do so, subject to the following
|
|
11
|
+
conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice
|
|
14
|
+
shall be included in all copies or substantial portions
|
|
15
|
+
of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
|
18
|
+
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
19
|
+
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
20
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
21
|
+
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
22
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
23
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
24
|
+
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
25
|
+
DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Short version for non-lawyers:
|
|
2
|
+
|
|
3
|
+
The Rust Project is dual-licensed under Apache 2.0 and MIT
|
|
4
|
+
terms.
|
|
5
|
+
|
|
6
|
+
It is Copyright (c) The Rust Project Contributors.
|
|
7
|
+
|
|
8
|
+
Longer version:
|
|
9
|
+
|
|
10
|
+
Copyrights in the Rust project are retained by their contributors. No
|
|
11
|
+
copyright assignment is required to contribute to the Rust project.
|
|
12
|
+
|
|
13
|
+
Some files include explicit copyright notices and/or license notices.
|
|
14
|
+
For full authorship information, see the version control history or
|
|
15
|
+
<https://thanks.rust-lang.org>
|
|
16
|
+
|
|
17
|
+
Except as otherwise noted, Rust is licensed under the Apache License, Version
|
|
18
|
+
2.0 <LICENSE-APACHE> or <http://www.apache.org/licenses/LICENSE-2.0> or the MIT
|
|
19
|
+
license <LICENSE-MIT> or <http://opensource.org/licenses/MIT>, at your option.
|
|
20
|
+
|
|
21
|
+
We track licenses for third-party materials in two ways:
|
|
22
|
+
|
|
23
|
+
* We use [REUSE](https://reuse.software) to track license information for
|
|
24
|
+
in-tree source files - both those authored by the Rust project and those
|
|
25
|
+
authored by third parties. See `REUSE.toml`, and our cached output of the
|
|
26
|
+
`reuse` tool which is committed to `license-metadata.json`.
|
|
27
|
+
* We use `cargo` to track license information for out-of-tree dependencies.
|
|
28
|
+
|
|
29
|
+
These two sources of information are collected by the tool `generate-copyright`
|
|
30
|
+
into a file called `COPYRIGHT.html`, which is shipped with each binary release
|
|
31
|
+
of Rust. Please refer to that file for detailed information as to the components of
|
|
32
|
+
any given Rust release. We also produce a `COPYRIGHT-library.html` file which only
|
|
33
|
+
covers the subset of source code used in the Rust Standard Library, as opposed
|
|
34
|
+
to the toolchain as a whole.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Copyright (c) The Rust Project Contributors
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any
|
|
4
|
+
person obtaining a copy of this software and associated
|
|
5
|
+
documentation files (the "Software"), to deal in the
|
|
6
|
+
Software without restriction, including without
|
|
7
|
+
limitation the rights to use, copy, modify, merge,
|
|
8
|
+
publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software
|
|
10
|
+
is furnished to do so, subject to the following
|
|
11
|
+
conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice
|
|
14
|
+
shall be included in all copies or substantial portions
|
|
15
|
+
of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
|
18
|
+
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
19
|
+
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
20
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
21
|
+
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
22
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
23
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
24
|
+
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
25
|
+
DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Rust 1.97.1 standard-library notice
|
|
2
|
+
|
|
3
|
+
The bundled `career` executables were built with `rustc 1.97.1 (8bab26f4f 2026-07-14)`, source commit [`8bab26f4f68e0e26f0bb7960be334d5b520ea452`](https://github.com/rust-lang/rust/commit/8bab26f4f68e0e26f0bb7960be334d5b520ea452).
|
|
4
|
+
|
|
5
|
+
The Rust Standard Library is used under its MIT alternative. Preserve [`Rust-1.97.1-COPYRIGHT.txt`](Rust-1.97.1-COPYRIGHT.txt) and [`Rust-1.97.1-LICENSE-MIT.txt`](Rust-1.97.1-LICENSE-MIT.txt) with copies of either native executable.
|
|
6
|
+
|
|
7
|
+
The target-reachable standard-library source includes these upstream notices:
|
|
8
|
+
|
|
9
|
+
- Copyright The Rust Project Developers; `MIT OR Apache-2.0` (MIT selected here).
|
|
10
|
+
- `library/backtrace`: Copyright 2014 Alex Crichton and The Rust Project Developers; `MIT OR Apache-2.0` (MIT selected here).
|
|
11
|
+
- `library/std/src/sync/mpmc`: Copyright 2019 The Crossbeam Project Developers and The Rust Project Developers; `MIT OR Apache-2.0` (MIT selected here).
|
|
12
|
+
- `library/core/src/unicode/unicode_data.rs`: Copyright 1991-2024 Unicode, Inc.; `Unicode-3.0`. Preserve [`Unicode-3.0.txt`](Unicode-3.0.txt).
|
|
13
|
+
|
|
14
|
+
`library/std/src/sys/sync/mutex/fuchsia.rs` is not compiled for either `aarch64-apple-darwin` or `x86_64-unknown-linux-gnu`; its Fuchsia-specific BSD-2-Clause term is therefore outside both distributed target binaries.
|
|
15
|
+
|
|
16
|
+
This notice records package-bounded license evidence, not legal advice or a claim about files supplied by the host operating system.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
UNICODE LICENSE V3
|
|
2
|
+
|
|
3
|
+
COPYRIGHT AND PERMISSION NOTICE
|
|
4
|
+
|
|
5
|
+
Copyright © 1991-2023 Unicode, Inc.
|
|
6
|
+
|
|
7
|
+
NOTICE TO USER: Carefully read the following legal agreement. BY
|
|
8
|
+
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
|
|
9
|
+
SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
|
|
10
|
+
TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
|
|
11
|
+
DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
|
|
12
|
+
|
|
13
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
|
14
|
+
copy of data files and any associated documentation (the "Data Files") or
|
|
15
|
+
software and any associated documentation (the "Software") to deal in the
|
|
16
|
+
Data Files or Software without restriction, including without limitation
|
|
17
|
+
the rights to use, copy, modify, merge, publish, distribute, and/or sell
|
|
18
|
+
copies of the Data Files or Software, and to permit persons to whom the
|
|
19
|
+
Data Files or Software are furnished to do so, provided that either (a)
|
|
20
|
+
this copyright and permission notice appear with all copies of the Data
|
|
21
|
+
Files or Software, or (b) this copyright and permission notice appear in
|
|
22
|
+
associated Documentation.
|
|
23
|
+
|
|
24
|
+
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
|
25
|
+
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
26
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
|
27
|
+
THIRD PARTY RIGHTS.
|
|
28
|
+
|
|
29
|
+
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
|
|
30
|
+
BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
|
|
31
|
+
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
32
|
+
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
|
33
|
+
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
|
|
34
|
+
FILES OR SOFTWARE.
|
|
35
|
+
|
|
36
|
+
Except as contained in this notice, the name of a copyright holder shall
|
|
37
|
+
not be used in advertising or otherwise to promote the sale, use or other
|
|
38
|
+
dealings in these Data Files or Software without prior written
|
|
39
|
+
authorization of the copyright holder.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Native `career-cli` dependency inventory
|
|
2
|
+
|
|
3
|
+
## Status and scope
|
|
4
|
+
|
|
5
|
+
This is reproducible dependency evidence for the two native `career` binaries tracked by pi-career. It is **not legal advice**, a legal-compliance conclusion, an SPDX/CycloneDX SBOM, or release approval. A human license review remains mandatory under [`releasing.md`](releasing.md).
|
|
6
|
+
|
|
7
|
+
The inventory is pinned to:
|
|
8
|
+
|
|
9
|
+
- Career Core commit [`a3cdb4c6d7f966397e93ea4664071975bca7228c`](https://github.com/revazi/career-core/tree/a3cdb4c6d7f966397e93ea4664071975bca7228c)
|
|
10
|
+
- Cargo.lock SHA-256 `18d188cfea79128d4024dabe2e21f57e5d2098d32ffac8c4ef01243f49abb609`
|
|
11
|
+
- package `career-cli 0.1.0`
|
|
12
|
+
- build edges `normal,build`, excluding development dependencies
|
|
13
|
+
- targets `aarch64-apple-darwin` and `x86_64-unknown-linux-gnu`
|
|
14
|
+
|
|
15
|
+
The per-target provenance records show the corresponding locked release builds:
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
cargo build --release --locked -p career-cli --target aarch64-apple-darwin
|
|
19
|
+
cargo build --release --locked -p career-cli --target x86_64-unknown-linux-gnu
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Derivation
|
|
23
|
+
|
|
24
|
+
The Career Core checkout was treated as read-only. The exact commit was exported to a temporary directory outside both repositories; the temporary export was removed after these offline commands:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cargo metadata --locked --offline \
|
|
28
|
+
--filter-platform <target> --format-version 1
|
|
29
|
+
cargo tree --locked --offline -p career-cli \
|
|
30
|
+
--target <target> --edges normal,build
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Starting at the `career-cli` resolve node, only normal and build dependency edges were traversed. Package versions, manifest license expressions, registry sources, and checksums came from Cargo metadata and that commit's `Cargo.lock`.
|
|
34
|
+
|
|
35
|
+
Both targets resolve the same 30-package set. Cargo metadata reports no `kind = "build"` dependency edge in either graph. `clap_derive` and `serde_derive` are included because they are proc-macro packages reached through normal dependency edges and compiled for the build host. The table excludes all development dependencies and the unrelated `career-swift`/UniFFI workspace graph.
|
|
36
|
+
|
|
37
|
+
The Cargo graph does not enumerate the statically linked Rust Standard Library or host-supplied dynamic libraries. Those are inventoried separately below from the exact provenance `rustc` version, Rust 1.97.1 source license metadata, `otool -L runtime/darwin-arm64/career`, and `objdump -p runtime/linux-x64-gnu/career`.
|
|
38
|
+
|
|
39
|
+
## Exact reachable package set for both targets
|
|
40
|
+
|
|
41
|
+
For crates.io packages, “Source” identifies the immutable name/version registry coordinate and “Lock checksum” is the package checksum recorded in the pinned `Cargo.lock`. Workspace crates are bound by the Core commit instead.
|
|
42
|
+
|
|
43
|
+
| Package | Version | Cargo license expression | Source | Lock checksum |
|
|
44
|
+
|---|---:|---|---|---|
|
|
45
|
+
| `aho-corasick` | `1.1.4` | `Unlicense OR MIT` | [crates.io](https://crates.io/crates/aho-corasick/1.1.4) | `ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301` |
|
|
46
|
+
| `anstream` | `1.0.0` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/anstream/1.0.0) | `824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d` |
|
|
47
|
+
| `anstyle` | `1.0.14` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/anstyle/1.0.14) | `940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000` |
|
|
48
|
+
| `anstyle-parse` | `1.0.0` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/anstyle-parse/1.0.0) | `52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e` |
|
|
49
|
+
| `anstyle-query` | `1.1.5` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/anstyle-query/1.1.5) | `40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc` |
|
|
50
|
+
| `career-cli` | `0.1.0` | `MIT OR Apache-2.0` | [Core workspace](https://github.com/revazi/career-core/tree/a3cdb4c6d7f966397e93ea4664071975bca7228c/crates/career-cli) | commit-bound |
|
|
51
|
+
| `career-core` | `0.1.0` | `MIT OR Apache-2.0` | [Core workspace](https://github.com/revazi/career-core/tree/a3cdb4c6d7f966397e93ea4664071975bca7228c) | commit-bound |
|
|
52
|
+
| `clap` | `4.6.4` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/clap/4.6.4) | `d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7` |
|
|
53
|
+
| `clap_builder` | `4.6.2` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/clap_builder/4.6.2) | `f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b` |
|
|
54
|
+
| `clap_derive` | `4.6.4` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/clap_derive/4.6.4) | `d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061` |
|
|
55
|
+
| `clap_lex` | `1.1.0` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/clap_lex/1.1.0) | `c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9` |
|
|
56
|
+
| `colorchoice` | `1.0.5` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/colorchoice/1.0.5) | `1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570` |
|
|
57
|
+
| `heck` | `0.5.0` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/heck/0.5.0) | `2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea` |
|
|
58
|
+
| `is_terminal_polyfill` | `1.70.2` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/is_terminal_polyfill/1.70.2) | `a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695` |
|
|
59
|
+
| `itoa` | `1.0.18` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/itoa/1.0.18) | `8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682` |
|
|
60
|
+
| `memchr` | `2.8.3` | `Unlicense OR MIT` | [crates.io](https://crates.io/crates/memchr/2.8.3) | `cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98` |
|
|
61
|
+
| `proc-macro2` | `1.0.107` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/proc-macro2/1.0.107) | `985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9` |
|
|
62
|
+
| `quote` | `1.0.47` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/quote/1.0.47) | `1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001` |
|
|
63
|
+
| `regex` | `1.13.1` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/regex/1.13.1) | `f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d` |
|
|
64
|
+
| `regex-automata` | `0.4.16` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/regex-automata/0.4.16) | `8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad` |
|
|
65
|
+
| `regex-syntax` | `0.8.11` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/regex-syntax/0.8.11) | `d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4` |
|
|
66
|
+
| `serde` | `1.0.229` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/serde/1.0.229) | `4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba` |
|
|
67
|
+
| `serde_core` | `1.0.229` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/serde_core/1.0.229) | `67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48` |
|
|
68
|
+
| `serde_derive` | `1.0.229` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/serde_derive/1.0.229) | `e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348` |
|
|
69
|
+
| `serde_json` | `1.0.151` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/serde_json/1.0.151) | `c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14` |
|
|
70
|
+
| `strsim` | `0.11.1` | `MIT` | [crates.io](https://crates.io/crates/strsim/0.11.1) | `7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f` |
|
|
71
|
+
| `syn` | `3.0.3` | `MIT OR Apache-2.0` | [crates.io](https://crates.io/crates/syn/3.0.3) | `53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3` |
|
|
72
|
+
| `unicode-ident` | `1.0.24` | `(MIT OR Apache-2.0) AND Unicode-3.0` | [crates.io](https://crates.io/crates/unicode-ident/1.0.24) | `e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75` |
|
|
73
|
+
| `utf8parse` | `0.2.2` | `Apache-2.0 OR MIT` | [crates.io](https://crates.io/crates/utf8parse/0.2.2) | `06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821` |
|
|
74
|
+
| `zmij` | `1.0.23` | `MIT` | [crates.io](https://crates.io/crates/zmij/1.0.23) | `29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b` |
|
|
75
|
+
|
|
76
|
+
## Selected native license payload
|
|
77
|
+
|
|
78
|
+
For this source package, the MIT alternative is selected for every reachable dependency that offers MIT. For `aho-corasick` and `memchr`, MIT is selected instead of the Unlicense. `unicode-ident` additionally requires Unicode-3.0. The exact upstream license files are preserved once per byte-identical text group:
|
|
79
|
+
|
|
80
|
+
| Selected license file | SHA-256 | Applies to exact locked packages |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| [`licenses/MIT-aho-corasick-memchr.txt`](licenses/MIT-aho-corasick-memchr.txt) | `0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f` | `aho-corasick 1.1.4`, `memchr 2.8.3` |
|
|
83
|
+
| [`licenses/MIT-anstyle-clap-family.txt`](licenses/MIT-anstyle-clap-family.txt) | `6efb0476a1cc085077ed49357026d8c173bf33017278ef440f222fb9cbcb66e6` | `anstream 1.0.0`, `anstyle 1.0.14`, `anstyle-parse 1.0.0`, `anstyle-query 1.1.5`, `clap 4.6.4`, `clap_builder 4.6.2`, `clap_derive 4.6.4`, `clap_lex 1.1.0`, `colorchoice 1.0.5`, `is_terminal_polyfill 1.70.2` |
|
|
84
|
+
| [`licenses/MIT-heck.txt`](licenses/MIT-heck.txt) | `7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0` | `heck 0.5.0` |
|
|
85
|
+
| [`licenses/MIT-dtolnay-family.txt`](licenses/MIT-dtolnay-family.txt) | `23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3` | `itoa 1.0.18`, `proc-macro2 1.0.107`, `quote 1.0.47`, `serde 1.0.229`, `serde_core 1.0.229`, `serde_derive 1.0.229`, `serde_json 1.0.151`, `syn 3.0.3`, `unicode-ident 1.0.24`, `zmij 1.0.23` |
|
|
86
|
+
| [`licenses/MIT-regex-family.txt`](licenses/MIT-regex-family.txt) | `6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb` | `regex 1.13.1`, `regex-automata 0.4.16`, `regex-syntax 0.8.11` |
|
|
87
|
+
| [`licenses/MIT-strsim.txt`](licenses/MIT-strsim.txt) | `1e697ce8d21401fbf1bddd9b5c3fd4c4c79ae1e3bdf51f81761c85e11d5a89cd` | `strsim 0.11.1` |
|
|
88
|
+
| [`licenses/MIT-utf8parse.txt`](licenses/MIT-utf8parse.txt) | `e4c9b06fa850cb9b540a5e400e9f6394cf15efcf4098144de477d1d3dae10150` | `utf8parse 0.2.2` |
|
|
89
|
+
| [`licenses/Unicode-3.0.txt`](licenses/Unicode-3.0.txt) | `f7db81051789b729fea528a63ec4c938fdcb93d9d61d97dc8cc2e9df6d47f2a1` | `unicode-ident 1.0.24`; Rust standard-library Unicode data |
|
|
90
|
+
|
|
91
|
+
The two workspace packages use the project-authored MIT alternative preserved at `runtime/LICENSE-MIT`. No reachable crate has a package-specific notice file beyond the selected texts above.
|
|
92
|
+
|
|
93
|
+
## Rust Standard Library and dynamic system inventory
|
|
94
|
+
|
|
95
|
+
Both provenance files identify `rustc 1.97.1 (8bab26f4f 2026-07-14)`, exact Rust source commit [`8bab26f4f68e0e26f0bb7960be334d5b520ea452`](https://github.com/rust-lang/rust/commit/8bab26f4f68e0e26f0bb7960be334d5b520ea452). The statically linked Rust Standard Library uses its MIT alternative plus Unicode-3.0 for generated Unicode data:
|
|
96
|
+
|
|
97
|
+
| Evidence | SHA-256 |
|
|
98
|
+
|---|---|
|
|
99
|
+
| [`licenses/Rust-1.97.1-COPYRIGHT.txt`](licenses/Rust-1.97.1-COPYRIGHT.txt) | `172020dbfd5b53a226dfde77616190a48dcff519b0bc0e6deb91a8450782c4af` |
|
|
100
|
+
| [`licenses/Rust-1.97.1-LICENSE-MIT.txt`](licenses/Rust-1.97.1-LICENSE-MIT.txt) | `b71bd43a069ca0641a9ecfe585ca7b3c53b5cc1608f8b68321168698e28b5ea1` |
|
|
101
|
+
| [`licenses/Rust-1.97.1-STDLIB-NOTICE.md`](licenses/Rust-1.97.1-STDLIB-NOTICE.md) | `294893c9a5aef6fa5578cc190735e72251268366924d8f1dd8a40ca0e58394df` |
|
|
102
|
+
|
|
103
|
+
The target linkage inventory is:
|
|
104
|
+
|
|
105
|
+
| Bundled target | Dynamic imports supplied by the target operating system |
|
|
106
|
+
|---|---|
|
|
107
|
+
| `aarch64-apple-darwin` | `/usr/lib/libSystem.B.dylib` |
|
|
108
|
+
| `x86_64-unknown-linux-gnu` | `libgcc_s.so.1`, `libc.so.6`, `ld-linux-x86-64.so.2` |
|
|
109
|
+
|
|
110
|
+
Those dynamic libraries are not copied into this repository, npm-pack artifact, or GitHub source archive; their host-system license payloads are therefore not package contents. The Rust notice explicitly excludes the Fuchsia-only standard-library source path from both compiled target inventories.
|
|
111
|
+
|
|
112
|
+
## Completeness boundary
|
|
113
|
+
|
|
114
|
+
No MPL-2.0 UniFFI package is reachable from this `career-cli` normal/build graph. The UniFFI entries in `runtime/THIRD_PARTY_NOTICES.md` belong to the excluded Swift adapter graph, not either distributed CLI target.
|
|
115
|
+
|
|
116
|
+
This evidence closes the package-owned inventory and selected-license payload mechanically: 28 crates.io packages, two Career Core workspace packages, the Rust 1.97.1 Standard Library, and the exact dynamic imports for both binaries are accounted for. It is not legal advice or automated approval. The documented human review required by [`releasing.md`](releasing.md) must confirm the evidence and either approve it or keep release blocked; that policy transparently permits sole-maintainer sign-off when independent review is unavailable.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Product flow roadmap
|
|
2
|
+
|
|
3
|
+
## Current phase: deterministic tools and slash-command MVP
|
|
4
|
+
|
|
5
|
+
This package preserves the three stable native tools:
|
|
6
|
+
|
|
7
|
+
- `career_core_discover`
|
|
8
|
+
- `career_core_resume`
|
|
9
|
+
- `career_core_job`
|
|
10
|
+
|
|
11
|
+
It also registers:
|
|
12
|
+
|
|
13
|
+
- `/career-setup` for library and privacy onboarding—not external CLI installation
|
|
14
|
+
- `/career-library` for explicitly configured Markdown/text resume roots
|
|
15
|
+
- `/career-vacancy` for bounded vacancy input after session-persistence consent
|
|
16
|
+
- `/career-match` for deterministic multi-resume matching and conservative ranking
|
|
17
|
+
- `/career-analyze` for deterministic single-resume readiness detail
|
|
18
|
+
|
|
19
|
+
On supported targets all eight routes invoke the package-owned deterministic Career Core runtime. Slash commands call the shared process helper directly and do not use a provider/model or an LLM-facing tool.
|
|
20
|
+
|
|
21
|
+
Binding boundaries:
|
|
22
|
+
|
|
23
|
+
- no provider/model calls in deterministic commands
|
|
24
|
+
- agent-directory-relative non-sensitive config only
|
|
25
|
+
- no resume or vacancy text in global config
|
|
26
|
+
- session entries only after explicit persistence consent; entries persist to JSONL even when excluded from model context
|
|
27
|
+
- original resumes only for deterministic analyze/match
|
|
28
|
+
- assisted variants remain labeled and excluded from authoritative reranking
|
|
29
|
+
- stable path/id tie-breaking; any close-cluster label is a UI heuristic, not a Core result
|
|
30
|
+
- cancellation aborts the active child and stops remaining batch work
|
|
31
|
+
- no full-result export unless a separate bounded local-file workflow is designed and tested
|
|
32
|
+
|
|
33
|
+
The approved workflow specification fixes command behavior, persistence format, non-TUI behavior, bounded UI, and cancellation ownership. Print/JSON modes fail closed except for the pure `/career-vacancy clear` state action.
|
|
34
|
+
|
|
35
|
+
## Later phase: assisted workflows
|
|
36
|
+
|
|
37
|
+
Model-assisted tailoring or suggestion review is intentionally deferred. A future phase may use the currently selected Pi model only after separate provider consent, validate one bounded schema-driven proposal, pass it through Career Core review/materialization, and save a new immutable assisted file. It must not add provider fallback, automatic repair/retry, overwrite originals, auto-apply changes, or feed assisted output back into authoritative analysis/matching.
|
|
38
|
+
|
|
39
|
+
## Non-goals in this phase
|
|
40
|
+
|
|
41
|
+
- provider/model-assisted commands or full-screen UI
|
|
42
|
+
- PDF/DOCX/OCR/URL ingestion
|
|
43
|
+
- model/provider integration
|
|
44
|
+
- source-document or full-Core-result persistence outside the approved config/custom-entry workflow
|
|
45
|
+
- source document mutation
|
|
46
|
+
- publication, release downloads, signing, or notarization
|
|
47
|
+
- expanded runtime platform claims beyond `darwin-arm64` and `linux-x64-gnu`
|