job-forge 2.14.38 → 2.14.39

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.
Files changed (52) hide show
  1. package/.codex/config.toml +1 -1
  2. package/.cursor/rules/main.mdc +1 -1
  3. package/AGENTS.md +1 -1
  4. package/CLAUDE.md +1 -1
  5. package/README.md +3 -3
  6. package/batch/README.md +1 -1
  7. package/bin/create-job-forge.mjs +3 -3
  8. package/bin/sync.mjs +1 -1
  9. package/docs/ARCHITECTURE.md +20 -20
  10. package/docs/CUSTOMIZATION.md +20 -20
  11. package/docs/README.md +1 -1
  12. package/docs/SETUP.md +2 -2
  13. package/iso/instructions.md +1 -1
  14. package/lib/jobforge-cache.mjs +1 -1
  15. package/lib/jobforge-canon.mjs +1 -1
  16. package/lib/jobforge-capabilities.mjs +1 -1
  17. package/lib/jobforge-context.mjs +1 -1
  18. package/lib/jobforge-contracts.mjs +1 -1
  19. package/lib/jobforge-facts.mjs +1 -1
  20. package/lib/jobforge-index.mjs +1 -1
  21. package/lib/jobforge-ledger.mjs +1 -1
  22. package/lib/jobforge-lineage.mjs +1 -1
  23. package/lib/jobforge-migrate.mjs +1 -1
  24. package/lib/jobforge-observability.mjs +1 -1
  25. package/lib/jobforge-postflight.mjs +1 -1
  26. package/lib/jobforge-preflight.mjs +1 -1
  27. package/lib/jobforge-prioritize.mjs +1 -1
  28. package/lib/jobforge-redact.mjs +1 -1
  29. package/lib/jobforge-score.mjs +1 -1
  30. package/lib/jobforge-timeline.mjs +1 -1
  31. package/models.yaml +1 -1
  32. package/modes/batch.md +1 -1
  33. package/modes/reference-setup.md +1 -1
  34. package/package.json +26 -26
  35. package/scripts/batch-orchestrator.mjs +2 -2
  36. package/scripts/cache.mjs +1 -1
  37. package/scripts/canon.mjs +1 -1
  38. package/scripts/check-helper-integration.mjs +19 -19
  39. package/scripts/facts.mjs +1 -1
  40. package/scripts/guard.mjs +1 -1
  41. package/scripts/index.mjs +1 -1
  42. package/scripts/ledger.mjs +1 -1
  43. package/scripts/lineage.mjs +1 -1
  44. package/scripts/migrate.mjs +1 -1
  45. package/scripts/postflight.mjs +1 -1
  46. package/scripts/preflight.mjs +1 -1
  47. package/scripts/prioritize.mjs +1 -1
  48. package/scripts/redact.mjs +1 -1
  49. package/scripts/score.mjs +1 -1
  50. package/scripts/timeline.mjs +1 -1
  51. package/scripts/trace.mjs +1 -1
  52. package/templates/portals.example.yml +1 -1
@@ -1,4 +1,4 @@
1
- # generated by @razroo/iso-route — do not hand-edit
1
+ # generated by @agent-pattern-labs/iso-route — do not hand-edit
2
2
  model = "gpt-5.4"
3
3
  model_provider = "openai"
4
4
 
@@ -56,7 +56,7 @@ AI-powered job search pipeline: scans portals, evaluates offers, generates CVs v
56
56
  - [D6] Pick the mode from the **Routing** table below AND name it explicitly in your first response (e.g., "running auto-pipeline mode", "this is a `compare` request"). If no row matches the user's intent, ask which mode fits; do not guess.
57
57
  why: silent mode picks mis-route work (a "negotiation" question answered in `offer` mode produces the wrong report shape); naming the mode out loud makes the routing decision reviewable and gives downstream dispatches a reliable anchor
58
58
 
59
- - [D7] For standalone `batch` runs, prefer `batch/batch-runner.sh` instead of hand-rolling the loop. It delegates to `@razroo/iso-orchestrator`, persists workflow records in `.jobforge-runs/`, caps bundle fan-out, and mutexes state/report-number writes. Use `JOBFORGE_LEGACY_BATCH_RUNNER=1` only as a fallback.
59
+ - [D7] For standalone `batch` runs, prefer `batch/batch-runner.sh` instead of hand-rolling the loop. It delegates to `@agent-pattern-labs/iso-orchestrator`, persists workflow records in `.jobforge-runs/`, caps bundle fan-out, and mutexes state/report-number writes. Use `JOBFORGE_LEGACY_BATCH_RUNNER=1` only as a fallback.
60
60
  why: the old Bash loop encoded resumability and parallelism manually; the iso-orchestrator path makes the durable control state inspectable and prevents report-number collisions under parallel bundles
61
61
 
62
62
  - [D8] Use deterministic local helpers instead of prose when they can answer or validate state, identity, policy, scoring, timing, dispatch, priority, lineage, migration, or safe-export questions. Read `modes/reference-local-helpers.md` when choosing a helper or changing helper wiring.
package/AGENTS.md CHANGED
@@ -51,7 +51,7 @@ AI-powered job search pipeline: scans portals, evaluates offers, generates CVs v
51
51
  - [D6] Pick the mode from the **Routing** table below AND name it explicitly in your first response (e.g., "running auto-pipeline mode", "this is a `compare` request"). If no row matches the user's intent, ask which mode fits; do not guess.
52
52
  why: silent mode picks mis-route work (a "negotiation" question answered in `offer` mode produces the wrong report shape); naming the mode out loud makes the routing decision reviewable and gives downstream dispatches a reliable anchor
53
53
 
54
- - [D7] For standalone `batch` runs, prefer `batch/batch-runner.sh` instead of hand-rolling the loop. It delegates to `@razroo/iso-orchestrator`, persists workflow records in `.jobforge-runs/`, caps bundle fan-out, and mutexes state/report-number writes. Use `JOBFORGE_LEGACY_BATCH_RUNNER=1` only as a fallback.
54
+ - [D7] For standalone `batch` runs, prefer `batch/batch-runner.sh` instead of hand-rolling the loop. It delegates to `@agent-pattern-labs/iso-orchestrator`, persists workflow records in `.jobforge-runs/`, caps bundle fan-out, and mutexes state/report-number writes. Use `JOBFORGE_LEGACY_BATCH_RUNNER=1` only as a fallback.
55
55
  why: the old Bash loop encoded resumability and parallelism manually; the iso-orchestrator path makes the durable control state inspectable and prevents report-number collisions under parallel bundles
56
56
 
57
57
  - [D8] Use deterministic local helpers instead of prose when they can answer or validate state, identity, policy, scoring, timing, dispatch, priority, lineage, migration, or safe-export questions. Read `modes/reference-local-helpers.md` when choosing a helper or changing helper wiring.
package/CLAUDE.md CHANGED
@@ -51,7 +51,7 @@ AI-powered job search pipeline: scans portals, evaluates offers, generates CVs v
51
51
  - [D6] Pick the mode from the **Routing** table below AND name it explicitly in your first response (e.g., "running auto-pipeline mode", "this is a `compare` request"). If no row matches the user's intent, ask which mode fits; do not guess.
52
52
  why: silent mode picks mis-route work (a "negotiation" question answered in `offer` mode produces the wrong report shape); naming the mode out loud makes the routing decision reviewable and gives downstream dispatches a reliable anchor
53
53
 
54
- - [D7] For standalone `batch` runs, prefer `batch/batch-runner.sh` instead of hand-rolling the loop. It delegates to `@razroo/iso-orchestrator`, persists workflow records in `.jobforge-runs/`, caps bundle fan-out, and mutexes state/report-number writes. Use `JOBFORGE_LEGACY_BATCH_RUNNER=1` only as a fallback.
54
+ - [D7] For standalone `batch` runs, prefer `batch/batch-runner.sh` instead of hand-rolling the loop. It delegates to `@agent-pattern-labs/iso-orchestrator`, persists workflow records in `.jobforge-runs/`, caps bundle fan-out, and mutexes state/report-number writes. Use `JOBFORGE_LEGACY_BATCH_RUNNER=1` only as a fallback.
55
55
  why: the old Bash loop encoded resumability and parallelism manually; the iso-orchestrator path makes the durable control state inspectable and prevents report-number collisions under parallel bundles
56
56
 
57
57
  - [D8] Use deterministic local helpers instead of prose when they can answer or validate state, identity, policy, scoring, timing, dispatch, priority, lineage, migration, or safe-export questions. Read `modes/reference-local-helpers.md` when choosing a helper or changing helper wiring.
package/README.md CHANGED
@@ -31,7 +31,7 @@ The scaffolded `opencode.json` already has three MCPs wired up — they launch a
31
31
  - **Gmail** — reads replies from recruiters
32
32
  - **state-trace** — typed working memory for cross-session context (resumed batches, recent decisions, repeated portal quirks). Install once with `python3 -m pip install "state-trace[mcp]"`; the MCP command is `state-trace-mcp`.
33
33
 
34
- JobForge also keeps MCP-free local workflow state and policy: `templates/canon.json` defines URL/company/role identity keys via `@razroo/iso-canon`, `templates/contracts.json` defines tracker/apply artifact shapes via `@razroo/iso-contract`, `templates/score.json` defines weighted scoring and gates via `@razroo/iso-score`, `templates/timeline.json` defines follow-up and next-action windows via `@razroo/iso-timeline`, `templates/prioritize.json` defines next-action ranking via `@razroo/iso-prioritize`, `templates/capabilities.json` defines role capability boundaries via `@razroo/iso-capabilities`, `templates/context.json` defines deterministic mode/reference bundles via `@razroo/iso-context`, `templates/preflight.json` defines safe dispatch rounds/gates via `@razroo/iso-preflight`, `templates/postflight.json` defines safe dispatch settlement via `@razroo/iso-postflight`, `templates/redact.json` defines safe-export redaction rules via `@razroo/iso-redact`, `templates/migrations.json` defines safe consumer-project upgrades via `@razroo/iso-migrate`, `templates/facts.json` defines source-backed fact extraction via `@razroo/iso-facts`, `.jobforge-ledger/events.jsonl` records duplicate/status events via `@razroo/iso-ledger`, `.jobforge-cache/` stores reusable JD/artifact content via `@razroo/iso-cache`, `.jobforge-index.json` indexes artifact source pointers via `@razroo/iso-index`, `.jobforge-facts.json` materializes queryable facts with provenance, `.jobforge-timeline.json` materializes due/overdue follow-up actions, `.jobforge-prioritize.json` materializes the ranked local priority queue, and `.jobforge-lineage.json` records stale-output checks for generated artifacts via `@razroo/iso-lineage`. None of these add always-on prompt or tool-schema tokens.
34
+ JobForge also keeps MCP-free local workflow state and policy: `templates/canon.json` defines URL/company/role identity keys via `@agent-pattern-labs/iso-canon`, `templates/contracts.json` defines tracker/apply artifact shapes via `@agent-pattern-labs/iso-contract`, `templates/score.json` defines weighted scoring and gates via `@agent-pattern-labs/iso-score`, `templates/timeline.json` defines follow-up and next-action windows via `@agent-pattern-labs/iso-timeline`, `templates/prioritize.json` defines next-action ranking via `@agent-pattern-labs/iso-prioritize`, `templates/capabilities.json` defines role capability boundaries via `@agent-pattern-labs/iso-capabilities`, `templates/context.json` defines deterministic mode/reference bundles via `@agent-pattern-labs/iso-context`, `templates/preflight.json` defines safe dispatch rounds/gates via `@agent-pattern-labs/iso-preflight`, `templates/postflight.json` defines safe dispatch settlement via `@agent-pattern-labs/iso-postflight`, `templates/redact.json` defines safe-export redaction rules via `@agent-pattern-labs/iso-redact`, `templates/migrations.json` defines safe consumer-project upgrades via `@agent-pattern-labs/iso-migrate`, `templates/facts.json` defines source-backed fact extraction via `@agent-pattern-labs/iso-facts`, `.jobforge-ledger/events.jsonl` records duplicate/status events via `@agent-pattern-labs/iso-ledger`, `.jobforge-cache/` stores reusable JD/artifact content via `@agent-pattern-labs/iso-cache`, `.jobforge-index.json` indexes artifact source pointers via `@agent-pattern-labs/iso-index`, `.jobforge-facts.json` materializes queryable facts with provenance, `.jobforge-timeline.json` materializes due/overdue follow-up actions, `.jobforge-prioritize.json` materializes the ranked local priority queue, and `.jobforge-lineage.json` records stale-output checks for generated artifacts via `@agent-pattern-labs/iso-lineage`. None of these add always-on prompt or tool-schema tokens.
35
35
 
