@gitroll/tacitt-cli 0.5.0 → 0.6.1

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 (44) hide show
  1. package/README.md +4 -4
  2. package/bin/tacitt.cjs +1 -1
  3. package/dist/{agent-setup-BZbgLgHg.mjs → agent-setup-Dv_mQ38P.mjs} +1 -1
  4. package/dist/agent-setup-worker.mjs +4 -4
  5. package/dist/cli.mjs +6 -6
  6. package/dist/codex-title-worker.mjs +1 -1
  7. package/dist/configured-preview-worker.mjs +4 -4
  8. package/dist/configured-session-worker.mjs +4 -4
  9. package/dist/{heap-NDnGBXH6.mjs → heap-BR8WjR25.mjs} +4 -3
  10. package/dist/inspection-worker.mjs +3 -3
  11. package/dist/{job-BO0a67HQ.mjs → job-CYsjL4AT.mjs} +2 -2
  12. package/dist/{model-CmHypB0p.mjs → model-C1VzgKLi.mjs} +1 -1
  13. package/dist/operation-executor.mjs +2 -2
  14. package/dist/preview-worker.mjs +1 -1
  15. package/dist/{query-BZvNsP1u.mjs → query-BlisHJtP.mjs} +146 -50
  16. package/dist/{run-DvRM-NR8.mjs → run-hQ_W2p_Y.mjs} +2 -2
  17. package/dist/{src-C1SjCDx0.mjs → src--Ln5GHdz.mjs} +23 -6
  18. package/dist/{src-xidy0yF7.mjs → src-CGFwLUd6.mjs} +3 -3
  19. package/dist/{src-CQeUBG2Y.mjs → src-JoT3L94j.mjs} +2 -2
  20. package/dist/store-database-worker.mjs +1 -1
  21. package/dist/web/assets/index-C9LcK9ls.js +169 -0
  22. package/dist/web/assets/index-CYJBq1px.css +1 -0
  23. package/dist/web/index.html +2 -2
  24. package/package.json +1 -1
  25. package/skills/tacitt/SKILL.md +5 -5
  26. package/skills/tacitt/references/b-method.md +1 -1
  27. package/skills/tacitt/references/bootstrap.md +1 -1
  28. package/skills/tacitt/references/classification.md +2 -2
  29. package/skills/tacitt/references/commands.md +15 -15
  30. package/skills/tacitt/references/journey.md +4 -4
  31. package/skills/tacitt/references/parallel-review.md +1 -1
  32. package/skills/tacitt/references/remote-workers.md +1 -1
  33. package/skills/tacitt/references/send.md +6 -6
  34. package/skills/tacitt/scripts/INDEX.md +36 -36
  35. package/skills/tacitt/scripts/journey-classification-metadata.mjs +1 -1
  36. package/skills/tacitt/scripts/journey-classification-tasks.mjs +1 -1
  37. package/skills/tacitt/scripts/journey-scan-timing.mjs +5 -4
  38. package/skills/tacitt/scripts/journey-state.d.mts +9 -0
  39. package/skills/tacitt/scripts/journey-state.mjs +19 -2
  40. package/skills/tacitt/scripts/journey.d.mts +4 -0
  41. package/skills/tacitt/scripts/journey.mjs +5 -3
  42. package/skills/tacitt/scripts/review.mjs +8 -8
  43. package/dist/web/assets/index-Bbck2aOB.css +0 -1
  44. package/dist/web/assets/index-D0j-mvf1.js +0 -69
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # SessPilot
1
+ # Tacitt CLI
2
2
 
3
3
  Local session review and export through the public npm package. Requires Node.js
4
4
  `>=24.19.0 <25`, npm and connectivity to the npm registry. Consumers do not need npm
@@ -38,7 +38,7 @@ Add `--agent codex` or `--agent claude` to select a client. Add `--scope project
38
38
  from a workspace to install there instead. After installation, the terminal shows
39
39
  the next step: enter `$tacitt` in a fresh Codex conversation or `/tacitt`
40
40
  in Claude Code. The Skill prepares its exact matching CLI
41
- through npx; no global SessPilot installation is necessary. Existing loaded tasks
41
+ through npx; no global Tacitt CLI installation is necessary. Existing loaded tasks
42
42
  keep that release; a later deliberate install affects new invocations. Retain the
43
43
  recorded exact invocation when resuming a previous task after an agent restart.
44
44
 
@@ -58,7 +58,7 @@ Each direct category answer applies once. Certain/protected content stays hidden
58
58
  delegated choices are attributed to the agent for the current run. Complete reading,
59
59
  verified ZIP preview and Work review precede Send; a ready subset requires explicit scope
60
60
  confirmation. Send uses official Identity, uploads the confirmed primary and
61
- follows its actual assessment into the owner's current Passport. Local export
61
+ follows its actual assessment into the owner's current Tacitt profile. Local export
62
62
  remains available before upload. The standalone Manual journey uses its existing
63
63
  static browser interface.
64
64
 
@@ -79,7 +79,7 @@ Package acquisition, network or version-verification failures stop setup before
79
79
  dependent session work.
80
80
 
81
81
  Bundled Web dependency notices are included in
82
- `dist/web/THIRD_PARTY_LICENSES.md`. SessPilot's own package license metadata remains
82
+ `dist/web/THIRD_PARTY_LICENSES.md`. Tacitt CLI's own package license metadata remains
83
83
  `UNLICENSED`.
84
84
 
85
85
  Source, requirements and release evidence: [gitroll-dev/tacitt-cli](https://github.com/gitroll-dev/tacitt-cli).
package/bin/tacitt.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  const [major, minor] = process.versions.node.split('.').map(Number)
4
4
  if (major !== 24 || minor < 19) {
5
5
  process.stderr.write(
6
- 'SessPilot requires Node.js >=24.19.0 <25. Install a supported Node24 release and retry.\n',
6
+ 'Tacitt CLI requires Node.js >=24.19.0 <25. Install a supported Node24 release and retry.\n',
7
7
  )
8
8
  process.exitCode = 1
9
9
  } else {
@@ -1,5 +1,5 @@
1
1
  import "./locate-JYtFmKu-.mjs";
2
- import "./src-C1SjCDx0.mjs";
2
+ import "./src--Ln5GHdz.mjs";
3
3
  import { z } from "zod";
4
4
  import { Worker } from "node:worker_threads";
5
5
  //#region apps/cli/src/agent-setup/index.ts
@@ -1,8 +1,8 @@
1
- import { J as listAgentSetup } from "./src-CQeUBG2Y.mjs";
1
+ import { J as listAgentSetup } from "./src-JoT3L94j.mjs";
2
2
  import { Dn as createStaticProcessor, dn as workspaceSchema, ln as sessionSchema } from "./locate-JYtFmKu-.mjs";
3
- import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-xidy0yF7.mjs";
4
- import { at as maximumAgentSetupSessions, ci as effectiveTreatmentSchema } from "./src-C1SjCDx0.mjs";
5
- import "./agent-setup-BZbgLgHg.mjs";
3
+ import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-CGFwLUd6.mjs";
4
+ import { at as maximumAgentSetupSessions, ui as effectiveTreatmentSchema } from "./src--Ln5GHdz.mjs";
5
+ import "./agent-setup-Dv_mQ38P.mjs";
6
6
  import { z } from "zod";
7
7
  import { parentPort, workerData } from "node:worker_threads";
8
8
  //#region apps/cli/src/agent-setup/worker.ts
package/dist/cli.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { _ as readStateDump, a as readAgentPresence, b as traceStartup, d as helpText, f as parseOptions, g as startupFailure, h as permissionDiagnostic, i as invoke, l as awaitingPassport, m as longCommands, n as readOperation, o as createRuntime, p as businessCommands, r as waitOperation, s as executorEventSchema, t as cancelOperation, u as createRenderActivity, v as createExecutionPort, y as startHost$1 } from "./query-BZvNsP1u.mjs";
3
- import { nt as makePrivateDirectory, rt as openPrivateFile } from "./src-CQeUBG2Y.mjs";
2
+ import { _ as readStateDump, a as readAgentPresence, b as traceStartup, d as helpText, f as parseOptions, g as startupFailure, h as permissionDiagnostic, i as invoke, l as awaitingPassport, m as longCommands, n as readOperation, o as createRuntime, p as businessCommands, r as waitOperation, s as executorEventSchema, t as cancelOperation, u as createRenderActivity, v as createExecutionPort, y as startHost$1 } from "./query-BlisHJtP.mjs";
3
+ import { nt as makePrivateDirectory, rt as openPrivateFile } from "./src-JoT3L94j.mjs";
4
4
  import { $t as safeField, Qt as safeCode, Xt as ApplicationError } from "./locate-JYtFmKu-.mjs";
5
- import { Zn as reviewTransportBytes, et as readWorkspaceOutcomes, ii as stateSchema, st as resolveFailureLocation } from "./src-C1SjCDx0.mjs";
6
- import { _t as isCoordinationBusy } from "./heap-NDnGBXH6.mjs";
5
+ import { Zn as reviewTransportBytes, et as readWorkspaceOutcomes, oi as stateSchema, st as resolveFailureLocation } from "./src--Ln5GHdz.mjs";
6
+ import { _t as isCoordinationBusy } from "./heap-BR8WjR25.mjs";
7
7
  import { constants, createReadStream, write } from "node:fs";
8
8
  import { z } from "zod";
9
9
  import { lstat, mkdir, mkdtemp, open, readFile, readdir, realpath, rename, rm, writeFile } from "node:fs/promises";
@@ -832,7 +832,7 @@ async function askAgentConfiguration(clients, scope) {
832
832
  terminal: true
833
833
  });
834
834
  try {
835
- process.stderr.write(`SessPilot uses up to 16 analysis subagents for faster review.\nRaise the concurrent subagent limit to 16 for ${names}? Higher limits can increase concurrent usage.
835
+ process.stderr.write(`Tacitt CLI uses up to 16 analysis subagents for faster review.\nRaise the concurrent subagent limit to 16 for ${names}? Higher limits can increase concurrent usage.
836
836
  ` + (scope === "user" ? "This changes your client settings across projects.\n" : "This changes client settings for this project.\n") + "Save your work and fully restart the affected App or CLI afterward. We will not close it for you.\nAllow this change? [y/N] ");
837
837
  return await new Promise((resolve) => {
838
838
  terminal.once("line", (line) => resolve(/^y(?:es)?$/i.test(line.trim())));
@@ -930,7 +930,7 @@ function configurationFailure(agent, cause) {
930
930
  function writeInstallNotice(result) {
931
931
  const commands = result.installs.map(({ agent }) => agent === "codex" ? " Codex: $tacitt" : " Claude Code: /tacitt");
932
932
  const message = [
933
- "SessPilot Skill is ready.",
933
+ "Tacitt CLI is installed.",
934
934
  ...result.agentConfiguration.flatMap(({ agent, status, count }) => {
935
935
  const name = agent === "codex" ? "Codex" : "Claude Code";
936
936
  if (status === "updated" || status === "unchanged") return [`${name}: concurrent subagent setting ${status === "updated" ? "saved" : "already set"} at ${count}.`, ...agent === "claude" ? ["Claude Code must be version 2.1.217 or newer for this setting. Update older versions first."] : []];
@@ -1,4 +1,4 @@
1
- import { i as errorCode } from "./model-CmHypB0p.mjs";
1
+ import { i as errorCode } from "./model-C1VzgKLi.mjs";
2
2
  import { a as titleHintLimits, i as encodeTitleError, o as titleInputSchema, t as assertTitleHeap } from "./heap-1FYhGds4.mjs";
3
3
  import { stat } from "node:fs/promises";
4
4
  import { isAbsolute, join } from "node:path";
@@ -1,8 +1,8 @@
1
- import { Y as createConfiguredPreviewStream } from "./src-CQeUBG2Y.mjs";
1
+ import { Y as createConfiguredPreviewStream } from "./src-JoT3L94j.mjs";
2
2
  import { Dn as createStaticProcessor, dn as workspaceSchema, ln as sessionSchema } from "./locate-JYtFmKu-.mjs";
3
- import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-xidy0yF7.mjs";
4
- import { ci as effectiveTreatmentSchema } from "./src-C1SjCDx0.mjs";
5
- import { a as classifyRecord, n as assertPreviewHeap, t as runPreview } from "./run-DvRM-NR8.mjs";
3
+ import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-CGFwLUd6.mjs";
4
+ import { ui as effectiveTreatmentSchema } from "./src--Ln5GHdz.mjs";
5
+ import { a as classifyRecord, n as assertPreviewHeap, t as runPreview } from "./run-hQ_W2p_Y.mjs";
6
6
  import { z } from "zod";
7
7
  import { parentPort, workerData } from "node:worker_threads";
8
8
  //#region apps/cli/src/preview/run.ts
@@ -1,8 +1,8 @@
1
- import { et as safeError, h as captureConfiguredSessionJob, j as runConfiguredSessionJob, u as runConfiguredScanJob, z as gitSeedsProvider } from "./src-CQeUBG2Y.mjs";
1
+ import { et as safeError, h as captureConfiguredSessionJob, j as runConfiguredSessionJob, u as runConfiguredScanJob, z as gitSeedsProvider } from "./src-JoT3L94j.mjs";
2
2
  import { Dn as createStaticProcessor, Qt as safeCode } from "./locate-JYtFmKu-.mjs";
3
- import { l as createNativeAdapters } from "./src-xidy0yF7.mjs";
4
- import "./src-C1SjCDx0.mjs";
5
- import { d as runJourneyBaseJob, i as runJourneyOutputVerifyJob, n as runJourneyOutputJob, r as runJourneyOutputShardJob } from "./job-BO0a67HQ.mjs";
3
+ import { l as createNativeAdapters } from "./src-CGFwLUd6.mjs";
4
+ import "./src--Ln5GHdz.mjs";
5
+ import { d as runJourneyBaseJob, i as runJourneyOutputVerifyJob, n as runJourneyOutputJob, r as runJourneyOutputShardJob } from "./job-CYsjL4AT.mjs";
6
6
  import { parentPort } from "node:worker_threads";
7
7
  //#region apps/cli/src/configured-session-worker.ts
8
8
  const port = parentPort;
@@ -1,6 +1,6 @@
1
- import { S as readPrivateReviewPayload, at as windowsOwnerOnly, it as restrictToOwner, rt as openPrivateFile, tt as exclusiveLock, x as writePrivateReviewPayload } from "./src-CQeUBG2Y.mjs";
1
+ import { S as readPrivateReviewPayload, at as windowsOwnerOnly, it as restrictToOwner, rt as openPrivateFile, tt as exclusiveLock, x as writePrivateReviewPayload } from "./src-JoT3L94j.mjs";
2
2
  import { At as journeyTermSchema, It as termTypeSchema, Mt as reviewTermsResultSchema, Xt as ApplicationError, _ as semanticFindingSchema, b as validateBReview, c as textDigest, d as reviewAlignmentAudit, dt as nativeJourneySchema, er as isStaticCategory, ft as journeyGuidanceSchema, g as validateReviewAlignment, gt as journeyWorkSuggestionSchema, ht as journeyDescribeSchema, i as reviewBatchSchema, it as journeyDigestSchema, jt as reviewTermsInputSchema, kt as privacyTermSchema, l as validateReview, m as reviewAlignmentSchema, nn as reviewFamilies, o as reviewDigest, ot as journeyIdSchema, r as reviewBatchChunks, s as reviewSubmitSchema, sn as fileIdentitySchema, tn as familySelected, tr as staticCategories, u as findingReferenceKey, v as bContextEvidence, wn as createDetectionSummary } from "./locate-JYtFmKu-.mjs";
3
- import { $n as mergeBRepair, $t as journeyResourceSchema, At as validateAttemptAppend, B as validateInspectionBatch, Bt as newJourneyWork, Et as obsoleteJourney, Fn as confirmedHideGroupIds, Ft as applyClassificationProposal, G as validateInspectionFence, Gn as workPrivacyDecisions, Gr as withReadingProgress, Gt as hideFinishSchema, Hn as syncTermGroups, Hr as isReadingComplete, Ht as journeyContextQuerySchema, In as confirmedHideKey, It as classificationCommitSchema, J as validateInspectionQuery, Jn as reviewCandidateResourceSchema, Jt as journeySearchSaveSchema, K as validateInspectionHead, Kr as mergePrivacyTerms, Kt as hidePublishSchema, Mn as bMaskedHits, Nt as journeyBatchReadSchema, Pr as journeySendSchema, Pt as journeyReviewStorageQuerySchema, Qn as bReviewDigest, Qt as journeyResourceQuerySchema, Rn as confirmedHideTerms, Un as retireWorkDescription, Ur as isSelectedWork, Ut as journeyContextSchema, V as validateInspectionBatches, Vn as maskedHitsStale, W as validateInspectionClaim, Wn as workDecisionDigest, Wr as selectedWorks, Wt as hideBeginSchema, X as validateDetectionSummary, Xn as reviewRepairResourceSchema, Xt as journeyPolicyRespondSchema, Y as validateInspectionContribution, Yt as searchScopeDigest, Z as inspectionInputs, Zt as projectPreparationProgress, _ as projectJourneyInventory, _n as journeyCommitResultSchema, _r as preparationSettlementSchema, an as reviewAttemptsResultSchema, ar as scanGitSeedsId, b as bReviewScope, c as reconstructBFields, cn as sessionReconciliationResourceSchema, en as journeyIsolateSchema, fn as sessionReviewQuerySchema, fr as journeyInventoryReadSchema, gn as sessionUsefulnessResourceSchema, gr as preparationBeginSchema, h as semanticGroupKey, hn as sessionUsefulnessInputSchema, ht as candidateSortAvailable, ii as stateSchema, in as reviewAttemptsQuerySchema, ir as scanSessionResourceSchema, jt as journeyGuidance, kr as staticSessionId, kt as attemptBudgetCodePoints, l as reviseGroupMembership, lr as validateScanExclusion, m as hideScopeDigest, mn as sessionReviewStatusSchema, mr as journeyPreparationProgressSchema, nn as sortingApplySchema, nr as scanCanonicalResourceSchema, o as bRereadDigest, pn as sessionReviewResourceSchema, pr as journeyInventorySchema, pt as manualUploadSchema, q as validateInspectionInputs, qt as journeySearchResultSchema, rn as reviewAttemptResourceSchema, s as reconcileBSession, sn as sessionReconcileResultSchema, t as scanBatchContextDigest, tn as journeyPlaceSchema, tr as scanAliasResourceSchema, u as resolveGroupSplit, un as sessionRereadResourceSchema, ut as manualUploadBindingSchema, v as preparationScope, vn as journeyCommitSchema, vr as preparationStartSchema, wn as settleConfirmedHides, wt as settleCorrections, xn as confirmedHideDeltaSchema, xr as applyCardAnswers, yn as journeyEventSchema, yr as validatePreparationFacts, zn as dictionaryHides } from "./src-C1SjCDx0.mjs";
3
+ import { $n as mergeBRepair, $t as journeyResourceSchema, At as validateAttemptAppend, B as validateInspectionBatch, Bt as newJourneyWork, Et as obsoleteJourney, Fn as confirmedHideGroupIds, Ft as applyClassificationProposal, G as validateInspectionFence, Gn as workPrivacyDecisions, Gr as isSkippedWork, Gt as hideFinishSchema, Hn as syncTermGroups, Ht as journeyContextQuerySchema, In as confirmedHideKey, It as classificationCommitSchema, J as validateInspectionQuery, Jn as reviewCandidateResourceSchema, Jr as mergePrivacyTerms, Jt as journeySearchSaveSchema, K as validateInspectionHead, Kr as selectedWorks, Kt as hidePublishSchema, Mn as bMaskedHits, Nt as journeyBatchReadSchema, Pr as journeySendSchema, Pt as journeyReviewStorageQuerySchema, Qn as bReviewDigest, Qt as journeyResourceQuerySchema, Rn as confirmedHideTerms, Un as retireWorkDescription, Ur as isReadingComplete, Ut as journeyContextSchema, V as validateInspectionBatches, Vn as maskedHitsStale, W as validateInspectionClaim, Wn as workDecisionDigest, Wr as isSelectedWork, Wt as hideBeginSchema, X as validateDetectionSummary, Xn as reviewRepairResourceSchema, Xt as journeyPolicyRespondSchema, Y as validateInspectionContribution, Yt as searchScopeDigest, Z as inspectionInputs, Zt as projectPreparationProgress, _ as projectJourneyInventory, _n as journeyCommitResultSchema, _r as preparationSettlementSchema, an as reviewAttemptsResultSchema, ar as scanGitSeedsId, b as bReviewScope, c as reconstructBFields, cn as sessionReconciliationResourceSchema, en as journeyIsolateSchema, fn as sessionReviewQuerySchema, fr as journeyInventoryReadSchema, gn as sessionUsefulnessResourceSchema, gr as preparationBeginSchema, h as semanticGroupKey, hn as sessionUsefulnessInputSchema, ht as candidateSortAvailable, in as reviewAttemptsQuerySchema, ir as scanSessionResourceSchema, jt as journeyGuidance, kr as staticSessionId, kt as attemptBudgetCodePoints, l as reviseGroupMembership, lr as validateScanExclusion, m as hideScopeDigest, mn as sessionReviewStatusSchema, mr as journeyPreparationProgressSchema, nn as sortingApplySchema, nr as scanCanonicalResourceSchema, o as bRereadDigest, oi as stateSchema, pn as sessionReviewResourceSchema, pr as journeyInventorySchema, pt as manualUploadSchema, q as validateInspectionInputs, qr as withReadingProgress, qt as journeySearchResultSchema, rn as reviewAttemptResourceSchema, s as reconcileBSession, sn as sessionReconcileResultSchema, t as scanBatchContextDigest, tn as journeyPlaceSchema, tr as scanAliasResourceSchema, u as resolveGroupSplit, un as sessionRereadResourceSchema, ut as manualUploadBindingSchema, v as preparationScope, vn as journeyCommitSchema, vr as preparationStartSchema, wn as settleConfirmedHides, wt as settleCorrections, xn as confirmedHideDeltaSchema, xr as applyCardAnswers, yn as journeyEventSchema, yr as validatePreparationFacts, zn as dictionaryHides } from "./src--Ln5GHdz.mjs";
4
4
  import { constants } from "node:fs";
5
5
  import { z } from "zod";
6
6
  import { copyFile, link, lstat, mkdir, mkdtemp, open, readFile, realpath, rm, unlink } from "node:fs/promises";
@@ -4820,12 +4820,13 @@ function commitJourneySend(db, input) {
4820
4820
  ...input.state,
4821
4821
  revision
4822
4822
  });
4823
+ const skipped = (workId) => current.journey.works.some((work) => work.id === workId && isSkippedWork(work));
4823
4824
  const finished = send.status === "completed" && send.omitted.every((work) => [
4824
4825
  "drop",
4825
4826
  "empty",
4826
4827
  "sent",
4827
4828
  "skipped"
4828
- ].includes(work.reason));
4829
+ ].includes(work.reason) || work.reason === "not-ready" && skipped(work.workId));
4829
4830
  const journey = {
4830
4831
  ...current.journey,
4831
4832
  phase: current.journey.phase === "paused" || prior?.status === "completed" ? current.journey.phase : finished ? "completed" : [
@@ -1,7 +1,7 @@
1
- import { X as createInspectionProcessor } from "./src-CQeUBG2Y.mjs";
1
+ import { X as createInspectionProcessor } from "./src-JoT3L94j.mjs";
2
2
  import { Dn as createStaticProcessor } from "./locate-JYtFmKu-.mjs";
3
- import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-xidy0yF7.mjs";
4
- import { H as validateInspectionRequest } from "./src-C1SjCDx0.mjs";
3
+ import { l as createNativeAdapters, u as createGitNameSeedProvider } from "./src-CGFwLUd6.mjs";
4
+ import { H as validateInspectionRequest } from "./src--Ln5GHdz.mjs";
5
5
  import "./messages-D3m3bhva.mjs";
6
6
  import { z } from "zod";
7
7
  import { parentPort, workerData } from "node:worker_threads";
@@ -1,6 +1,6 @@
1
- import { A as renderJobDigest, D as prepareCollectionProduction, V as writeLogicalJourneyOutput, W as readConfiguredOutputInfo, at as windowsOwnerOnly, b as writeLogicalJourneyBase, d as verifyOutputShard, f as writeOutputShard, nt as makePrivateDirectory, w as readConfiguredSearchFields, z as gitSeedsProvider } from "./src-CQeUBG2Y.mjs";
1
+ import { A as renderJobDigest, D as prepareCollectionProduction, V as writeLogicalJourneyOutput, W as readConfiguredOutputInfo, at as windowsOwnerOnly, b as writeLogicalJourneyBase, d as verifyOutputShard, f as writeOutputShard, nt as makePrivateDirectory, w as readConfiguredSearchFields, z as gitSeedsProvider } from "./src-JoT3L94j.mjs";
2
2
  import { Xt as ApplicationError, nn as reviewFamilies, zt as filterInventoryByPeriod } from "./locate-JYtFmKu-.mjs";
3
- import { Ar as staticSessionResourceSchema, Cn as renderedHideValue, Dn as hideKeyId, En as addHideIndexTokens, di as selectFrozenConfiguration, kn as packHideIndex, li as defaultScopedSettings, ui as freezeConfiguration } from "./src-C1SjCDx0.mjs";
3
+ import { Ar as staticSessionResourceSchema, Cn as renderedHideValue, Dn as hideKeyId, En as addHideIndexTokens, di as defaultScopedSettings, fi as freezeConfiguration, kn as packHideIndex, pi as selectFrozenConfiguration } from "./src--Ln5GHdz.mjs";
4
4
  import { constants } from "node:fs";
5
5
  import { z } from "zod";
6
6
  import { copyFile, link, lstat, mkdir, mkdtemp, open, readFile, realpath, rename, rm, unlink, writeFile } from "node:fs/promises";
@@ -1,4 +1,4 @@
1
- import "./src-C1SjCDx0.mjs";
1
+ import "./src--Ln5GHdz.mjs";
2
2
  //#region packages/harnesses/src/discovery/model.ts
3
3
  const discoveryBounds = {
4
4
  entries: 1e5,
@@ -1,6 +1,6 @@
1
- import { c as executorRequestSchema, f as parseOptions, g as startupFailure, i as invoke, m as longCommands, n as readOperation, o as createRuntime, r as waitOperation } from "./query-BZvNsP1u.mjs";
1
+ import { c as executorRequestSchema, f as parseOptions, g as startupFailure, i as invoke, m as longCommands, n as readOperation, o as createRuntime, r as waitOperation } from "./query-BlisHJtP.mjs";
2
2
  import { $t as safeField, Qt as safeCode, Xt as ApplicationError } from "./locate-JYtFmKu-.mjs";
3
- import "./src-C1SjCDx0.mjs";
3
+ import "./src--Ln5GHdz.mjs";
4
4
  import { z } from "zod";
5
5
  import { setTimeout } from "node:timers/promises";
6
6
  //#region apps/cli/src/operation/executor.ts
@@ -1,4 +1,4 @@
1
- import { n as assertPreviewHeap, o as previewInputSchema, t as runPreview } from "./run-DvRM-NR8.mjs";
1
+ import { n as assertPreviewHeap, o as previewInputSchema, t as runPreview } from "./run-hQ_W2p_Y.mjs";
2
2
  import { parentPort, workerData } from "node:worker_threads";
3
3
  //#region packages/harnesses/src/preview/worker/index.ts
4
4
  function notify(message) {
@@ -1,10 +1,10 @@
1
- import { $ as createCleanup, B as parallelismLimits, C as readOriginalSearchFields, E as checkReusableBundle, F as SessionWorkerError, G as processJourneyMetadataFields, H as privateJourneyDirectory, I as sessionWorkerFailure, K as staticMaskCategory, L as privateCollectionDirectory, M as readCollectionIndex, N as parseCollectionWorkspaceSummary, O as captureLogicalJourneySources, P as createSharedSessionPool, Q as removeNamedTemporarySpools, R as defaultParallelism, T as createCollectionArtifacts, U as readLogicalJourneyFinalMasks, W as readConfiguredOutputInfo, Z as createTemporary, _ as processJourneyMetadata, a as scanReviewFields, at as windowsOwnerOnly, c as readSessionScanRecords, g as readCapturedOriginalRows, i as buildWorkScanBatches, it as restrictToOwner, j as runConfiguredSessionJob, k as capturedJourneyScope, l as scanPreparedSession, m as openConfiguredUpload, n as verifyPreparedSessionSources, nt as makePrivateDirectory, o as createWorkPieces, ot as isWindowsAclFailure, p as configuredSessionUploads, q as readWorkspacePair, r as prepareSessionScans, rt as openPrivateFile, s as readSessionScanFields, st as windowsAclCodes, t as preparedScanConfiguration, v as readStaticSessionMasks, w as readConfiguredSearchFields, y as staticSessionJobs, z as gitSeedsProvider } from "./src-CQeUBG2Y.mjs";
1
+ import { $ as createCleanup, B as parallelismLimits, C as readOriginalSearchFields, E as checkReusableBundle, F as SessionWorkerError, G as processJourneyMetadataFields, H as privateJourneyDirectory, I as sessionWorkerFailure, K as staticMaskCategory, L as privateCollectionDirectory, M as readCollectionIndex, N as parseCollectionWorkspaceSummary, O as captureLogicalJourneySources, P as createSharedSessionPool, Q as removeNamedTemporarySpools, R as defaultParallelism, T as createCollectionArtifacts, U as readLogicalJourneyFinalMasks, W as readConfiguredOutputInfo, Z as createTemporary, _ as processJourneyMetadata, a as scanReviewFields, at as windowsOwnerOnly, c as readSessionScanRecords, g as readCapturedOriginalRows, i as buildWorkScanBatches, it as restrictToOwner, j as runConfiguredSessionJob, k as capturedJourneyScope, l as scanPreparedSession, m as openConfiguredUpload, n as verifyPreparedSessionSources, nt as makePrivateDirectory, o as createWorkPieces, ot as isWindowsAclFailure, p as configuredSessionUploads, q as readWorkspacePair, r as prepareSessionScans, rt as openPrivateFile, s as readSessionScanFields, st as windowsAclCodes, t as preparedScanConfiguration, v as readStaticSessionMasks, w as readConfiguredSearchFields, y as staticSessionJobs, z as gitSeedsProvider } from "./src-JoT3L94j.mjs";
2
2
  import { $t as safeField, Bt as sessionPeriodSchema, Dn as createStaticProcessor, F as bClassificationKey, Fn as entityDictionaryVersion, Ft as termTypeInfo, Gt as ownerProfileSchema, H as codePointLength, Ht as journeyProfileAddressActionSchema, K as utf16Offset, Kt as passportAddressSchema, N as bUnitFragments, Ot as privacyTermKey, Qt as safeCode, Sn as currentDetectorVersion, T as bLiteralTerms, Un as frameRecords, Ut as journeyProfileLinksActionSchema, V as bDigest, Wt as mergeOwnerProfile, Xt as ApplicationError, Zt as UnfinishedJourneyError, an as observeSource, ar as admitCustomTerm, b as validateBReview, c as textDigest, h as reviewFindingsDigest, ht as journeyDescribeSchema, ir as createEntityMatcher, jt as reviewTermsInputSchema, l as validateReview, n as compileBFindings, nn as reviewFamilies, or as admitGitName, qt as profileHasChoices, r as reviewBatchChunks, s as reviewSubmitSchema, t as locateTerms, tn as familySelected, z as bAnchorKey, zt as filterInventoryByPeriod } from "./locate-JYtFmKu-.mjs";
3
- import { a as mainTextChunks, c as previewInWorker, i as nearestSortingRepository, l as createNativeAdapters, n as createProjectEvidenceCollector, o as mainTextFields, r as sortingRepositoryId, s as textChunks, t as createHarnesses, u as createGitNameSeedProvider } from "./src-xidy0yF7.mjs";
4
- import { $ as settingsQuerySchema, $r as packageCommandSchema, A as deviceProfileScopeSchema, B as validateInspectionBatch, Bn as journeyConfirmedHides, Br as hasCompleteWorkDescription, Bt as newJourneyWork, C as rebindReviewSubmit, Cr as privacyDecisionDigest, Ct as sendStartSchema, D as createAccount, Dr as hasCurrentStaticReview, E as staticallyHiddenFindings, Er as nativeRespondSchema, Et as obsoleteJourney, Fn as confirmedHideGroupIds, Fr as sendArtifactSchema, Gr as withReadingProgress, Hr as isReadingComplete, Ht as journeyContextQuerySchema, Ir as sendReceiptSchema, Jn as reviewCandidateResourceSchema, Jr as journeyFindingsSchema, Kn as workCorrectionBinding, L as createApplication, Ln as confirmedHideKinds, Lr as sendReplaceResultSchema, Lt as classificationPartition, M as readAccountAvatarUrl, Mr as agentSourceSchema, Mt as applyClassification, N as storedCredentialSchema, Nn as bTermMatcher, Nr as agentSourcesSchema, O as accountProfileSchema, Or as staticReviewDigest, Pr as journeySendSchema, Pt as journeyReviewStorageQuerySchema, Q as settingsBatchSchema, Qn as bReviewDigest, Qr as commandSchema, Qt as journeyResourceQuerySchema, R as inspectionCancelSchema, Rr as sendResolutionSchema, Rt as classificationWorks, S as rebindReviewOverlay, Sn as readConfirmedHideChange, Sr as assertJourneyPrivacyReady, St as sendPrepareSchema, T as guardedFindingText, Tn as termHideAdditions, Tr as nativeGetSchema, Tt as currentJourneyAdapters, U as inspectionQuerySchema, Un as retireWorkDescription, Ur as isSelectedWork, Vn as maskedHitsStale, Vr as isClassifying, Vt as reviewCompileSchema, Wn as workDecisionDigest, Xn as reviewRepairResourceSchema, Xr as journeyRenderInputSchema, Xt as journeyPolicyRespondSchema, Yn as reviewRepairInputSchema, Yr as journeyPreviewSchema, Yt as searchScopeDigest, Zr as journeyRenderSchema, _t as maximumTermsFileBytes, a as bCrossSegmentReviewSchema, ar as scanGitSeedsId, b as bReviewScope, bn as confirmedHideAdditions, br as journeyClassificationSessionsSchema, bt as sendActionSchema, c as reconstructBFields, cr as scanExclusionResourceSchema, ct as validateFailureLocation, d as selectedValueMembers, dn as sessionReviewInputSchema, dr as journeyInventoryQuerySchema, dt as manualUploadChoiceSchema, ei as selectionBatchSchema, er as planBRepair, et as readWorkspaceOutcomes, f as splitSelectorValues, fn as sessionReviewQuerySchema, ft as manualUploadPrepareSchema, g as changeJourney, gt as emptyTermsRevision, hn as sessionUsefulnessInputSchema, hr as emptyPreparationFacts, i as validateBCrossSegmentReview, ii as stateSchema, ir as scanSessionResourceSchema, j as profileUrlMatchesIdentity, k as deviceAuthorizationSchema, ln as sessionRereadInputSchema, lt as manualUploadActionSchema, m as hideScopeDigest, mt as manualUploadStartSchema, n as scanBatchEquivalenceDigest, nt as appendSensitiveTerms, o as bRereadDigest, oi as recommendParallelism, on as sessionReconcileInputSchema, or as scanGitSeedsResource, ot as artifactFailureDetailSchema, p as activeJourneyTerms, pt as manualUploadSchema, qn as reviewCandidateInputSchema, qr as journeyFindingImpactSchema, qt as journeySearchResultSchema, r as locateTermEvidence, ri as producerVersion, rn as reviewAttemptResourceSchema, rr as scanPreparationDigest, s as reconcileBSession, sr as verifiedScanGitSeeds, st as resolveFailureLocation, t as scanBatchContextDigest, ti as selectionSchema, tn as journeyPlaceSchema, vt as normalizeSensitiveTerms, w as reviewBatchReuse, wr as nativeEventsSchema, x as rebindReviewAlignment, xt as sendChoiceSchema, y as isGenericPublicTerm, yt as replaceSensitiveTermsSchema, z as inspectionStartSchema, zr as sendSettingsSchema, zt as retireScanGeneration } from "./src-C1SjCDx0.mjs";
5
- import { $ as checkVersion, A as resourceSelectionQuerySchema, B as termReuseQuerySchema, C as loadAcceptedReview, D as aggregateUsefulness, E as loadPrivateResource, F as validateUnitCandidate, G as requireActiveBatch, H as batchHeader, I as reuseQuerySchema, J as validateDatabase, K as initializeAndClaim, L as batchQuery, M as evaluateUnitEvidence, N as sameCandidateRequest, O as sessionUsefulnessRecommendation, P as validateCandidateAttempt, Q as validateState, R as isPrivateResourceKind, S as validateSessionBindings, T as loadBatch, U as createJourneyPayloadFiles, V as privateReviewHash, W as validateBatchBody, X as readBundleDirectory, Y as withDatabase, Z as readStoredState, _ as loadReconciliation, _t as isCoordinationBusy, a as decodeError, at as hasResetMarker, b as validatePreparationSelection, c as dropsAnchor, ct as privatePath, d as parseDelivery, dt as stateDirectory, et as schemaVersion, f as validateCandidate, ft as syncDirectory, g as loadPreparedBodies, gt as errorCode$1, h as loadPreparation, ht as StoreError, i as createExecutor, it as finishReset, j as inspectionQuerySchema$1, k as sessionQuery, l as replySchema, lt as readResetMarker, m as loadStatus, mt as withFileCheckTimings, n as releaseInheritedHeapFlags, nt as createDatabaseFile, o as ProtocolError, ot as inspectStateFiles, p as classificationJourneyCommit, pt as withStateSnapshot, q as ownership, r as storeHeapLimits, rt as databaseName, s as allowedReplies, st as present, tt as beginReset, u as operations, ut as recheckPrivatePath, v as loadRereadBodies, vt as isSqliteCorruption, w as loadAuthenticatedReview, x as validateSessionReconciliation, y as loadSessionBodies, z as privateResourceHeader } from "./heap-NDnGBXH6.mjs";
6
- import { C as journeyDirectory, S as saveRemoteState, _ as staticBaseProduction, a as writeJourneyOutput, b as isRemoteImport, c as mergeHideIndexTokens, f as writeJourneyBase, g as staticBaseInputs, h as staticSessions, l as packRenderHideIndex, m as saveStaticSession, o as createHideIndexTokens, p as readStaticResult, s as hideIndexTexts, t as journeyOutputJob, u as journeyBaseJob, v as prepareSourcePlan, w as collectRemoteWorkers, x as readRemoteState, y as workApproval } from "./job-BO0a67HQ.mjs";
7
- import { t as createAgentSetupPort } from "./agent-setup-BZbgLgHg.mjs";
3
+ import { a as mainTextChunks, c as previewInWorker, i as nearestSortingRepository, l as createNativeAdapters, n as createProjectEvidenceCollector, o as mainTextFields, r as sortingRepositoryId, s as textChunks, t as createHarnesses, u as createGitNameSeedProvider } from "./src-CGFwLUd6.mjs";
4
+ import { $ as settingsQuerySchema, $r as journeyRenderSchema, A as deviceProfileScopeSchema, B as validateInspectionBatch, Bn as journeyConfirmedHides, Br as hasCompleteWorkDescription, Bt as newJourneyWork, C as rebindReviewSubmit, Cr as privacyDecisionDigest, Ct as sendStartSchema, D as createAccount, Dr as hasCurrentStaticReview, E as staticallyHiddenFindings, Er as nativeRespondSchema, Et as obsoleteJourney, Fn as confirmedHideGroupIds, Fr as sendArtifactSchema, Hr as isIncludedWork, Ht as journeyContextQuerySchema, Ir as sendReceiptSchema, Jn as reviewCandidateResourceSchema, Kn as workCorrectionBinding, L as createApplication, Ln as confirmedHideKinds, Lr as sendReplaceResultSchema, Lt as classificationPartition, M as readAccountAvatarUrl, Mr as agentSourceSchema, Mt as applyClassification, N as storedCredentialSchema, Nn as bTermMatcher, Nr as agentSourcesSchema, O as accountProfileSchema, Or as staticReviewDigest, Pr as journeySendSchema, Pt as journeyReviewStorageQuerySchema, Q as settingsBatchSchema, Qn as bReviewDigest, Qr as journeyRenderInputSchema, Qt as journeyResourceQuerySchema, R as inspectionCancelSchema, Rr as sendResolutionSchema, Rt as classificationWorks, S as rebindReviewOverlay, Sn as readConfirmedHideChange, Sr as assertJourneyPrivacyReady, St as sendPrepareSchema, T as guardedFindingText, Tn as termHideAdditions, Tr as nativeGetSchema, Tt as currentJourneyAdapters, U as inspectionQuerySchema, Un as retireWorkDescription, Ur as isReadingComplete, Vn as maskedHitsStale, Vr as isClassifying, Vt as reviewCompileSchema, Wn as workDecisionDigest, Wr as isSelectedWork, Xn as reviewRepairResourceSchema, Xr as journeyFindingsSchema, Xt as journeyPolicyRespondSchema, Yn as reviewRepairInputSchema, Yr as journeyFindingImpactSchema, Yt as searchScopeDigest, Zr as journeyPreviewSchema, _t as maximumTermsFileBytes, a as bCrossSegmentReviewSchema, ai as producerVersion, ar as scanGitSeedsId, b as bReviewScope, bn as confirmedHideAdditions, br as journeyClassificationSessionsSchema, bt as sendActionSchema, c as reconstructBFields, ci as recommendParallelism, cr as scanExclusionResourceSchema, ct as validateFailureLocation, d as selectedValueMembers, dn as sessionReviewInputSchema, dr as journeyInventoryQuerySchema, dt as manualUploadChoiceSchema, ei as commandSchema, er as planBRepair, et as readWorkspaceOutcomes, f as splitSelectorValues, fn as sessionReviewQuerySchema, ft as manualUploadPrepareSchema, g as changeJourney, gt as emptyTermsRevision, hn as sessionUsefulnessInputSchema, hr as emptyPreparationFacts, i as validateBCrossSegmentReview, ir as scanSessionResourceSchema, j as profileUrlMatchesIdentity, k as deviceAuthorizationSchema, ln as sessionRereadInputSchema, lt as manualUploadActionSchema, m as hideScopeDigest, mt as manualUploadStartSchema, n as scanBatchEquivalenceDigest, ni as selectionBatchSchema, nt as appendSensitiveTerms, o as bRereadDigest, oi as stateSchema, on as sessionReconcileInputSchema, or as scanGitSeedsResource, ot as artifactFailureDetailSchema, p as activeJourneyTerms, pt as manualUploadSchema, qn as reviewCandidateInputSchema, qr as withReadingProgress, qt as journeySearchResultSchema, r as locateTermEvidence, ri as selectionSchema, rn as reviewAttemptResourceSchema, rr as scanPreparationDigest, s as reconcileBSession, sr as verifiedScanGitSeeds, st as resolveFailureLocation, t as scanBatchContextDigest, ti as packageCommandSchema, tn as journeyPlaceSchema, vt as normalizeSensitiveTerms, w as reviewBatchReuse, wr as nativeEventsSchema, x as rebindReviewAlignment, xt as sendChoiceSchema, y as isGenericPublicTerm, yt as replaceSensitiveTermsSchema, z as inspectionStartSchema, zr as sendSettingsSchema, zt as retireScanGeneration } from "./src--Ln5GHdz.mjs";
5
+ import { $ as checkVersion, A as resourceSelectionQuerySchema, B as termReuseQuerySchema, C as loadAcceptedReview, D as aggregateUsefulness, E as loadPrivateResource, F as validateUnitCandidate, G as requireActiveBatch, H as batchHeader, I as reuseQuerySchema, J as validateDatabase, K as initializeAndClaim, L as batchQuery, M as evaluateUnitEvidence, N as sameCandidateRequest, O as sessionUsefulnessRecommendation, P as validateCandidateAttempt, Q as validateState, R as isPrivateResourceKind, S as validateSessionBindings, T as loadBatch, U as createJourneyPayloadFiles, V as privateReviewHash, W as validateBatchBody, X as readBundleDirectory, Y as withDatabase, Z as readStoredState, _ as loadReconciliation, _t as isCoordinationBusy, a as decodeError, at as hasResetMarker, b as validatePreparationSelection, c as dropsAnchor, ct as privatePath, d as parseDelivery, dt as stateDirectory, et as schemaVersion, f as validateCandidate, ft as syncDirectory, g as loadPreparedBodies, gt as errorCode$1, h as loadPreparation, ht as StoreError, i as createExecutor, it as finishReset, j as inspectionQuerySchema$1, k as sessionQuery, l as replySchema, lt as readResetMarker, m as loadStatus, mt as withFileCheckTimings, n as releaseInheritedHeapFlags, nt as createDatabaseFile, o as ProtocolError, ot as inspectStateFiles, p as classificationJourneyCommit, pt as withStateSnapshot, q as ownership, r as storeHeapLimits, rt as databaseName, s as allowedReplies, st as present, tt as beginReset, u as operations, ut as recheckPrivatePath, v as loadRereadBodies, vt as isSqliteCorruption, w as loadAuthenticatedReview, x as validateSessionReconciliation, y as loadSessionBodies, z as privateResourceHeader } from "./heap-BR8WjR25.mjs";
6
+ import { C as journeyDirectory, S as saveRemoteState, _ as staticBaseProduction, a as writeJourneyOutput, b as isRemoteImport, c as mergeHideIndexTokens, f as writeJourneyBase, g as staticBaseInputs, h as staticSessions, l as packRenderHideIndex, m as saveStaticSession, o as createHideIndexTokens, p as readStaticResult, s as hideIndexTexts, t as journeyOutputJob, u as journeyBaseJob, v as prepareSourcePlan, w as collectRemoteWorkers, x as readRemoteState, y as workApproval } from "./job-CYsjL4AT.mjs";
7
+ import { t as createAgentSetupPort } from "./agent-setup-Dv_mQ38P.mjs";
8
8
  import { t as workerMessageSchema } from "./messages-D3m3bhva.mjs";
9
9
  import { constants, write } from "node:fs";
10
10
  import { z } from "zod";
@@ -1231,7 +1231,7 @@ function closeConnection(root, db, onFatal, primary) {
1231
1231
  //#region packages/local-host/src/coordination/files.ts
1232
1232
  const coordinationApplicationId = 1397769036;
1233
1233
  function invalid() {
1234
- throw new StoreError("STATE_LAYOUT_INVALID", "Coordination files are incomplete or changed. Stop all SessPilot instances and use a fresh private --state-dir. Reset does not replace coordination files.");
1234
+ throw new StoreError("STATE_LAYOUT_INVALID", "Coordination files are incomplete or changed. Close every running Tacitt CLI and use a fresh private --state-dir. Reset does not replace coordination files.");
1235
1235
  }
1236
1236
  function initialize(root, path, onFatal) {
1237
1237
  const db = new DatabaseSync(path, { timeout: 0 });
@@ -1348,7 +1348,7 @@ async function tryAcquireCoordination(stateDir, domain, onFatal, onPhase) {
1348
1348
  observe("coordination.begin");
1349
1349
  db.exec("BEGIN IMMEDIATE");
1350
1350
  observe("coordination.header");
1351
- if (db.prepare("PRAGMA application_id").get()?.["application_id"] !== 1397769036 || db.prepare("PRAGMA journal_mode").get()?.["journal_mode"] !== "delete" || db.prepare("SELECT name FROM sqlite_schema").all().length !== 0) throw new StoreError("STATE_LAYOUT_INVALID", "The coordination database is not a recognized header-only file. Stop all SessPilot instances and use a fresh private --state-dir.");
1351
+ if (db.prepare("PRAGMA application_id").get()?.["application_id"] !== 1397769036 || db.prepare("PRAGMA journal_mode").get()?.["journal_mode"] !== "delete" || db.prepare("SELECT name FROM sqlite_schema").all().length !== 0) throw new StoreError("STATE_LAYOUT_INVALID", "The coordination database is not a recognized header-only file. Close every running Tacitt CLI and use a fresh private --state-dir.");
1352
1352
  } catch (error) {
1353
1353
  observe("coordination.close");
1354
1354
  closeConnection(file.root, db, onFatal, { error });
@@ -5440,8 +5440,8 @@ const longCommands = /* @__PURE__ */ new Set([
5440
5440
  //#endregion
5441
5441
  //#region apps/cli/src/account/defaults.ts
5442
5442
  /**
5443
- * Where the shipped CLI signs in. `--identity-url`, `--identity-client-id`, `--passport-api-url`
5444
- * and the matching `SESS_PILOT_*` variables override these for development targets.
5443
+ * Where the shipped CLI signs in. `--identity-url`, `--identity-client-id`, `--profile-api-url`
5444
+ * (or the older `--passport-api-url`) and the matching `SESS_PILOT_*` variables override these for development targets.
5445
5445
  *
5446
5446
  * The client ID is the public value Identity issues when the `sess-pilot` App declaration is
5447
5447
  * applied to the production target (`APP_SESS_PILOT_OIDC_CLI_CLIENT_ID`). Release builds inject
@@ -5512,6 +5512,7 @@ function parseOptions(args, source = sourceCheckout) {
5512
5512
  until: { type: "string" },
5513
5513
  "identity-url": { type: "string" },
5514
5514
  "identity-client-id": { type: "string" },
5515
+ "profile-api-url": { type: "string" },
5515
5516
  "passport-api-url": { type: "string" },
5516
5517
  help: {
5517
5518
  type: "boolean",
@@ -5571,7 +5572,7 @@ function parseOptions(args, source = sourceCheckout) {
5571
5572
  sessionPeriod: period.data,
5572
5573
  identityUrl: readOrigin(parsed.values["identity-url"] ?? process.env["SESS_PILOT_IDENTITY_URL"] ?? accountDefaults.identityUrl),
5573
5574
  identityClientId: identityClientId === "" ? null : identityClientId,
5574
- passportApiUrl: readOrigin(parsed.values["passport-api-url"] ?? process.env["SESS_PILOT_PASSPORT_API_URL"] ?? accountDefaults.passportApiUrl),
5575
+ passportApiUrl: readOrigin(parsed.values["profile-api-url"] ?? parsed.values["passport-api-url"] ?? process.env["SESS_PILOT_PROFILE_API_URL"] ?? process.env["SESS_PILOT_PASSPORT_API_URL"] ?? accountDefaults.passportApiUrl),
5575
5576
  stateDir: resolve(parsed.values["state-dir"] ?? defaultState),
5576
5577
  bundleDir: parsed.values["bundle-dir"] === void 0 ? void 0 : resolve(parsed.values["bundle-dir"]),
5577
5578
  claudeHome: resolve(parsed.values["claude-home"] ?? process.env["CLAUDE_CONFIG_DIR"] ?? join(home, ".claude")),
@@ -5607,11 +5608,11 @@ Configured previews use current cleanup/redaction settings, including metadata.
5607
5608
  Original-mode previews use a separate basic guard; sampling never limits export.
5608
5609
  Workspace ZIPs and collection indexes use the saved bundle library directory.
5609
5610
  --bundle-dir overrides that location for this CLI run only.
5610
- Native Skill Send uploads only the confirmed primary artifacts to the configured Passport API.
5611
+ Native Skill Send uploads only the confirmed primary artifacts to the configured Tacitt profile API.
5611
5612
  status prints safe workspace outcomes from the latest saved packaging operation.
5612
5613
  Private packaging error details stay in <state-dir>/diagnostics/ (up to 4 MiB).
5613
5614
  Sign in from the Web UI to link this tool to your GitRoll Identity account; the CLI contacts
5614
- only the Identity and Skill Passport origins below, only when you ask, and keeps the issued
5615
+ only the Identity and profile API origins below, only when you ask, and keeps the issued
5615
5616
  token in <state-dir>/account/ (owner-only).
5616
5617
 
5617
5618
  Options:
@@ -5632,7 +5633,7 @@ Options:
5632
5633
  (DATE: YYYY-MM-DD local day, inclusive, or an ISO timestamp)
5633
5634
  --identity-url URL Identity origin for sign-in (default: ${accountDefaults.identityUrl})
5634
5635
  --identity-client-id ID Public device client ID registered for this tool
5635
- --passport-api-url URL Skill Passport API origin the token is checked against
5636
+ --profile-api-url URL Profile API origin the token is checked against
5636
5637
  --output PATH Write a sensitive state dump to a new private file
5637
5638
  --dev Serve the repository UI through Vite (source checkout only)
5638
5639
  --help Show this help
@@ -7737,26 +7738,61 @@ function createJourneyPreparation(options) {
7737
7738
  const frozen = state;
7738
7739
  const blockWork = (work, error) => changeJourney(storage, journeyId, "snapshot", (before) => {
7739
7740
  if (before.phase === "paused") throw new ApplicationError("OPERATION_CANCELED");
7741
+ if (before.phase === "sending" || before.phase === "completed") return before;
7740
7742
  return withReadingProgress({
7741
7743
  ...before,
7742
- works: before.works.map((item) => item.id === work.id && item.inputRevision === work.inputRevision ? {
7744
+ works: before.works.map((item) => item.id === work.id && item.inputRevision === work.inputRevision && !item.blockedCodes.includes("PRIVACY_CHANGE_PENDING") ? {
7743
7745
  ...item,
7744
7746
  status: "blocked",
7745
7747
  blockedCodes: blockedCodes(error, safeCode(error))
7746
7748
  } : item)
7747
7749
  });
7748
7750
  }, 100);
7749
- let submittedWorks = 0;
7750
- let works = [];
7751
- let submitted = Promise.withResolvers();
7752
- const submission = () => {
7753
- let done = false;
7754
- return () => {
7755
- if (done) return;
7756
- done = true;
7757
- if (++submittedWorks === works.length) submitted.resolve();
7758
- };
7751
+ const retryLimit = options.retryLimit ?? workRetryDelaysMs.length;
7752
+ const generation = (work) => `${work.id}:${work.inputRevision}`;
7753
+ let serialAdmission = Promise.resolve();
7754
+ const acquireRead = async () => {
7755
+ if (run.pool) return () => {};
7756
+ const previous = serialAdmission;
7757
+ const released = Promise.withResolvers();
7758
+ serialAdmission = released.promise;
7759
+ await previous;
7760
+ return () => released.resolve();
7761
+ };
7762
+ const releaseAdmission = /* @__PURE__ */ new Map();
7763
+ const retryWork = async (work, error, attempt) => {
7764
+ if (blockedCodes(error, safeCode(error)).includes("PRIVACY_CHANGE_PENDING") || work.blockedCodes.includes("PRIVACY_CHANGE_PENDING")) return false;
7765
+ const delay = workRetryDelaysMs[attempt];
7766
+ if (attempt >= retryLimit || delay === void 0) return false;
7767
+ const blocked = await blockWork(work, error);
7768
+ const target = blocked.works.find((item) => item.id === work.id);
7769
+ if (blocked.phase === "sending" || blocked.phase === "completed" || target?.blockedCodes.includes("PRIVACY_CHANGE_PENDING")) return false;
7770
+ releaseAdmission.get(work.id)?.();
7771
+ await (options.retryDelay ?? waitForWorkRetry)(delay, abort.signal);
7772
+ abort.signal.throwIfAborted();
7773
+ let resumed = false;
7774
+ await changeJourney(storage, journeyId, "snapshot", (before) => {
7775
+ resumed = false;
7776
+ const target = before.works.find((item) => item.id === work.id);
7777
+ if (before.phase === "sending" || before.phase === "completed" || before.phase === "paused" || !target || !isSelectedWork(target) || target.inputRevision !== work.inputRevision || target.status !== "blocked" || target.blockedCodes.includes("PRIVACY_CHANGE_PENDING")) return before;
7778
+ resumed = !before.pendingHideId;
7779
+ return withReadingProgress({
7780
+ ...before,
7781
+ privacy: {
7782
+ ...before.privacy,
7783
+ packageApproval: null
7784
+ },
7785
+ works: before.works.map((item) => item.id === work.id ? {
7786
+ ...item,
7787
+ status: resumed ? work.status : "pending",
7788
+ blockedCodes: []
7789
+ } : item)
7790
+ });
7791
+ }, 100);
7792
+ return resumed;
7759
7793
  };
7794
+ const readRetries = /* @__PURE__ */ new Map();
7795
+ const staticRetries = /* @__PURE__ */ new Map();
7760
7796
  /** A failed isolation leaves the Work blocked as before; cancellation and contention escape. */
7761
7797
  const isolateRoots = async (work, error) => {
7762
7798
  try {
@@ -7778,19 +7814,19 @@ function createJourneyPreparation(options) {
7778
7814
  /** Scan generations this run prepared, including those its own isolation started. */
7779
7815
  const prepared = /* @__PURE__ */ new Set();
7780
7816
  /** True when failing roots left the Work, which is then prepared again (ADR 0188). */
7781
- const prepareWorkOnce = async (planned, onSubmitted) => {
7817
+ const prepareWorkAttempt = async (planned, onSubmitted, releaseRead) => {
7782
7818
  abort.signal.throwIfAborted();
7783
7819
  const latest = await storage.current(journeyId) ?? frozen;
7784
7820
  abort.signal.throwIfAborted();
7785
7821
  if (latest.phase === "paused") throw new ApplicationError("OPERATION_CANCELED");
7786
7822
  let work = latest.works.find((item) => item.id === planned.id);
7787
- if (!work || !isSelectedWork(work)) return false;
7823
+ if (!work || !isSelectedWork(work) || latest.phase === "sending" || latest.phase === "completed") return false;
7788
7824
  if (![
7789
7825
  "pending",
7790
7826
  "reading",
7791
7827
  "review"
7792
7828
  ].includes(work.status)) return false;
7793
- prepared.add(`${work.id}:${work.inputRevision}`);
7829
+ prepared.add(generation(work));
7794
7830
  await prepareClassificationMetadata(storage, latest, work, options.processing, abort.signal);
7795
7831
  let failures = collectPreparationFailures(plan.approval.inventory, work.rootSessionIds, {
7796
7832
  journeyId,
@@ -7824,11 +7860,36 @@ function createJourneyPreparation(options) {
7824
7860
  if (await droppedMidScan(planned.id)) return false;
7825
7861
  throw error;
7826
7862
  }
7827
- if (work && await isolateRoots(work, error)) return true;
7863
+ onSubmitted();
7864
+ releaseRead();
7865
+ const attempt = work ? readRetries.get(generation(work)) ?? 0 : 0;
7866
+ if (work && await retryWork(work, error, attempt)) {
7867
+ readRetries.set(generation(work), attempt + 1);
7868
+ return prepareWorkOnce(planned, onSubmitted);
7869
+ }
7870
+ const now = await storage.current(journeyId);
7871
+ if (now?.phase === "sending" || now?.phase === "completed") return false;
7872
+ if (blockedCodes(error, code).includes("PRIVACY_CHANGE_PENDING")) {
7873
+ if (work) await blockWork(work, error);
7874
+ return false;
7875
+ }
7876
+ if (attempt < retryLimit) return false;
7877
+ if (work && await isolateRoots(work, error)) {
7878
+ readRetries.delete(generation(work));
7879
+ return true;
7880
+ }
7828
7881
  if (work) await blockWork(work, error);
7829
7882
  }
7830
7883
  return false;
7831
7884
  };
7885
+ const prepareWorkOnce = async (planned, onSubmitted) => {
7886
+ const releaseRead = await acquireRead();
7887
+ try {
7888
+ return await prepareWorkAttempt(planned, onSubmitted, releaseRead);
7889
+ } finally {
7890
+ releaseRead();
7891
+ }
7892
+ };
7832
7893
  const prepareWork = async (planned, onSubmitted) => {
7833
7894
  for (let attempt = 0; attempt < planned.rootSessionIds.length; attempt++) if (!await prepareWorkOnce(planned, onSubmitted)) return;
7834
7895
  };
@@ -7840,7 +7901,8 @@ function createJourneyPreparation(options) {
7840
7901
  abort.signal.throwIfAborted();
7841
7902
  if (!latest?.consent || latest.phase === "paused" || latest.scope.status !== "confirmed") throw new ApplicationError("OPERATION_CANCELED");
7842
7903
  const work = latest.works.find((item) => item.id === planned.id);
7843
- if (!work || !isSelectedWork(work)) return;
7904
+ if (!work || !isSelectedWork(work) || latest.phase === "sending" || latest.phase === "completed") return;
7905
+ const attempt = staticRetries.get(generation(work)) ?? 0;
7844
7906
  try {
7845
7907
  await inBackgroundStoreLane(() => prepareStaticWork({
7846
7908
  storage,
@@ -7858,38 +7920,63 @@ function createJourneyPreparation(options) {
7858
7920
  if (code === "OPERATION_CANCELED" && await droppedMidScan(work.id)) return;
7859
7921
  if (code === "COORDINATION_BUSY" || code === "OPERATION_CANCELED") throw error;
7860
7922
  options.onFailure(error);
7861
- await blockWork(work, error);
7923
+ if (await retryWork(work, error, attempt)) {
7924
+ staticRetries.set(generation(work), attempt + 1);
7925
+ return staticWork(planned, passSubmitted);
7926
+ }
7927
+ const now = await storage.current(journeyId);
7928
+ if (now?.phase !== "sending" && now?.phase !== "completed" && (attempt >= retryLimit || blockedCodes(error, safeCode(error)).includes("PRIVACY_CHANGE_PENDING"))) await blockWork(work, error);
7862
7929
  }
7863
7930
  };
7864
- let next = 0;
7865
7931
  let fatal;
7866
7932
  const stop = (error) => {
7867
7933
  fatal ??= { error };
7868
7934
  abort.abort(error);
7869
7935
  };
7870
7936
  const statics = [];
7871
- const pass = async (batch) => {
7872
- works = batch;
7873
- next = 0;
7874
- submittedWorks = 0;
7875
- submitted = Promise.withResolvers();
7937
+ const reads = [];
7938
+ const pass = async (works) => {
7939
+ let submittedWorks = 0;
7940
+ const submitted = Promise.withResolvers();
7941
+ const submission = () => {
7942
+ let done = false;
7943
+ return () => {
7944
+ if (done) return;
7945
+ done = true;
7946
+ if (++submittedWorks === works.length) submitted.resolve();
7947
+ };
7948
+ };
7876
7949
  if (!works.length) submitted.resolve();
7877
7950
  const passSubmitted = submitted.promise;
7878
- await Promise.all(Array.from({ length: run.pool ? works.length : Math.min(1, works.length) }, async () => {
7879
- for (let work = works[next++]; work && !fatal; work = works[next++]) {
7880
- const planned = work;
7881
- const onSubmitted = submission();
7951
+ let admission = Promise.resolve();
7952
+ const admissions = [];
7953
+ for (const planned of works) {
7954
+ const previous = admission;
7955
+ const released = Promise.withResolvers();
7956
+ admission = released.promise;
7957
+ admissions.push(admission);
7958
+ releaseAdmission.set(planned.id, () => released.resolve());
7959
+ const onSubmitted = submission();
7960
+ const read = async () => {
7961
+ if (!run.pool) await previous;
7962
+ if (fatal) {
7963
+ onSubmitted();
7964
+ released.resolve();
7965
+ return;
7966
+ }
7882
7967
  try {
7883
7968
  await retryContention(() => prepareWork(planned, onSubmitted), (error) => options.onFailure(error), abort.signal);
7884
7969
  } catch (error) {
7885
7970
  stop(error);
7886
7971
  } finally {
7887
7972
  onSubmitted();
7973
+ released.resolve();
7888
7974
  }
7889
7975
  statics.push(retryContention(() => staticWork(planned, passSubmitted), (error) => options.onFailure(error), abort.signal).catch(stop));
7890
- }
7891
- }));
7892
- while (submittedWorks < works.length) submission()();
7976
+ };
7977
+ reads.push(read());
7978
+ }
7979
+ await Promise.all(admissions);
7893
7980
  };
7894
7981
  /** Selected Works this run has not prepared yet, waiting while grouping continues (E2). */
7895
7982
  const later = async () => {
@@ -7906,11 +7993,15 @@ function createJourneyPreparation(options) {
7906
7993
  await setTimeout$1(laterWorksPollMs, void 0, { signal: abort.signal }).catch(() => abort.signal.throwIfAborted());
7907
7994
  }
7908
7995
  };
7909
- for (let batch = scanWorks; batch.length && !fatal; batch = await later()) {
7910
- if (!run.workers && !run.pool) run = await runWorkers(options.workers);
7911
- await pass(batch);
7996
+ try {
7997
+ for (let batch = scanWorks; batch.length && !fatal; batch = await later()) {
7998
+ if (!run.workers && !run.pool) run = await runWorkers(options.workers);
7999
+ await pass(batch);
8000
+ }
8001
+ } finally {
8002
+ await Promise.all(reads);
8003
+ await Promise.all(statics);
7912
8004
  }
7913
- await Promise.all(statics);
7914
8005
  if (scanWorks.length) options.onTiming?.(journeyId, {
7915
8006
  scope: "preparation",
7916
8007
  phases: { "journey-prepare": Math.round(performance$1.now() - startedAt) },
@@ -7936,6 +8027,11 @@ function createJourneyPreparation(options) {
7936
8027
  }
7937
8028
  };
7938
8029
  }
8030
+ /** Ray, 2026-11-05: two automatic retries per Work, after two then five seconds. */
8031
+ const workRetryDelaysMs = [2e3, 5e3];
8032
+ async function waitForWorkRetry(milliseconds, signal) {
8033
+ await setTimeout$1(milliseconds, void 0, { signal }).catch(() => signal.throwIfAborted());
8034
+ }
7939
8035
  /** How often a run waiting for grouping to publish more Works checks the journey (E2). */
7940
8036
  const laterWorksPollMs = 2e3;
7941
8037
  /**
@@ -8716,7 +8812,7 @@ function createJourneyRenderer(options) {
8716
8812
  return {
8717
8813
  ...current,
8718
8814
  works,
8719
- phase: current.phase === "paused" ? "paused" : current.readingComplete && works.every((item) => !isSelectedWork(item) || item.status === "ready") ? "ready" : current.phase
8815
+ phase: current.phase === "paused" ? "paused" : current.readingComplete && works.every((item) => !isIncludedWork(item) || item.status === "ready") ? "ready" : current.phase
8720
8816
  };
8721
8817
  });
8722
8818
  }
@@ -15145,7 +15241,7 @@ async function compose(options, callbacks, bundles) {
15145
15241
  event: "STATE_SCHEMA_BACKED_UP",
15146
15242
  schema,
15147
15243
  backup: path,
15148
- detail: "State from an older SessPilot release was kept at this backup path and fresh state was started. Earlier journey progress and approvals start over; source logs, completed ZIP files and private sensitive terms are unchanged. Delete the backup once it is no longer needed."
15244
+ detail: "State from an older Tacitt CLI version was kept at this backup path and fresh state was started. Earlier journey progress and approvals start over; source logs, completed ZIP files and private sensitive terms are unchanged. Delete the backup once it is no longer needed."
15149
15245
  })}\n`);
15150
15246
  },
15151
15247
  ...process.env["SESS_PILOT_TEST_STARTUP_TRACE"] === "1" ? { onStartupPhase: traceStartup } : {}
@@ -1,7 +1,7 @@
1
1
  import { ln as sessionSchema } from "./locate-JYtFmKu-.mjs";
2
2
  import { t as createZstdFrameCheck$1 } from "./frame-DGun31Uc.mjs";
3
- import "./src-C1SjCDx0.mjs";
4
- import { a as isRecord } from "./model-CmHypB0p.mjs";
3
+ import "./src--Ln5GHdz.mjs";
4
+ import { a as isRecord } from "./model-C1VzgKLi.mjs";
5
5
  import { constants } from "node:fs";
6
6
  import { z } from "zod";
7
7
  import { lstat, open, stat } from "node:fs/promises";