36
36
  `npm install` also materializes symlinks for every supported agent harness — OpenCode, Cursor, Claude Code, and Codex — so you can run `opencode`, `cursor`, `claude`, or `codex` in the same project and each picks up the shared MCP config and instructions.
37
37
 
@@ -75,7 +75,7 @@ JobForge turns opencode into a full job search command center. Instead of manual
75
75
  | **Smart LinkedIn Outreach** | Reads evaluation reports to craft targeted messages using top proof points |
76
76
  | **Portal Scanner** | 45+ companies pre-configured with fuzzy dedup for reposts |
77
77
  | **Batch Processing** | Parallel evaluation with headless AI CLI workers (`opencode run` or `codex exec`), with honest verification flagging |
78
- | **Durable Batch Orchestration** | `batch-runner.sh` uses `@razroo/iso-orchestrator` for resumable bundle execution, bounded fan-out, mutexed state writes, and workflow records in `.jobforge-runs/`. |
78
+ | **Durable Batch Orchestration** | `batch-runner.sh` uses `@agent-pattern-labs/iso-orchestrator` for resumable bundle execution, bounded fan-out, mutexed state writes, and workflow records in `.jobforge-runs/`. |
79
79
  | **Pipeline Integrity** | Automated merge, dedup, status normalization, health checks |
80
80
  | **Cost-Aware Agent Routing** | Three subagents (`@general-free`, `@general-paid`, `@glm-minimal`) with per-task tool surfaces. On OpenCode, JobForge pins all tiers to `opencode-go/deepseek-v4-flash` so application runs avoid overloaded free-model pools. See [Subagent Routing in AGENTS.md](AGENTS.md) for the task-to-agent mapping. |
81
81
  | **Trace + Telemetry + Guard + Contract + Score + Canon + Ledger + Capabilities + Context + Cache + Index + Facts + Timeline + Prioritize + Lineage + Preflight + Postflight + Redact + Migrate** | `job-forge trace:*` exposes local harness transcripts, `job-forge telemetry:*` summarizes runs, `job-forge guard:*` audits deterministic policy rules, `templates/contracts.json` enforces artifact shape with `iso-contract`, `job-forge score:*` computes/checks weighted offer scores, `job-forge canon:*` derives stable URL/company/role identity keys, `job-forge ledger:*` queries append-only workflow state, `job-forge capabilities:*` checks role boundaries, `job-forge context:*` plans mode/reference context bundles, `job-forge cache:*` reuses fetched JD/artifact content, `job-forge index:*` queries compact source pointers, `job-forge facts:*` materializes source-backed job/application/candidate facts, `job-forge timeline:*` computes due/overdue follow-up actions, `job-forge prioritize:*` ranks local apply/follow-up candidates, `job-forge lineage:*` detects stale reports/PDFs after source changes, `job-forge preflight:*` plans bounded apply dispatch rounds from file-backed candidate facts, `job-forge postflight:*` settles dispatch outcomes/artifacts/post-steps, `job-forge redact:*` sanitizes local exports, and `job-forge migrate:*` applies safe consumer-project upgrades without MCP/tool-schema overhead. |
@@ -226,7 +226,7 @@ JobForge/
226
226
  └── .github/workflows/ # quality.yml + release.yml (CI publish to npm)
227
227
  ```
228
228
 
229
- All per-harness config trees (`.opencode/`, `.cursor/`, `.claude/`, `.codex/`, `CLAUDE.md`, `AGENTS.md`, `.mcp.json`, `opencode.json`) are **generated** from `iso/` by [`@razroo/iso-harness`](https://www.npmjs.com/package/@razroo/iso-harness) and gitignored in this repo. `npm run build:config` regenerates them locally; `prepack` regenerates them into the tarball at publish time so consumers get everything pre-baked.
229
+ All per-harness config trees (`.opencode/`, `.cursor/`, `.claude/`, `.codex/`, `CLAUDE.md`, `AGENTS.md`, `.mcp.json`, `opencode.json`) are **generated** from `iso/` by [`@agent-pattern-labs/iso-harness`](https://www.npmjs.com/package/@agent-pattern-labs/iso-harness) and gitignored in this repo. `npm run build:config` regenerates them locally; `prepack` regenerates them into the tarball at publish time so consumers get everything pre-baked.
230
230
 
231
231
  ## Documentation
232
232
 
package/batch/README.md CHANGED
@@ -14,7 +14,7 @@ The `batch/` folder holds the **parallel batch runner** for processing 10+ job U
14
14
 
15
15
  Per [`.gitignore`](../.gitignore): `batch-input.tsv`, `batch-state.tsv`, `logs/*`, `tracker-additions/*.tsv`, and `.jobforge-runs/`. Empty dirs (`logs/`, `tracker-additions/`) use `.gitkeep` so the tree exists in a fresh clone.
16
16
 
17
- The default runner uses `@razroo/iso-orchestrator` through
17
+ The default runner uses `@agent-pattern-labs/iso-orchestrator` through
18
18
  `scripts/batch-orchestrator.mjs`. It persists bundle steps and events in
19
19
  `.jobforge-runs/`, caps worker fan-out with `workflow.forEach`, serializes
20
20
  state/report-number writes while parallel bundles run, and records worker
@@ -286,7 +286,7 @@ write('opencode.json', JSON.stringify(opencodeCfg, null, 2) + '\n');
286
286
 
287
287
  write('AGENTS.md', `# AGENTS — ${name}
288
288
 
289
- Personal job search project using the [job-forge](https://github.com/razroo/JobForge) harness. The harness lives in \`node_modules/job-forge/\`; most files you need are accessible through symlinks at the project root.
289
+ Personal job search project using the [job-forge](https://github.com/Agent-Pattern-Labs/JobForge) harness. The harness lives in \`node_modules/job-forge/\`; most files you need are accessible through symlinks at the project root.
290
290
 
291
291
  **How context loads in this project:** opencode auto-loads *this* file as the project-root AGENTS.md, then loads \`AGENTS.harness.md\` plus \`.opencode/instructions.md\` via \`opencode.json:instructions\`. \`AGENTS.harness.md\` is the shared cross-harness contract; \`.opencode/instructions.md\` is reserved for OpenCode-only addenda. Keep *this* file for personal overrides — anything you want to diverge from or add on top.
292
292
 
@@ -442,7 +442,7 @@ node_modules/
442
442
 
443
443
  write('README.md', `# ${name}
444
444
 
445
- Personal job search project using the [job-forge](https://github.com/razroo/JobForge) harness.
445
+ Personal job search project using the [job-forge](https://github.com/Agent-Pattern-Labs/JobForge) harness.
446
446
 
447
447
  ## Setup
448
448
 
@@ -459,7 +459,7 @@ Then fill in:
459
459
  ## Updating the harness
460
460
 
461
461
  \`\`\`bash
462
- npm update job-forge # pulls the latest from razroo/JobForge
462
+ npm update job-forge # pulls the latest from Agent-Pattern-Labs/JobForge
463
463
  job-forge sync # re-run if symlinks drift
464
464
  \`\`\`
465
465
 
package/bin/sync.mjs CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  loadMigrationConfig,
28
28
  parseJson,
29
29
  runMigrations,
30
- } from '@razroo/iso-migrate';
30
+ } from '@agent-pattern-labs/iso-migrate';
31
31
 
32
32
  const __dirname = dirname(fileURLToPath(import.meta.url));
33
33
  const PKG_ROOT = resolve(__dirname, '..');
@@ -4,7 +4,7 @@
4
4
 
5
5
  JobForge ships as an npm package at [`job-forge`](https://www.npmjs.com/package/job-forge). There are two kinds of repo involved:
6
6
 
7
- - **Harness** — this repo, `razroo/JobForge`. Published to npm. Contains `iso/` (single source of truth), modes, scripts, skill router, templates, fonts, dashboard, and bin entries. Per-harness config trees are **generated** from `iso/` by [`@razroo/iso-harness`](https://www.npmjs.com/package/@razroo/iso-harness) — gitignored here, baked into the tarball by `prepack` at publish time, and landed in consumer projects via symlinks.
7
+ - **Harness** — this repo, `Agent-Pattern-Labs/JobForge`. Published to npm. Contains `iso/` (single source of truth), modes, scripts, skill router, templates, fonts, dashboard, and bin entries. Per-harness config trees are **generated** from `iso/` by [`@agent-pattern-labs/iso-harness`](https://www.npmjs.com/package/@agent-pattern-labs/iso-harness) — gitignored here, baked into the tarball by `prepack` at publish time, and landed in consumer projects via symlinks.
8
8
  - **Consumer project** — what users interact with day-to-day. Scaffolded via `npx --package=job-forge create-job-forge <dir>`, or hand-authored with `job-forge` listed in `package.json` dependencies.
9
9
 
10
10
  The consumer's project root contains personal data plus symlinks into `node_modules/job-forge/`:
@@ -148,7 +148,7 @@ Each worker is a headless CLI agent (`opencode run` or `codex exec`) that receiv
148
148
 
149
149
  The orchestrator manages parallelism, state, retries, and resume. The default
150
150
  runner delegates to `scripts/batch-orchestrator.mjs`, which uses
151
- `@razroo/iso-orchestrator` for bounded bundle fan-out, idempotent bundle steps,
151
+ `@agent-pattern-labs/iso-orchestrator` for bounded bundle fan-out, idempotent bundle steps,
152
152
  mutexed report-number/state writes, and worker leases/heartbeats. Pass
153
153
  `--runner codex` to use Codex workers instead of OpenCode. Set
154
154
  `JOBFORGE_LEGACY_BATCH_RUNNER=1` only if you need the old shell loop.
@@ -235,7 +235,7 @@ When the tracker file is missing, checks 1-6 and 8 are skipped; checks 7, 9, 10,
235
235
 
236
236
  Prefer one focused change per pull request: a single mode under `modes/`, one repository-root `.mjs` utility, documentation under `docs/`, fictional samples under [`examples/`](../examples/README.md), templates such as [`templates/portals.example.yml`](../templates/portals.example.yml), the batch flow described in [`batch/README.md`](../batch/README.md), or the Go TUI under `dashboard/` — not a repo-wide refactor across 3+ of those at once. Branch workflow, the verify + dashboard build gate, and starter ideas are in [CONTRIBUTING.md](../CONTRIBUTING.md) (**What to Contribute** and **Development**). To look for in-repo `TODO`, `FIXME`, or `HACK` markers before choosing a task, use the `rg` one-liner in [CONTRIBUTING.md — Optional: scripted agent iterations](../CONTRIBUTING.md#optional-scripted-agent-iterations). Upstream PRs MUST stay generic: do not commit real candidate data (`cv.md`, `config/profile.yml`, personalized `portals.yml`, `data/applications.md`, `reports/`, or similar paths called out in CONTRIBUTING and `.gitignore`).
237
237
 
238
- **PR / maintainer gate:** Before opening a pull request against `razroo/JobForge`, run `npm run verify`, `npm run smoke:iso`, and `npm run build:dashboard` (or `(cd dashboard && go build .)`) from the harness repo root (same as [CONTRIBUTING.md](../CONTRIBUTING.md#development)). `smoke:iso` includes `npm run lint:helpers`, which prevents local helper dependencies, CLI aliases, scaffolder scripts, migrations, generated ignores, templates, docs, and helper reference from drifting. For optional scripted iterations that repeat that gate and commit one small change per pass, see [`scripts/cursor-agent-loop.sh`](../scripts/cursor-agent-loop.sh) (environment variables and usage in the script header; overview in [CONTRIBUTING.md](../CONTRIBUTING.md#optional-scripted-agent-iterations)).
238
+ **PR / maintainer gate:** Before opening a pull request against `Agent-Pattern-Labs/JobForge`, run `npm run verify`, `npm run smoke:iso`, and `npm run build:dashboard` (or `(cd dashboard && go build .)`) from the harness repo root (same as [CONTRIBUTING.md](../CONTRIBUTING.md#development)). `smoke:iso` includes `npm run lint:helpers`, which prevents local helper dependencies, CLI aliases, scaffolder scripts, migrations, generated ignores, templates, docs, and helper reference from drifting. For optional scripted iterations that repeat that gate and commit one small change per pass, see [`scripts/cursor-agent-loop.sh`](../scripts/cursor-agent-loop.sh) (environment variables and usage in the script header; overview in [CONTRIBUTING.md](../CONTRIBUTING.md#optional-scripted-agent-iterations)).
239
239
 
240
240
  Scripts maintain data consistency. In a consumer project they're invoked via the `job-forge` CLI (`npx job-forge <cmd>`); in the harness repo they're also directly runnable as `node <script>.mjs`.
241
241
 
@@ -248,24 +248,24 @@ Scripts maintain data consistency. In a consumer project they're invoked via the
248
248
  | `generate-pdf.mjs` | `npx job-forge pdf` | Renders HTML to PDF via Geometra MCP (`geometra_generate_pdf`) or standalone Playwright/Chromium (`npx job-forge pdf <input.html> <output.pdf>`) |
249
249
  | `cv-sync-check.mjs` | `npx job-forge sync-check` | Setup lint: `cv.md` + `config/profile.yml`, hardcoded-metric scan on `modes/_shared.md` and `batch/batch-prompt.md`, optional `article-digest.md` freshness |
250
250
  | `scripts/token-usage-report.mjs` | `npx job-forge tokens` | Per-session opencode token/cost report from the SQLite DB |
251
- | `scripts/trace.mjs` | `npx job-forge trace:list` / `trace:stats` / `trace:show` | Local transcript observability via `@razroo/iso-trace`; common commands default to project-local sessions across supported harnesses |
251
+ | `scripts/trace.mjs` | `npx job-forge trace:list` / `trace:stats` / `trace:show` | Local transcript observability via `@agent-pattern-labs/iso-trace`; common commands default to project-local sessions across supported harnesses |
252
252
  | `scripts/telemetry.mjs` | `npx job-forge telemetry:status` / `telemetry:show` | JobForge operational telemetry derived from normalized local traces plus tracker TSV state |
253
- | `scripts/guard.mjs` | `npx job-forge guard:audit` / `guard:explain` | Deterministic `@razroo/iso-guard` policy audits over local normalized traces (with OpenCode `task` rules still available where relevant) |
254
- | `scripts/ledger.mjs` | `npx job-forge ledger:status` / `ledger:has` / `ledger:rebuild` | Deterministic `@razroo/iso-ledger` state over tracker, TSV, and pipeline files |
255
- | `scripts/capabilities.mjs` | `npx job-forge capabilities:check` / `capabilities:explain` | Deterministic `@razroo/iso-capabilities` role boundary checks for tools, MCPs, commands, filesystem, and network access |
256
- | `scripts/cache.mjs` | `npx job-forge cache:has` / `cache:get` / `cache:put` | Deterministic `@razroo/iso-cache` JD and artifact reuse keyed by stable job/url inputs |
257
- | `scripts/index.mjs` | `npx job-forge index:status` / `index:has` / `index:query` | Deterministic `@razroo/iso-index` lookup over reports, tracker rows, TSVs, pipeline, scan history, and ledger events |
258
- | `scripts/facts.mjs` | `npx job-forge facts:status` / `facts:has` / `facts:query` | Deterministic `@razroo/iso-facts` materialization over job URLs, scores, application statuses, preflight candidates, scan history, and ledger events |
259
- | `scripts/timeline.mjs` | `npx job-forge timeline:due` / `timeline:check` / `timeline:build` | Deterministic `@razroo/iso-timeline` follow-up and next-action planning over tracker rows and dated pipeline items |
260
- | `scripts/prioritize.mjs` | `npx job-forge prioritize:build` / `prioritize:select` / `prioritize:check` | Deterministic `@razroo/iso-prioritize` next-action ranking over materialized facts and due timeline items |
261
- | `scripts/lineage.mjs` | `npx job-forge lineage:record` / `lineage:check` / `lineage:explain` | Deterministic `@razroo/iso-lineage` stale-output checks for generated reports, PDFs, and their source inputs |
262
- | `scripts/score.mjs` | `npx job-forge score:check` / `score:gate` / `score:explain` | Deterministic `@razroo/iso-score` checks for weighted offer scores, threshold booleans, recommendations, and score gates |
263
- | `scripts/canon.mjs` | `npx job-forge canon:normalize` / `canon:key` / `canon:compare` | Deterministic `@razroo/iso-canon` identity normalization for URLs, companies, roles, and company+role pairs |
264
- | `scripts/context.mjs` | `npx job-forge context:list` / `context:plan` / `context:check` / `context:render` | Deterministic `@razroo/iso-context` mode/reference context bundle planning and rendering |
265
- | `scripts/preflight.mjs` | `npx job-forge preflight:plan` / `preflight:check` / `preflight:explain` | Deterministic `@razroo/iso-preflight` dispatch planning for file-backed candidate facts and gates |
266
- | `scripts/postflight.mjs` | `npx job-forge postflight:status` / `postflight:check` / `postflight:explain` | Deterministic `@razroo/iso-postflight` settlement for dispatch outcomes, required tracker TSV artifacts, and merge/verify post-steps |
267
- | `scripts/redact.mjs` | `npx job-forge redact:scan` / `redact:apply` / `redact:verify` | Deterministic `@razroo/iso-redact` safe-export scanning and sanitization for traces, prompts, reports, and fixtures |
268
- | `scripts/migrate.mjs` | `npx job-forge migrate:plan` / `migrate:apply` / `migrate:check` | Deterministic `@razroo/iso-migrate` consumer-project upgrades for scripts and generated-artifact ignores |
253
+ | `scripts/guard.mjs` | `npx job-forge guard:audit` / `guard:explain` | Deterministic `@agent-pattern-labs/iso-guard` policy audits over local normalized traces (with OpenCode `task` rules still available where relevant) |
254
+ | `scripts/ledger.mjs` | `npx job-forge ledger:status` / `ledger:has` / `ledger:rebuild` | Deterministic `@agent-pattern-labs/iso-ledger` state over tracker, TSV, and pipeline files |
255
+ | `scripts/capabilities.mjs` | `npx job-forge capabilities:check` / `capabilities:explain` | Deterministic `@agent-pattern-labs/iso-capabilities` role boundary checks for tools, MCPs, commands, filesystem, and network access |
256
+ | `scripts/cache.mjs` | `npx job-forge cache:has` / `cache:get` / `cache:put` | Deterministic `@agent-pattern-labs/iso-cache` JD and artifact reuse keyed by stable job/url inputs |
257
+ | `scripts/index.mjs` | `npx job-forge index:status` / `index:has` / `index:query` | Deterministic `@agent-pattern-labs/iso-index` lookup over reports, tracker rows, TSVs, pipeline, scan history, and ledger events |
258
+ | `scripts/facts.mjs` | `npx job-forge facts:status` / `facts:has` / `facts:query` | Deterministic `@agent-pattern-labs/iso-facts` materialization over job URLs, scores, application statuses, preflight candidates, scan history, and ledger events |
259
+ | `scripts/timeline.mjs` | `npx job-forge timeline:due` / `timeline:check` / `timeline:build` | Deterministic `@agent-pattern-labs/iso-timeline` follow-up and next-action planning over tracker rows and dated pipeline items |
260
+ | `scripts/prioritize.mjs` | `npx job-forge prioritize:build` / `prioritize:select` / `prioritize:check` | Deterministic `@agent-pattern-labs/iso-prioritize` next-action ranking over materialized facts and due timeline items |
261
+ | `scripts/lineage.mjs` | `npx job-forge lineage:record` / `lineage:check` / `lineage:explain` | Deterministic `@agent-pattern-labs/iso-lineage` stale-output checks for generated reports, PDFs, and their source inputs |
262
+ | `scripts/score.mjs` | `npx job-forge score:check` / `score:gate` / `score:explain` | Deterministic `@agent-pattern-labs/iso-score` checks for weighted offer scores, threshold booleans, recommendations, and score gates |
263
+ | `scripts/canon.mjs` | `npx job-forge canon:normalize` / `canon:key` / `canon:compare` | Deterministic `@agent-pattern-labs/iso-canon` identity normalization for URLs, companies, roles, and company+role pairs |
264
+ | `scripts/context.mjs` | `npx job-forge context:list` / `context:plan` / `context:check` / `context:render` | Deterministic `@agent-pattern-labs/iso-context` mode/reference context bundle planning and rendering |
265
+ | `scripts/preflight.mjs` | `npx job-forge preflight:plan` / `preflight:check` / `preflight:explain` | Deterministic `@agent-pattern-labs/iso-preflight` dispatch planning for file-backed candidate facts and gates |
266
+ | `scripts/postflight.mjs` | `npx job-forge postflight:status` / `postflight:check` / `postflight:explain` | Deterministic `@agent-pattern-labs/iso-postflight` settlement for dispatch outcomes, required tracker TSV artifacts, and merge/verify post-steps |
267
+ | `scripts/redact.mjs` | `npx job-forge redact:scan` / `redact:apply` / `redact:verify` | Deterministic `@agent-pattern-labs/iso-redact` safe-export scanning and sanitization for traces, prompts, reports, and fixtures |
268
+ | `scripts/migrate.mjs` | `npx job-forge migrate:plan` / `migrate:apply` / `migrate:check` | Deterministic `@agent-pattern-labs/iso-migrate` consumer-project upgrades for scripts and generated-artifact ignores |
269
269
  | `scripts/check-helper-integration.mjs` | `npm run lint:helpers` | Integration lint that keeps helper packages, scripts, scaffolder defaults, migrations, generated ignores, docs, and `modes/reference-local-helpers.md` aligned |
270
270
  | `tracker-lib.mjs` | _(library)_ | Shared helpers for reading/writing day-based tracker files — imported by merge/dedup/verify/normalize |
271
271
  | `bin/sync.mjs` | `npx job-forge sync` | Creates the harness symlinks in a consumer project and applies safe migrations (also runs as `postinstall`) |
@@ -11,7 +11,7 @@
11
11
  > # edit modes/_shared.md — npx job-forge sync will leave it alone from now on
12
12
  > ```
13
13
  >
14
- > A cleaner path is to keep customization in `config/profile.yml` where possible (the shared mode files already read from it). Open an issue against `razroo/JobForge` if a piece of personal data is currently stuck in a mode file and ought to be in `profile.yml`.
14
+ > A cleaner path is to keep customization in `config/profile.yml` where possible (the shared mode files already read from it). Open an issue against `Agent-Pattern-Labs/JobForge` if a piece of personal data is currently stuck in a mode file and ought to be in `profile.yml`.
15
15
 
16
16
  ## Profile (config/profile.yml)
17
17
 
@@ -98,7 +98,7 @@ Some forks use a **single** `data/applications.md` instead. That is fine if you
98
98
 
99
99
  ## Transcript observability (iso-trace)
100
100
 
101
- To inspect real agent sessions locally (tool mix, redundant fetches, Geometra churn) without uploading transcripts, use the `job-forge trace:*` commands. JobForge depends on Razroo's [`@razroo/iso-trace`](https://github.com/razroo/iso/tree/main/packages/iso-trace), so consumer projects do not need to install it separately.
101
+ To inspect real agent sessions locally (tool mix, redundant fetches, Geometra churn) without uploading transcripts, use the `job-forge trace:*` commands. JobForge depends on Razroo's [`@agent-pattern-labs/iso-trace`](https://github.com/razroo/iso/tree/main/packages/iso-trace), so consumer projects do not need to install it separately.
102
102
 
103
103
  Common commands default to sessions for the current project and use a 7-day window:
104
104
 
@@ -127,7 +127,7 @@ Telemetry is also local-only and passive. It reads normalized local harness trac
127
127
 
128
128
  ## JobForge ledger
129
129
 
130
- The ledger is append-only local workflow state backed by `@razroo/iso-ledger`. It is not an MCP and does not add prompt, tool-schema, or state-trace tokens. Use it when you want a cheap deterministic check before loading growing tracker files:
130
+ The ledger is append-only local workflow state backed by `@agent-pattern-labs/iso-ledger`. It is not an MCP and does not add prompt, tool-schema, or state-trace tokens. Use it when you want a cheap deterministic check before loading growing tracker files:
131
131
 
132
132
  ```bash
133
133
  npx job-forge ledger:rebuild
@@ -140,63 +140,63 @@ npx job-forge ledger:verify
140
140
 
141
141
  ## JobForge artifact contracts
142
142
 
143
- Machine-readable artifact shapes live in `templates/contracts.json` and are enforced by `@razroo/iso-contract`. `job-forge tracker-line` renders tracker additions through the `jobforge.tracker-row` contract, `merge` validates pending TSV/table rows before writing tracker files, and `verify` validates existing tracker rows against the same contract. Custom forks can extend `templates/contracts.json`, but keep the tracker status enum aligned with `templates/states.yml`.
143
+ Machine-readable artifact shapes live in `templates/contracts.json` and are enforced by `@agent-pattern-labs/iso-contract`. `job-forge tracker-line` renders tracker additions through the `jobforge.tracker-row` contract, `merge` validates pending TSV/table rows before writing tracker files, and `verify` validates existing tracker rows against the same contract. Custom forks can extend `templates/contracts.json`, but keep the tracker status enum aligned with `templates/states.yml`.
144
144
 
145
145
  ## JobForge role capabilities
146
146
 
147
- Role capability boundaries live in `templates/capabilities.json` and are enforced locally by `@razroo/iso-capabilities`. Use `job-forge capabilities:explain <role>` to inspect a role and `job-forge capabilities:check <role> ...` to validate a tool, MCP, command, filesystem, or network boundary before changing agent frontmatter. Custom forks can extend the policy, but keep it aligned with `.opencode/agents/` and the routing rules in `iso/instructions.md`.
147
+ Role capability boundaries live in `templates/capabilities.json` and are enforced locally by `@agent-pattern-labs/iso-capabilities`. Use `job-forge capabilities:explain <role>` to inspect a role and `job-forge capabilities:check <role> ...` to validate a tool, MCP, command, filesystem, or network boundary before changing agent frontmatter. Custom forks can extend the policy, but keep it aligned with `.opencode/agents/` and the routing rules in `iso/instructions.md`.
148
148
 
149
149
  ## JobForge context bundles
150
150
 
151
- Mode/reference context bundles live in `templates/context.json` and are planned locally by `@razroo/iso-context`. Use `job-forge context:plan <mode>` to see the files and estimated tokens, `job-forge context:check <mode>` to fail on budget drift, and `job-forge context:render <mode>` when you intentionally need a compact markdown or JSON context bundle. This is not an MCP and does not add tool-schema tokens; rendered context only consumes prompt tokens when a workflow deliberately asks for it.
151
+ Mode/reference context bundles live in `templates/context.json` and are planned locally by `@agent-pattern-labs/iso-context`. Use `job-forge context:plan <mode>` to see the files and estimated tokens, `job-forge context:check <mode>` to fail on budget drift, and `job-forge context:render <mode>` when you intentionally need a compact markdown or JSON context bundle. This is not an MCP and does not add tool-schema tokens; rendered context only consumes prompt tokens when a workflow deliberately asks for it.
152
152
 
153
153
  ## JobForge artifact index
154
154
 
155
- Artifact lookup policy lives in `templates/index.json` and is built locally by `@razroo/iso-index`. Use `job-forge index:has --key "company-role:acme:staff-engineer"` as a cheap duplicate/source prefilter, `job-forge index:query "acme"` to get compact source path/line pointers, and `job-forge index:verify` to validate `.jobforge-index.json`. Query, has, and verify rebuild the index on demand, so scaffolded projects need no setup. JobForge canonicalizes company/role and URL records through `templates/canon.json` before writing the index. This is not an MCP and does not add tool-schema tokens.
155
+ Artifact lookup policy lives in `templates/index.json` and is built locally by `@agent-pattern-labs/iso-index`. Use `job-forge index:has --key "company-role:acme:staff-engineer"` as a cheap duplicate/source prefilter, `job-forge index:query "acme"` to get compact source path/line pointers, and `job-forge index:verify` to validate `.jobforge-index.json`. Query, has, and verify rebuild the index on demand, so scaffolded projects need no setup. JobForge canonicalizes company/role and URL records through `templates/canon.json` before writing the index. This is not an MCP and does not add tool-schema tokens.
156
156
 
157
157
  ## JobForge materialized facts
158
158
 
159
- Fact extraction policy lives in `templates/facts.json` and is built locally by `@razroo/iso-facts`. Use `job-forge facts:query --fact job.url`, `job-forge facts:has --fact application.status --key "company-role:acme:staff-engineer"`, and `job-forge facts:verify` to work with compact source-backed facts instead of rereading reports, tracker day files, TSVs, candidate JSON, scan history, and ledger events. Query, has, verify, and check rebuild `.jobforge-facts.json` on demand, so scaffolded projects need no setup. JobForge canonicalizes company/role and URL fact keys through `templates/canon.json` before writing the fact set. This is not an MCP and does not add prompt or tool-schema tokens.
159
+ Fact extraction policy lives in `templates/facts.json` and is built locally by `@agent-pattern-labs/iso-facts`. Use `job-forge facts:query --fact job.url`, `job-forge facts:has --fact application.status --key "company-role:acme:staff-engineer"`, and `job-forge facts:verify` to work with compact source-backed facts instead of rereading reports, tracker day files, TSVs, candidate JSON, scan history, and ledger events. Query, has, verify, and check rebuild `.jobforge-facts.json` on demand, so scaffolded projects need no setup. JobForge canonicalizes company/role and URL fact keys through `templates/canon.json` before writing the fact set. This is not an MCP and does not add prompt or tool-schema tokens.
160
160
 
161
161
  ## JobForge timeline policy
162
162
 
163
- Follow-up and next-action policy lives in `templates/timeline.json` and is planned locally by `@razroo/iso-timeline`. Use `job-forge timeline:due` to list due/overdue nudges, `job-forge timeline:check --fail-on overdue` to fail only when action is stale, and `job-forge timeline:build` to materialize `.jobforge-timeline-events.jsonl` plus `.jobforge-timeline.json` for inspection. It reads tracker rows and dated pipeline items from local files, so scaffolded projects need no setup. This is not an MCP and does not add prompt or tool-schema tokens.
163
+ Follow-up and next-action policy lives in `templates/timeline.json` and is planned locally by `@agent-pattern-labs/iso-timeline`. Use `job-forge timeline:due` to list due/overdue nudges, `job-forge timeline:check --fail-on overdue` to fail only when action is stale, and `job-forge timeline:build` to materialize `.jobforge-timeline-events.jsonl` plus `.jobforge-timeline.json` for inspection. It reads tracker rows and dated pipeline items from local files, so scaffolded projects need no setup. This is not an MCP and does not add prompt or tool-schema tokens.
164
164
 
165
165
  ## JobForge priority queue
166
166
 
167
- Next-action ranking policy lives in `templates/prioritize.json` and is planned locally by `@razroo/iso-prioritize`. Use `job-forge prioritize:build` to materialize `.jobforge-prioritize-items.json` plus `.jobforge-prioritize.json`, `job-forge prioritize:select --limit 3` to inspect the selected queue, and `job-forge prioritize:check` when a workflow must fail if no actionable candidate is selected. It reads source-backed facts and due timeline items, so scaffolded projects need no setup. This is not an MCP and does not add prompt or tool-schema tokens.
167
+ Next-action ranking policy lives in `templates/prioritize.json` and is planned locally by `@agent-pattern-labs/iso-prioritize`. Use `job-forge prioritize:build` to materialize `.jobforge-prioritize-items.json` plus `.jobforge-prioritize.json`, `job-forge prioritize:select --limit 3` to inspect the selected queue, and `job-forge prioritize:check` when a workflow must fail if no actionable candidate is selected. It reads source-backed facts and due timeline items, so scaffolded projects need no setup. This is not an MCP and does not add prompt or tool-schema tokens.
168
168
 
169
169
  ## JobForge artifact lineage
170
170
 
171
- Artifact lineage lives in `.jobforge-lineage.json` and is checked locally by `@razroo/iso-lineage`. Use `job-forge lineage:record --artifact <report-or-pdf> --input cv.md --input config/profile.yml` after generating an artifact, then `job-forge lineage:check` or `job-forge lineage:check --artifact <file>` to detect stale outputs after source inputs change. This is not an MCP and does not add prompt or tool-schema tokens.
171
+ Artifact lineage lives in `.jobforge-lineage.json` and is checked locally by `@agent-pattern-labs/iso-lineage`. Use `job-forge lineage:record --artifact <report-or-pdf> --input cv.md --input config/profile.yml` after generating an artifact, then `job-forge lineage:check` or `job-forge lineage:check --artifact <file>` to detect stale outputs after source inputs change. This is not an MCP and does not add prompt or tool-schema tokens.
172
172
 
173
173
  ## JobForge scoring policy
174
174
 
175
- Weighted scoring policy lives in `templates/score.json` and is enforced locally by `@razroo/iso-score`. Use `job-forge score:check --input <score.json>` to validate emitted report score JSON, `job-forge score:gate --input <score.json> --gate apply` to check an application threshold, and `job-forge score:explain` to inspect the active dimensions, weights, bands, and gates. Custom forks can change weights or thresholds in `templates/score.json`, but keep the dimension ids aligned with `modes/_shared.md` and report rendering.
175
+ Weighted scoring policy lives in `templates/score.json` and is enforced locally by `@agent-pattern-labs/iso-score`. Use `job-forge score:check --input <score.json>` to validate emitted report score JSON, `job-forge score:gate --input <score.json> --gate apply` to check an application threshold, and `job-forge score:explain` to inspect the active dimensions, weights, bands, and gates. Custom forks can change weights or thresholds in `templates/score.json`, but keep the dimension ids aligned with `modes/_shared.md` and report rendering.
176
176
 
177
177
  ## JobForge identity canonicalization
178
178
 
179
- URL, company, role, and company+role identity rules live in `templates/canon.json` and are enforced locally by `@razroo/iso-canon`. Use `job-forge canon:key company-role --company "OpenAI, Inc." --role "Senior SWE, AI Platform"` to derive the same duplicate key used by ledger/index helpers, and `job-forge canon:compare company "OpenAI, Inc." "Open AI"` to explain whether two values resolve to the same entity. Custom forks can extend aliases, suffixes, stop words, and match thresholds in `templates/canon.json`. This is not an MCP and does not add prompt or tool-schema tokens.
179
+ URL, company, role, and company+role identity rules live in `templates/canon.json` and are enforced locally by `@agent-pattern-labs/iso-canon`. Use `job-forge canon:key company-role --company "OpenAI, Inc." --role "Senior SWE, AI Platform"` to derive the same duplicate key used by ledger/index helpers, and `job-forge canon:compare company "OpenAI, Inc." "Open AI"` to explain whether two values resolve to the same entity. Custom forks can extend aliases, suffixes, stop words, and match thresholds in `templates/canon.json`. This is not an MCP and does not add prompt or tool-schema tokens.
180
180
 
181
181
  ## JobForge preflight plans
182
182
 
183
- Application dispatch policy lives in `templates/preflight.json` and is planned locally by `@razroo/iso-preflight`. After candidate facts and gate results have been materialized into JSON, use `job-forge preflight:plan --candidates <file>` to get bounded rounds and required pre/post steps, or `job-forge preflight:check --candidates <file>` to fail on missing source facts or blocked gates. This is not an MCP and does not add prompt or tool-schema tokens; it consumes only the candidate JSON you deliberately pass to it.
183
+ Application dispatch policy lives in `templates/preflight.json` and is planned locally by `@agent-pattern-labs/iso-preflight`. After candidate facts and gate results have been materialized into JSON, use `job-forge preflight:plan --candidates <file>` to get bounded rounds and required pre/post steps, or `job-forge preflight:check --candidates <file>` to fail on missing source facts or blocked gates. This is not an MCP and does not add prompt or tool-schema tokens; it consumes only the candidate JSON you deliberately pass to it.
184
184
 
185
185
  ## JobForge postflight settlement
186
186
 
187
- Application settlement policy lives in `templates/postflight.json` and is checked locally by `@razroo/iso-postflight`. After each dispatch round, record observed candidate outcomes and tracker TSV artifact paths in `batch/postflight-outcomes.json`, then run `job-forge postflight:status --plan batch/preflight-plan.json --outcomes batch/postflight-outcomes.json` to get the next safe action. After `merge` and `verify`, add post-step observations and run `job-forge postflight:check ...` to fail unless the workflow is complete. This is not an MCP and does not add prompt or tool-schema tokens.
187
+ Application settlement policy lives in `templates/postflight.json` and is checked locally by `@agent-pattern-labs/iso-postflight`. After each dispatch round, record observed candidate outcomes and tracker TSV artifact paths in `batch/postflight-outcomes.json`, then run `job-forge postflight:status --plan batch/preflight-plan.json --outcomes batch/postflight-outcomes.json` to get the next safe action. After `merge` and `verify`, add post-step observations and run `job-forge postflight:check ...` to fail unless the workflow is complete. This is not an MCP and does not add prompt or tool-schema tokens.
188
188
 
189
189
  ## JobForge redaction policy
190
190
 
191
- Safe-export redaction rules live in `templates/redact.json` and are enforced locally by `@razroo/iso-redact`. Use `job-forge redact:scan --input <file>` before sharing traces, prompts, reports, or fixtures outside the project, `job-forge redact:apply --input <file> --output .jobforge-redacted/<file>` to write a sanitized copy, and `job-forge redact:verify --input <file>` to fail if secrets or configured PII remain. Findings never print matched values. This is not an MCP and does not add prompt or tool-schema tokens.
191
+ Safe-export redaction rules live in `templates/redact.json` and are enforced locally by `@agent-pattern-labs/iso-redact`. Use `job-forge redact:scan --input <file>` before sharing traces, prompts, reports, or fixtures outside the project, `job-forge redact:apply --input <file> --output .jobforge-redacted/<file>` to write a sanitized copy, and `job-forge redact:verify --input <file>` to fail if secrets or configured PII remain. Findings never print matched values. This is not an MCP and does not add prompt or tool-schema tokens.
192
192
 
193
193
  ## JobForge consumer migrations
194
194
 
195
- Consumer-project migrations live in `templates/migrations.json` and are applied locally by `@razroo/iso-migrate`. `job-forge sync` applies safe migrations automatically after refreshing symlinks; use `JOB_FORGE_SKIP_MIGRATIONS=1` to opt out. Use `job-forge migrate:plan`, `job-forge migrate:apply`, and `job-forge migrate:check` to inspect or enforce script/gitignore drift explicitly. This is not an MCP and does not add prompt or tool-schema tokens.
195
+ Consumer-project migrations live in `templates/migrations.json` and are applied locally by `@agent-pattern-labs/iso-migrate`. `job-forge sync` applies safe migrations automatically after refreshing symlinks; use `JOB_FORGE_SKIP_MIGRATIONS=1` to opt out. Use `job-forge migrate:plan`, `job-forge migrate:apply`, and `job-forge migrate:check` to inspect or enforce script/gitignore drift explicitly. This is not an MCP and does not add prompt or tool-schema tokens.
196
196
 
197
197
  ## JobForge guard audits
198
198
 
199
- Guard audits run deterministic `@razroo/iso-guard` policies over the same local traces. The default policy lives at `templates/guards/jobforge-baseline.yaml` and checks rules that are reliable from transcript data, including max two OpenCode `task` dispatches per assistant message, no task-status polling via `task`, no raw proxy configuration in task prompts, and no child session task recursion.
199
+ Guard audits run deterministic `@agent-pattern-labs/iso-guard` policies over the same local traces. The default policy lives at `templates/guards/jobforge-baseline.yaml` and checks rules that are reliable from transcript data, including max two OpenCode `task` dispatches per assistant message, no task-status polling via `task`, no raw proxy configuration in task prompts, and no child session task recursion.
200
200
 
201
201
  ```bash
202
202
  npx job-forge guard:audit
@@ -208,13 +208,13 @@ Use `--policy <path>` to audit with a custom policy. This does not add prompt, t
208
208
 
209
209
  **Where Claude Code writes JSONL:** `~/.claude/projects/<encoded-cwd>/*.jsonl`.
210
210
 
211
- **Direct CLI fallback:** `npx -y @razroo/iso-trace@latest stats --source "$HOME/.claude/projects/<encoded-dir>/<session>.jsonl"`
211
+ **Direct CLI fallback:** `npx -y @agent-pattern-labs/iso-trace@latest stats --source "$HOME/.claude/projects/<encoded-dir>/<session>.jsonl"`
212
212
 
213
213
  **Performance:** JobForge narrows discovery to project-local roots where possible, but raw `iso-trace list --cwd /path/to/repo` may still walk large transcript trees on busy machines. Prefer `stats --source <one.jsonl>` or project-scoped roots when you need direct `iso-trace` usage.
214
214
 
215
215
  ## States (templates/states.yml)
216
216
 
217
- The canonical states rarely need changing. Since `templates/` is a symlink into the harness in consumer projects, adding new states means contributing back to `razroo/JobForge` (see [CONTRIBUTING.md](../CONTRIBUTING.md)). If you're working in the harness repo directly (Path B), update:
217
+ The canonical states rarely need changing. Since `templates/` is a symlink into the harness in consumer projects, adding new states means contributing back to `Agent-Pattern-Labs/JobForge` (see [CONTRIBUTING.md](../CONTRIBUTING.md)). If you're working in the harness repo directly (Path B), update:
218
218
 
219
219
  1. `templates/states.yml`
220
220
  2. `normalize-statuses.mjs` (alias mappings)
package/docs/README.md CHANGED
@@ -9,7 +9,7 @@ JobForge ships on npm as [`job-forge`](https://www.npmjs.com/package/job-forge)
9
9
  | Path | Who it's for | How |
10
10
  |------|--------------|-----|
11
11
  | **A — Scaffold a personal project** | Most users. You want a job search project with the harness in `node_modules`, updatable via `npm update job-forge`. | `npx --package=job-forge create-job-forge my-search && cd my-search && npm install` |
12
- | **B — Clone the harness directly** | Contributors and hackers working on `iso/`, modes, scripts, or the scoring model. Personal files are gitignored. | `git clone https://github.com/razroo/JobForge.git && cd JobForge && npm install && npm run build:config` |
12
+ | **B — Clone the harness directly** | Contributors and hackers working on `iso/`, modes, scripts, or the scoring model. Personal files are gitignored. | `git clone https://github.com/Agent-Pattern-Labs/JobForge.git && cd JobForge && npm install && npm run build:config` |
13
13
 
14
14
  See [SETUP.md](SETUP.md) for both paths.
15
15
 
package/docs/SETUP.md CHANGED
@@ -59,7 +59,7 @@ Or simpler, via the scaffolded script: `npm run update-harness` (also refreshes
59
59
  Use this if you want to hack on the harness itself (edit `iso/`, tune the scoring model, add modes, contribute back). Personal files are gitignored.
60
60
 
61
61
  ```bash
62
- git clone https://github.com/razroo/JobForge.git
62
+ git clone https://github.com/Agent-Pattern-Labs/JobForge.git
63
63
  cd JobForge
64
64
  npm install
65
65
  npm run build:config # regenerate per-harness trees from iso/ (CLAUDE.md,
@@ -236,4 +236,4 @@ Paths are relative to the project root: create the markdown file under `jds/` an
236
236
 
237
237
  ## Contributing
238
238
 
239
- Pull requests and issue reports are welcome on `razroo/JobForge`. See [CONTRIBUTING.md](../CONTRIBUTING.md) for branch workflow, ideas (documentation, `examples/`, `templates/portals.example.yml`, dashboard features, utility scripts), and the checks maintainers expect before a PR (`npm run verify` and `npm run build:dashboard`). Contributors work against Path B (clone the harness directly).
239
+ Pull requests and issue reports are welcome on `Agent-Pattern-Labs/JobForge`. See [CONTRIBUTING.md](../CONTRIBUTING.md) for branch workflow, ideas (documentation, `examples/`, `templates/portals.example.yml`, dashboard features, utility scripts), and the checks maintainers expect before a PR (`npm run verify` and `npm run build:dashboard`). Contributors work against Path B (clone the harness directly).
@@ -51,7 +51,7 @@ AI-powered job search pipeline: scans portals, evaluates offers, generates CVs v
51
51
  - [D6] Pick the mode from the **Routing** table below AND name it explicitly in your first response (e.g., "running auto-pipeline mode", "this is a `compare` request"). If no row matches the user's intent, ask which mode fits; do not guess.
52
52
  why: silent mode picks mis-route work (a "negotiation" question answered in `offer` mode produces the wrong report shape); naming the mode out loud makes the routing decision reviewable and gives downstream dispatches a reliable anchor
53
53
 
54
- - [D7] For standalone `batch` runs, prefer `batch/batch-runner.sh` instead of hand-rolling the loop. It delegates to `@razroo/iso-orchestrator`, persists workflow records in `.jobforge-runs/`, caps bundle fan-out, and mutexes state/report-number writes. Use `JOBFORGE_LEGACY_BATCH_RUNNER=1` only as a fallback.
54
+ - [D7] For standalone `batch` runs, prefer `batch/batch-runner.sh` instead of hand-rolling the loop. It delegates to `@agent-pattern-labs/iso-orchestrator`, persists workflow records in `.jobforge-runs/`, caps bundle fan-out, and mutexes state/report-number writes. Use `JOBFORGE_LEGACY_BATCH_RUNNER=1` only as a fallback.
55
55
  why: the old Bash loop encoded resumability and parallelism manually; the iso-orchestrator path makes the durable control state inspectable and prevents report-number collisions under parallel bundles
56
56
 
57
57
  - [D8] Use deterministic local helpers instead of prose when they can answer or validate state, identity, policy, scoring, timing, dispatch, priority, lineage, migration, or safe-export questions. Read `modes/reference-local-helpers.md` when choosing a helper or changing helper wiring.
@@ -9,7 +9,7 @@ import {
9
9
  readCacheContent,
10
10
  resolveCacheDir,
11
11
  verifyCache,
12
- } from '@razroo/iso-cache';
12
+ } from '@agent-pattern-labs/iso-cache';
13
13
  import { canonicalizeJobForgeUrl } from './jobforge-canon.mjs';
14
14
 
15
15
  export const CACHE_DIR = '.jobforge-cache';
@@ -10,7 +10,7 @@ import {
10
10
  loadCanonConfig,
11
11
  parseJson,
12
12
  resolveProfile,
13
- } from '@razroo/iso-canon';
13
+ } from '@agent-pattern-labs/iso-canon';
14
14
 
15
15
  export const CANON_CONFIG_FILE = 'templates/canon.json';
16
16
  export const CANON_PROFILE = 'jobforge';
@@ -9,7 +9,7 @@ import {
9
9
  renderRole,
10
10
  resolveRole,
11
11
  roleNames,
12
- } from '@razroo/iso-capabilities';
12
+ } from '@agent-pattern-labs/iso-capabilities';
13
13
 
14
14
  const __dirname = dirname(fileURLToPath(import.meta.url));
15
15
  const PKG_ROOT = resolve(__dirname, '..');
@@ -9,7 +9,7 @@ import {
9
9
  planContext,
10
10
  renderContextPlan,
11
11
  resolveContextBundle,
12
- } from '@razroo/iso-context';
12
+ } from '@agent-pattern-labs/iso-context';
13
13
 
14
14
  const __dirname = dirname(fileURLToPath(import.meta.url));
15
15
  const PKG_ROOT = resolve(__dirname, '..');
@@ -10,7 +10,7 @@ import {
10
10
  parseRecord,
11
11
  renderRecord,
12
12
  validateRecord,
13
- } from '@razroo/iso-contract';
13
+ } from '@agent-pattern-labs/iso-contract';
14
14
  import { DEFAULT_STATES, loadCanonicalStates } from './canonical-states.mjs';
15
15
 
16
16
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -9,7 +9,7 @@ import {
9
9
  parseJson,
10
10
  queryFacts,
11
11
  verifyFactSet,
12
- } from '@razroo/iso-facts';
12
+ } from '@agent-pattern-labs/iso-facts';
13
13
  import {
14
14
  jobForgeCompanyRoleKey,
15
15
  jobForgeUrlKey,
@@ -8,7 +8,7 @@ import {
8
8
  queryIndex,
9
9
  recordId,
10
10
  verifyIndex,
11
- } from '@razroo/iso-index';
11
+ } from '@agent-pattern-labs/iso-index';
12
12
  import {
13
13
  jobForgeCompanyRoleKey,
14
14
  jobForgeUrlKey,
@@ -7,7 +7,7 @@ import {
7
7
  queryEvents,
8
8
  readLedger,
9
9
  verifyLedger,
10
- } from '@razroo/iso-ledger';
10
+ } from '@agent-pattern-labs/iso-ledger';
11
11
  import {
12
12
  jobForgeApplicationSubject,
13
13
  jobForgeCompanyRoleKey,
@@ -7,7 +7,7 @@ import {
7
7
  parseJson,
8
8
  recordLineage,
9
9
  verifyLineageGraph,
10
- } from '@razroo/iso-lineage';
10
+ } from '@agent-pattern-labs/iso-lineage';
11
11
 
12
12
  export const LINEAGE_FILE = '.jobforge-lineage.json';
13
13
 
@@ -4,7 +4,7 @@ import {
4
4
  loadMigrationConfig,
5
5
  parseJson,
6
6
  runMigrations,
7
- } from '@razroo/iso-migrate';
7
+ } from '@agent-pattern-labs/iso-migrate';
8
8
 
9
9
  export const MIGRATION_CONFIG_FILE = 'templates/migrations.json';
10
10
 
@@ -14,7 +14,7 @@ import {
14
14
  refFromPath,
15
15
  sessionRefsFromOpenCodeRows,
16
16
  stats as traceStats,
17
- } from '@razroo/iso-trace';
17
+ } from '@agent-pattern-labs/iso-trace';
18
18
 
19
19
  export const DISPATCH_TOOL_NAMES = new Set(['task', 'spawn_agent']);
20
20
 
@@ -4,7 +4,7 @@ import {
4
4
  loadPostflightConfig,
5
5
  parseJson,
6
6
  settlePostflight,
7
- } from '@razroo/iso-postflight';
7
+ } from '@agent-pattern-labs/iso-postflight';
8
8
 
9
9
  export const POSTFLIGHT_CONFIG_FILE = 'templates/postflight.json';
10
10
  export const POSTFLIGHT_WORKFLOW = 'jobforge.apply';
@@ -4,7 +4,7 @@ import {
4
4
  loadPreflightConfig,
5
5
  parseJson,
6
6
  planPreflight,
7
- } from '@razroo/iso-preflight';
7
+ } from '@agent-pattern-labs/iso-preflight';
8
8
 
9
9
  export const PREFLIGHT_CONFIG_FILE = 'templates/preflight.json';
10
10
  export const PREFLIGHT_WORKFLOW = 'jobforge.apply';
@@ -7,7 +7,7 @@ import {
7
7
  prioritize,
8
8
  selectPrioritized,
9
9
  verifyPrioritizeResult,
10
- } from '@razroo/iso-prioritize';
10
+ } from '@agent-pattern-labs/iso-prioritize';
11
11
  import { ensureJobForgeFacts } from './jobforge-facts.mjs';
12
12
  import { dueJobForgeTimeline } from './jobforge-timeline.mjs';
13
13
 
@@ -3,7 +3,7 @@ import { join } from 'path';
3
3
  import {
4
4
  loadRedactConfig,
5
5
  parseJson,
6
- } from '@razroo/iso-redact';
6
+ } from '@agent-pattern-labs/iso-redact';
7
7
 
8
8
  export const REDACT_CONFIG_FILE = 'templates/redact.json';
9
9
 
@@ -8,7 +8,7 @@ import {
8
8
  parseJson,
9
9
  scoreResultId,
10
10
  verifyScoreResult,
11
- } from '@razroo/iso-score';
11
+ } from '@agent-pattern-labs/iso-score';
12
12
 
13
13
  export const SCORE_CONFIG_FILE = 'templates/score.json';
14
14
  export const SCORE_PROFILE = 'jobforge';
@@ -8,7 +8,7 @@ import {
8
8
  parseJsonLines,
9
9
  planTimeline,
10
10
  verifyTimelineResult,
11
- } from '@razroo/iso-timeline';
11
+ } from '@agent-pattern-labs/iso-timeline';
12
12
  import { DATA_APPS_DIR, PROJECT_DIR, readAllEntries } from '../tracker-lib.mjs';
13
13
  import { jobForgeCompanyRoleKey, jobForgeUrlKey, legacyCompanyRoleKey, legacyUrlKey } from './jobforge-canon.mjs';
14
14
 
package/models.yaml CHANGED
@@ -1,6 +1,6 @@
1
1
  # JobForge model policy.
2
2
  #
3
- # Extends @razroo/iso-route's bundled "standard" preset, then pins every
3
+ # Extends @agent-pattern-labs/iso-route's bundled "standard" preset, then pins every
4
4
  # OpenCode route to DeepSeek V4 Flash. Recent traces showed free OpenRouter
5
5
  # routes freezing or falling through Venice balance errors, so JobForge's
6
6
  # OpenCode default is now "best affordable paid" rather than "free".
package/modes/batch.md CHANGED
@@ -68,7 +68,7 @@ batch/batch-runner.sh [OPTIONS]
68
68
  ```
69
69
 
70
70
  `batch-runner.sh` delegates to `scripts/batch-orchestrator.mjs` by default.
71
- That Node runner uses `@razroo/iso-orchestrator` to persist workflow records in
71
+ That Node runner uses `@agent-pattern-labs/iso-orchestrator` to persist workflow records in
72
72
  `.jobforge-runs/`, cap bundle fan-out with `workflow.forEach`, and serialize
73
73
  report-number/state writes while workers run in parallel. If a regression
74
74
  requires the old shell loop, run with `JOBFORGE_LEGACY_BATCH_RUNNER=1`.
@@ -118,7 +118,7 @@ Prefer the deterministic helper:
118
118
  npx job-forge tracker-line --num 521 --date 2026-04-15 --company "Anthropic" --role "Manager, FDE" --status Evaluated --score 4.2 --pdf no --slug anthropic-manager-fde --notes "Strong fit" --write
119
119
  ```
120
120
 
121
- The helper renders and validates the row against `templates/contracts.json` via `@razroo/iso-contract`. To inspect the contract directly:
121
+ The helper renders and validates the row against `templates/contracts.json` via `@agent-pattern-labs/iso-contract`. To inspect the contract directly:
122
122
 
123
123
  ```bash
124
124
  npx iso-contract explain jobforge.tracker-row --contracts templates/contracts.json
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "job-forge",
3
- "version": "2.14.38",
3
+ "version": "2.14.39",
4
4
  "description": "AI-powered job search pipeline built on opencode",
5
5
  "type": "module",
6
6
  "bin": {
@@ -167,7 +167,7 @@
167
167
  "author": "Charlie Greenman",
168
168
  "repository": {
169
169
  "type": "git",
170
- "url": "https://github.com/razroo/JobForge"
170
+ "url": "git+https://github.com/Agent-Pattern-Labs/JobForge.git"
171
171
  },
172
172
  "license": "MIT",
173
173
  "engines": {
@@ -177,32 +177,32 @@
177
177
  "fast-uri": "3.1.2"
178
178
  },
179
179
  "dependencies": {
180
- "@razroo/iso-cache": "^0.1.0",
181
- "@razroo/iso-canon": "^0.1.0",
182
- "@razroo/iso-capabilities": "^0.1.0",
183
- "@razroo/iso-context": "^0.1.0",
184
- "@razroo/iso-contract": "^0.1.0",
185
- "@razroo/iso-facts": "^0.1.0",
186
- "@razroo/iso-guard": "^0.1.0",
187
- "@razroo/iso-index": "^0.1.0",
188
- "@razroo/iso-ledger": "^0.1.0",
189
- "@razroo/iso-lineage": "^0.1.0",
190
- "@razroo/iso-migrate": "^0.1.0",
191
- "@razroo/iso-orchestrator": "^0.2.0",
192
- "@razroo/iso-postflight": "^0.1.0",
193
- "@razroo/iso-preflight": "^0.1.0",
194
- "@razroo/iso-prioritize": "^0.1.0",
195
- "@razroo/iso-redact": "^0.1.0",
196
- "@razroo/iso-score": "^0.1.0",
197
- "@razroo/iso-timeline": "^0.1.0",
198
- "@razroo/iso-trace": "^0.5.0",
180
+ "@agent-pattern-labs/iso-cache": "^0.1.1",
181
+ "@agent-pattern-labs/iso-canon": "^0.1.1",
182
+ "@agent-pattern-labs/iso-capabilities": "^0.1.1",
183
+ "@agent-pattern-labs/iso-context": "^0.1.1",
184
+ "@agent-pattern-labs/iso-contract": "^0.1.1",
185
+ "@agent-pattern-labs/iso-facts": "^0.1.1",
186
+ "@agent-pattern-labs/iso-guard": "^0.1.1",
187
+ "@agent-pattern-labs/iso-index": "^0.1.1",
188
+ "@agent-pattern-labs/iso-ledger": "^0.1.1",
189
+ "@agent-pattern-labs/iso-lineage": "^0.1.1",
190
+ "@agent-pattern-labs/iso-migrate": "^0.1.1",
191
+ "@agent-pattern-labs/iso-orchestrator": "^0.2.1",
192
+ "@agent-pattern-labs/iso-postflight": "^0.1.1",
193
+ "@agent-pattern-labs/iso-preflight": "^0.1.1",
194
+ "@agent-pattern-labs/iso-prioritize": "^0.1.1",
195
+ "@agent-pattern-labs/iso-redact": "^0.1.1",
196
+ "@agent-pattern-labs/iso-score": "^0.1.1",
197
+ "@agent-pattern-labs/iso-timeline": "^0.1.1",
198
+ "@agent-pattern-labs/iso-trace": "^0.5.1",
199
199
  "playwright": "^1.58.1"
200
200
  },
201
201
  "devDependencies": {
202
- "@razroo/agentmd": "^0.3.0",
203
- "@razroo/iso": "^0.3.1",
204
- "@razroo/iso-eval": "^0.4.0",
205
- "@razroo/iso-harness": "^0.8.0",
206
- "@razroo/iso-route": "^0.5.3"
202
+ "@agent-pattern-labs/agentmd": "^0.3.1",
203
+ "@agent-pattern-labs/iso": "^0.3.2",
204
+ "@agent-pattern-labs/iso-eval": "^0.4.1",
205
+ "@agent-pattern-labs/iso-harness": "^0.8.1",
206
+ "@agent-pattern-labs/iso-route": "^0.6.1"
207
207
  }
208
208
  }
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Durable JobForge batch runner powered by @razroo/iso-orchestrator.
3
+ * Durable JobForge batch runner powered by @agent-pattern-labs/iso-orchestrator.
4
4
  *
5
5
  * This preserves the public batch-runner.sh interface while moving the
6
6
  * load-bearing control loop into a resumable workflow:
@@ -25,7 +25,7 @@ import {
25
25
  import { dirname, join, resolve } from 'node:path';
26
26
  import { fileURLToPath } from 'node:url';
27
27
 
28
- import { runWorkflow } from '@razroo/iso-orchestrator';
28
+ import { runWorkflow } from '@agent-pattern-labs/iso-orchestrator';
29
29
 
30
30
  const __dirname = dirname(fileURLToPath(import.meta.url));
31
31
  const PKG_ROOT = resolve(__dirname, '..');
package/scripts/cache.mjs CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  formatCacheEntries,
6
6
  formatPruneResult,
7
7
  formatVerifyResult,
8
- } from '@razroo/iso-cache';
8
+ } from '@agent-pattern-labs/iso-cache';
9
9
  import { PROJECT_DIR } from '../tracker-lib.mjs';
10
10
  import {
11
11
  DEFAULT_JD_TTL_MS,
package/scripts/canon.mjs CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  formatCanonResult,
6
6
  formatCompareResult,
7
7
  formatConfigSummary,
8
- } from '@razroo/iso-canon';
8
+ } from '@agent-pattern-labs/iso-canon';
9
9
  import { PROJECT_DIR } from '../tracker-lib.mjs';
10
10
  import {
11
11
  canonicalizeJobForgeEntity,
@@ -17,29 +17,29 @@ const migrationScripts = migrationValue('jobforge-managed-scripts', '/scripts');
17
17
  const migrationIgnores = migrationValue('jobforge-generated-ignores');
18
18
 
19
19
  const groups = [
20
- helper('trace', '@razroo/iso-trace', ['list', 'stats', 'show']),
20
+ helper('trace', '@agent-pattern-labs/iso-trace', ['list', 'stats', 'show']),
21
21
  helper('telemetry', '', ['list', 'status', 'show', 'watch']),
22
- helper('guard', '@razroo/iso-guard', ['audit', 'explain'], { template: 'templates/guards/jobforge-baseline.yaml' }),
23
- helper('ledger', '@razroo/iso-ledger', ['status', 'rebuild', 'verify', 'has', 'query'], { artifacts: ['.jobforge-ledger/'] }),
24
- helper('capabilities', '@razroo/iso-capabilities', ['list', 'explain', 'check', 'render'], { template: 'templates/capabilities.json', migrated: true }),
25
- helper('context', '@razroo/iso-context', ['list', 'explain', 'plan', 'check', 'render'], { template: 'templates/context.json', migrated: true }),
26
- helper('cache', '@razroo/iso-cache', ['key', 'has', 'get', 'put', 'status', 'list', 'verify', 'prune'], { artifacts: ['.jobforge-cache/'], migrated: true }),
27
- helper('index', '@razroo/iso-index', ['build', 'status', 'query', 'has', 'verify', 'explain'], { template: 'templates/index.json', artifacts: ['.jobforge-index.json'], migrated: true }),
28
- helper('facts', '@razroo/iso-facts', ['build', 'status', 'verify', 'check', 'has', 'query', 'explain'], { template: 'templates/facts.json', artifacts: ['.jobforge-facts.json'], migrated: true }),
29
- helper('score', '@razroo/iso-score', ['compute', 'verify', 'check', 'gate', 'compare', 'explain'], { template: 'templates/score.json', migrated: true }),
30
- helper('canon', '@razroo/iso-canon', ['normalize', 'key', 'compare', 'explain'], { template: 'templates/canon.json', migrated: true }),
31
- helper('preflight', '@razroo/iso-preflight', ['plan', 'check', 'explain'], { template: 'templates/preflight.json', artifacts: ['batch/preflight-candidates.json', 'batch/preflight-plan.json'], migrated: true }),
32
- helper('postflight', '@razroo/iso-postflight', ['status', 'check', 'explain'], { template: 'templates/postflight.json', artifacts: ['batch/postflight-outcomes.json'], migrated: true }),
33
- helper('timeline', '@razroo/iso-timeline', ['status', 'build', 'plan', 'due', 'check', 'verify', 'explain'], { template: 'templates/timeline.json', artifacts: ['.jobforge-timeline.json', '.jobforge-timeline-events.jsonl', 'data/timeline-events.jsonl'], migrated: true }),
34
- helper('prioritize', '@razroo/iso-prioritize', ['status', 'items', 'build', 'rank', 'select', 'check', 'verify', 'explain'], { template: 'templates/prioritize.json', artifacts: ['.jobforge-prioritize.json', '.jobforge-prioritize-items.json'], migrated: true }),
35
- helper('lineage', '@razroo/iso-lineage', ['status', 'record', 'check', 'stale', 'verify', 'explain'], { artifacts: ['.jobforge-lineage.json'], migrated: true }),
36
- helper('redact', '@razroo/iso-redact', ['scan', 'verify', 'apply', 'explain'], { template: 'templates/redact.json', artifacts: ['.jobforge-redacted/'], migrated: true }),
37
- helper('migrate', '@razroo/iso-migrate', ['plan', 'apply', 'check', 'explain'], { template: 'templates/migrations.json', migrated: true }),
22
+ helper('guard', '@agent-pattern-labs/iso-guard', ['audit', 'explain'], { template: 'templates/guards/jobforge-baseline.yaml' }),
23
+ helper('ledger', '@agent-pattern-labs/iso-ledger', ['status', 'rebuild', 'verify', 'has', 'query'], { artifacts: ['.jobforge-ledger/'] }),
24
+ helper('capabilities', '@agent-pattern-labs/iso-capabilities', ['list', 'explain', 'check', 'render'], { template: 'templates/capabilities.json', migrated: true }),
25
+ helper('context', '@agent-pattern-labs/iso-context', ['list', 'explain', 'plan', 'check', 'render'], { template: 'templates/context.json', migrated: true }),
26
+ helper('cache', '@agent-pattern-labs/iso-cache', ['key', 'has', 'get', 'put', 'status', 'list', 'verify', 'prune'], { artifacts: ['.jobforge-cache/'], migrated: true }),
27
+ helper('index', '@agent-pattern-labs/iso-index', ['build', 'status', 'query', 'has', 'verify', 'explain'], { template: 'templates/index.json', artifacts: ['.jobforge-index.json'], migrated: true }),
28
+ helper('facts', '@agent-pattern-labs/iso-facts', ['build', 'status', 'verify', 'check', 'has', 'query', 'explain'], { template: 'templates/facts.json', artifacts: ['.jobforge-facts.json'], migrated: true }),
29
+ helper('score', '@agent-pattern-labs/iso-score', ['compute', 'verify', 'check', 'gate', 'compare', 'explain'], { template: 'templates/score.json', migrated: true }),
30
+ helper('canon', '@agent-pattern-labs/iso-canon', ['normalize', 'key', 'compare', 'explain'], { template: 'templates/canon.json', migrated: true }),
31
+ helper('preflight', '@agent-pattern-labs/iso-preflight', ['plan', 'check', 'explain'], { template: 'templates/preflight.json', artifacts: ['batch/preflight-candidates.json', 'batch/preflight-plan.json'], migrated: true }),
32
+ helper('postflight', '@agent-pattern-labs/iso-postflight', ['status', 'check', 'explain'], { template: 'templates/postflight.json', artifacts: ['batch/postflight-outcomes.json'], migrated: true }),
33
+ helper('timeline', '@agent-pattern-labs/iso-timeline', ['status', 'build', 'plan', 'due', 'check', 'verify', 'explain'], { template: 'templates/timeline.json', artifacts: ['.jobforge-timeline.json', '.jobforge-timeline-events.jsonl', 'data/timeline-events.jsonl'], migrated: true }),
34
+ helper('prioritize', '@agent-pattern-labs/iso-prioritize', ['status', 'items', 'build', 'rank', 'select', 'check', 'verify', 'explain'], { template: 'templates/prioritize.json', artifacts: ['.jobforge-prioritize.json', '.jobforge-prioritize-items.json'], migrated: true }),
35
+ helper('lineage', '@agent-pattern-labs/iso-lineage', ['status', 'record', 'check', 'stale', 'verify', 'explain'], { artifacts: ['.jobforge-lineage.json'], migrated: true }),
36
+ helper('redact', '@agent-pattern-labs/iso-redact', ['scan', 'verify', 'apply', 'explain'], { template: 'templates/redact.json', artifacts: ['.jobforge-redacted/'], migrated: true }),
37
+ helper('migrate', '@agent-pattern-labs/iso-migrate', ['plan', 'apply', 'check', 'explain'], { template: 'templates/migrations.json', migrated: true }),
38
38
  ];
39
39
 
40
40
  const packageOnly = [
41
- { id: 'contract', pkg: '@razroo/iso-contract', template: 'templates/contracts.json', needles: ['templates/contracts.json', 'tracker-line'] },
42
- { id: 'orchestrator', pkg: '@razroo/iso-orchestrator', file: 'scripts/batch-orchestrator.mjs', needles: ['iso-orchestrator'] },
41
+ { id: 'contract', pkg: '@agent-pattern-labs/iso-contract', template: 'templates/contracts.json', needles: ['templates/contracts.json', 'tracker-line'] },
42
+ { id: 'orchestrator', pkg: '@agent-pattern-labs/iso-orchestrator', file: 'scripts/batch-orchestrator.mjs', needles: ['iso-orchestrator'] },
43
43
  ];
44
44
 
45
45
  const errors = [];
package/scripts/facts.mjs CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  formatConfigSummary,
8
8
  formatFacts,
9
9
  formatVerifyResult,
10
- } from '@razroo/iso-facts';
10
+ } from '@agent-pattern-labs/iso-facts';
11
11
  import { PROJECT_DIR } from '../tracker-lib.mjs';
12
12
  import {
13
13
  buildJobForgeFacts,
package/scripts/guard.mjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { dirname, join, relative, resolve } from 'path';
4
4
  import { fileURLToPath } from 'url';
5
- import { audit, formatAuditResult, formatPolicyExplanation, loadPolicy, resultFails } from '@razroo/iso-guard';
5
+ import { audit, formatAuditResult, formatPolicyExplanation, loadPolicy, resultFails } from '@agent-pattern-labs/iso-guard';
6
6
  import {
7
7
  buildSessionGraph,
8
8
  collectDispatchCalls,
package/scripts/index.mjs CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  formatConfigSummary,
7
7
  formatIndexRecords,
8
8
  formatVerifyResult,
9
- } from '@razroo/iso-index';
9
+ } from '@agent-pattern-labs/iso-index';
10
10
  import { PROJECT_DIR } from '../tracker-lib.mjs';
11
11
  import {
12
12
  buildJobForgeIndex,
@@ -6,7 +6,7 @@ import {
6
6
  formatEvents,
7
7
  formatVerifyResult,
8
8
  queryEvents,
9
- } from '@razroo/iso-ledger';
9
+ } from '@agent-pattern-labs/iso-ledger';
10
10
  import { PROJECT_DIR, readAllEntries } from '../tracker-lib.mjs';
11
11
  import {
12
12
  appendJobForgeEvent,
@@ -8,7 +8,7 @@ import {
8
8
  formatStaleResult,
9
9
  formatVerifyResult,
10
10
  parseJson,
11
- } from '@razroo/iso-lineage';
11
+ } from '@agent-pattern-labs/iso-lineage';
12
12
  import { PROJECT_DIR } from '../tracker-lib.mjs';
13
13
  import {
14
14
  checkJobForgeLineage,
@@ -4,7 +4,7 @@ import { relative } from 'path';
4
4
  import {
5
5
  formatConfigSummary,
6
6
  formatMigrationResult,
7
- } from '@razroo/iso-migrate';
7
+ } from '@agent-pattern-labs/iso-migrate';
8
8
  import { PROJECT_DIR } from '../tracker-lib.mjs';
9
9
  import {
10
10
  jobForgeMigrationConfigPath,
@@ -8,7 +8,7 @@ import {
8
8
  loadPostflightConfig,
9
9
  parseJson,
10
10
  settlePostflight,
11
- } from '@razroo/iso-postflight';
11
+ } from '@agent-pattern-labs/iso-postflight';
12
12
  import { PROJECT_DIR } from '../tracker-lib.mjs';
13
13
  import {
14
14
  jobForgePostflightConfigPath,
@@ -8,7 +8,7 @@ import {
8
8
  loadPreflightConfig,
9
9
  parseJson,
10
10
  planPreflight,
11
- } from '@razroo/iso-preflight';
11
+ } from '@agent-pattern-labs/iso-preflight';
12
12
  import { PROJECT_DIR } from '../tracker-lib.mjs';
13
13
  import {
14
14
  jobForgePreflightConfigPath,
@@ -9,7 +9,7 @@ import {
9
9
  formatVerifyResult,
10
10
  loadPrioritizeItems,
11
11
  parseJson,
12
- } from '@razroo/iso-prioritize';
12
+ } from '@agent-pattern-labs/iso-prioritize';
13
13
  import { PROJECT_DIR } from '../tracker-lib.mjs';
14
14
  import {
15
15
  buildJobForgePrioritizeItems,
@@ -9,7 +9,7 @@ import {
9
9
  parseJson,
10
10
  redactText,
11
11
  scanSources,
12
- } from '@razroo/iso-redact';
12
+ } from '@agent-pattern-labs/iso-redact';
13
13
  import { PROJECT_DIR } from '../tracker-lib.mjs';
14
14
  import {
15
15
  jobForgeRedactConfigPath,
package/scripts/score.mjs CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  formatGateResult,
10
10
  formatScoreResult,
11
11
  formatVerifyResult,
12
- } from '@razroo/iso-score';
12
+ } from '@agent-pattern-labs/iso-score';
13
13
  import { PROJECT_DIR } from '../tracker-lib.mjs';
14
14
  import {
15
15
  checkJobForgeScore,
@@ -7,7 +7,7 @@ import {
7
7
  formatConfigSummary,
8
8
  formatTimelineResult,
9
9
  formatVerifyResult,
10
- } from '@razroo/iso-timeline';
10
+ } from '@agent-pattern-labs/iso-timeline';
11
11
  import { PROJECT_DIR } from '../tracker-lib.mjs';
12
12
  import {
13
13
  buildJobForgeTimeline,
package/scripts/trace.mjs CHANGED
@@ -200,7 +200,7 @@ function oneLine(value, max) {
200
200
  }
201
201
 
202
202
  function resolveIsoTraceCli() {
203
- const pkgJsonPath = require.resolve('@razroo/iso-trace/package.json');
203
+ const pkgJsonPath = require.resolve('@agent-pattern-labs/iso-trace/package.json');
204
204
  return join(dirname(pkgJsonPath), 'dist/cli.js');
205
205
  }
206
206
 
@@ -3222,7 +3222,7 @@ cross_company_feeds:
3222
3222
  type: remoteok
3223
3223
  url: https://remoteok.com/api
3224
3224
  # Required — RemoteOK returns 403 without a browser-like UA.
3225
- user_agent: "Mozilla/5.0 (compatible; JobForgeScanner/1.0; +https://github.com/razroo/JobForge)"
3225
+ user_agent: "Mozilla/5.0 (compatible; JobForgeScanner/1.0; +https://github.com/Agent-Pattern-Labs/JobForge)"
3226
3226
  # Pre-filter on entry.tags (case-insensitive substring match against the
3227
3227
  # array). Row passes if ANY positive matches AND NO negative matches.
3228
3228
  tag_filter: