@pareto4/pp-core 1.13.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +3 -3
- package/README.md +31 -12
- package/agents/pp-code-fixer.md +0 -11
- package/agents/pp-code-reviewer.md +1 -77
- package/agents/pp-debug-session-manager.md +9 -6
- package/agents/pp-executor.md +12 -29
- package/agents/pp-plan-checker.md +4 -4
- package/agents/pp-planner.md +34 -20
- package/agents/pp-vault-reviewer.md +100 -23
- package/agents/pp-verifier.md +1 -3
- package/bin/install.js +10 -3
- package/commands/pp-execute-phase.md +1 -3
- package/commands/pp-ns-manage.md +1 -1
- package/commands/pp-ns-review.md +1 -1
- package/commands/pp-plan-phase.md +1 -2
- package/commands/pp-vault-promote.md +7 -8
- package/commands/pp-vault-review.md +6 -5
- package/commands/pp-verify-work.md +1 -2
- package/gemini-extension.json +1 -1
- package/hooks/dist/pp-check-update.js +0 -0
- package/hooks/dist/pp-cursor-session-start.js +1 -1
- package/hooks/dist/pp-statusline.js +1 -1
- package/hooks/dist/pp-update-banner.js +0 -0
- package/hooks/pp-check-update.js +0 -0
- package/hooks/pp-cursor-session-start.js +1 -1
- package/hooks/pp-statusline.js +1 -1
- package/hooks/pp-update-banner.js +0 -0
- package/package.json +10 -18
- package/pareto-skills/_shared/create-project-board.sh +0 -0
- package/pareto-skills/pp-project-setup/SKILL.md +1 -1
- package/pp-core/bin/check-latest-version.cjs +0 -0
- package/pp-core/bin/detect-build-commands.sh +2 -2
- package/pp-core/bin/lib/capability-activation.cjs +83 -9
- package/pp-core/bin/lib/capability-registry.cjs +201 -229
- package/pp-core/bin/lib/capability-state.cjs +93 -1
- package/pp-core/bin/lib/capability-writer.cjs +3 -3
- package/pp-core/bin/lib/check-command-router.cjs +1906 -1514
- package/pp-core/bin/lib/clusters.cjs +3 -0
- package/pp-core/bin/lib/command-aliases.cjs +0 -35
- package/pp-core/bin/lib/commands.cjs +9 -4
- package/pp-core/bin/lib/compose-bindings.cjs +251 -88
- package/pp-core/bin/lib/config-loader.cjs +7 -103
- package/pp-core/bin/lib/config-schema.cjs +1 -1
- package/pp-core/bin/lib/config.cjs +151 -62
- package/pp-core/bin/lib/decisions.cjs +4 -4
- package/pp-core/bin/lib/discovery-vault-check.cjs +246 -0
- package/pp-core/bin/lib/frontmatter.cjs +1 -38
- package/pp-core/bin/lib/git-base-branch.cjs +11 -12
- package/pp-core/bin/lib/git-provider.cjs +9 -10
- package/pp-core/bin/lib/init-command-router.cjs +5 -8
- package/pp-core/bin/lib/init-contract.cjs +620 -738
- package/pp-core/bin/lib/init-interactive.cjs +62 -4
- package/pp-core/bin/lib/init.cjs +24 -51
- package/pp-core/bin/lib/install-profiles.cjs +1 -1
- package/pp-core/bin/lib/io.cjs +4 -2
- package/pp-core/bin/lib/loop-resolver.cjs +165 -129
- package/pp-core/bin/lib/org-profile.cjs +402 -161
- package/pp-core/bin/lib/package-identity.cjs +3 -3
- package/pp-core/bin/lib/phase-command-router.cjs +1 -29
- package/pp-core/bin/lib/phase-scope.cjs +1 -1
- package/pp-core/bin/lib/phase.cjs +11 -253
- package/pp-core/bin/lib/platform-bindings.cjs +40 -19
- package/pp-core/bin/lib/profile-output.cjs +1 -1
- package/pp-core/bin/lib/shell-command-projection.cjs +104 -1
- package/pp-core/bin/lib/state.cjs +11 -85
- package/pp-core/bin/lib/template.cjs +1 -1
- package/pp-core/bin/lib/vault-command-router.cjs +1682 -477
- package/pp-core/bin/lib/vault-coordinates.cjs +16 -7
- package/pp-core/bin/lib/vault-index.cjs +656 -0
- package/pp-core/bin/lib/vault-seal.cjs +1851 -0
- package/pp-core/bin/lib/vault-standards-promote.cjs +577 -0
- package/pp-core/bin/lib/vault-standards-review.cjs +293 -0
- package/pp-core/bin/lib/vault-standards.cjs +1504 -0
- package/pp-core/bin/lib/vault-trace.cjs +155 -2778
- package/pp-core/bin/lib/vault-update.cjs +10 -59
- package/pp-core/bin/lib/vault.cjs +2570 -950
- package/pp-core/bin/lib/verify.cjs +0 -11
- package/pp-core/bin/portable-timeout.sh +1 -1
- package/pp-core/bin/pp-tools.cjs +157 -54
- package/pp-core/bin/shared/config-defaults.manifest.json +0 -7
- package/pp-core/bin/shared/config-schema.manifest.json +0 -3
- package/pp-core/bin/shared/model-catalog.json +2 -2
- package/pp-core/bin/verify-reapply-patches.cjs +0 -0
- package/pp-core/org-profile.json +26 -0
- package/pp-core/references/autonomous-best-effort.md +8 -7
- package/pp-core/references/loop-hook-dispatch.md +0 -25
- package/pp-core/references/planner-gap-closure.md +0 -1
- package/pp-core/references/planner-tdd.md +0 -1
- package/pp-core/references/planner-vault-standards.md +311 -0
- package/pp-core/references/planning-config.md +0 -8
- package/pp-core/references/tdd.md +0 -1
- package/pp-core/templates/README.md +1 -0
- package/pp-core/templates/VAULT-REVIEW.md +56 -0
- package/pp-core/templates/phase-prompt.md +2 -6
- package/pp-core/workflows/_runtime-launcher.snippet.sh +0 -0
- package/pp-core/workflows/add-tests.md +55 -4
- package/pp-core/workflows/audit-fix.md +63 -2
- package/pp-core/workflows/audit-milestone.md +1 -1
- package/pp-core/workflows/autonomous.md +85 -11
- package/pp-core/workflows/check-todos.md +13 -2
- package/pp-core/workflows/code-review-fix.md +59 -3
- package/pp-core/workflows/code-review.md +10 -57
- package/pp-core/workflows/complete-milestone.md +1 -1
- package/pp-core/workflows/debug.md +54 -4
- package/pp-core/workflows/discovery-sprint/prefill.md +19 -7
- package/pp-core/workflows/discovery-sprint/prototype.md +46 -49
- package/pp-core/workflows/discovery-sprint/session-13-gates.md +2 -0
- package/pp-core/workflows/discovery-sprint/sessions/01-kick-off.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/02-as-is.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/03-to-be.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/04-ux-design.md +20 -24
- package/pp-core/workflows/discovery-sprint/sessions/05-architecture.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/06-security.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/07-identity.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/08-integration.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/09-qa.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/10-infrastructure.md +1 -6
- package/pp-core/workflows/discovery-sprint/sessions/11-roadmap.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/12-delivery-model.md +1 -3
- package/pp-core/workflows/discovery-sprint/sessions/13-wrap-up.md +1 -3
- package/pp-core/workflows/discovery-sprint/templates/context-template.md +1 -1
- package/pp-core/workflows/discovery-sprint/vault-context.md +207 -0
- package/pp-core/workflows/discovery-sprint.md +7 -3
- package/pp-core/workflows/discovery-to-build/steps/architecture-deliverables.md +4 -4
- package/pp-core/workflows/discovery-to-build/templates/pp-handoff.md +43 -1
- package/pp-core/workflows/discovery-to-build.md +10 -2
- package/pp-core/workflows/discuss-phase.md +3 -10
- package/pp-core/workflows/execute-phase/steps/check-query-gate.md +327 -0
- package/pp-core/workflows/execute-phase/steps/client-context-gate.md +3 -2
- package/pp-core/workflows/execute-phase/steps/cross-ai-delegation.md +1 -1
- package/pp-core/workflows/execute-phase/steps/execute-pre-dispatch.md +78 -0
- package/pp-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
- package/pp-core/workflows/execute-phase/steps/post-merge-gate.md +6 -8
- package/pp-core/workflows/execute-phase/steps/vault-fetch.md +115 -14
- package/pp-core/workflows/execute-phase/steps/vault-load-gate.md +219 -20
- package/pp-core/workflows/execute-phase/steps/verify-post-gate.md +147 -0
- package/pp-core/workflows/execute-phase.md +152 -128
- package/pp-core/workflows/execute-plan.md +54 -6
- package/pp-core/workflows/fast.md +53 -4
- package/pp-core/workflows/help/modes/full.md +3 -3
- package/pp-core/workflows/init/steps/client-context-capture.md +101 -0
- package/pp-core/workflows/init/steps/gitlab-provisioning.md +130 -0
- package/pp-core/workflows/init/steps/project-md-deferral-narration.md +66 -0
- package/pp-core/workflows/init/steps/reachability-outcome.md +70 -0
- package/pp-core/workflows/init.md +232 -272
- package/pp-core/workflows/new-project.md +31 -23
- package/pp-core/workflows/plan-phase.md +98 -45
- package/pp-core/workflows/quick.md +117 -3
- package/pp-core/workflows/secure-phase.md +1 -1
- package/pp-core/workflows/ship.md +57 -28
- package/pp-core/workflows/undo.md +1 -1
- package/pp-core/workflows/update.md +3 -3
- package/pp-core/workflows/validate-phase.md +58 -3
- package/pp-core/workflows/vault-review.md +161 -23
- package/pp-core/workflows/vault-write-back.md +73 -110
- package/pp-core/workflows/verify-work.md +12 -14
- package/scripts/changeset/cli.cjs +6 -5
- package/scripts/changeset/lint.cjs +0 -0
- package/scripts/changeset/new.cjs +33 -50
- package/scripts/dev-env.cjs +25 -85
- package/scripts/gen-capability-registry.cjs +120 -13
- package/scripts/lib/allowlist-ratchet.cjs +1 -103
- package/scripts/lint-allow-test-rule-refs.allowlist.json +0 -2
- package/scripts/lint-docs-required.cjs +0 -0
- package/scripts/lint-pr-check-project-dir.cjs +1 -3
- package/scripts/lint-test-file-count.allowlist.json +3 -19
- package/scripts/lint-test-file-count.cjs +5 -6
- package/scripts/prompt-injection-scan.sh +19 -17
- package/scripts/release-channel.cjs +0 -0
- package/scripts/sync-manifest-versions.cjs +5 -4
- package/scripts/sync-rulesets.sh +1 -1
- package/scripts/update-size-baseline.cjs +30 -274
- package/scripts/verify-opengsd-sweep.cjs +3 -5
- package/scripts/workflow-size.cjs +9 -61
- package/pp-core/bin/lib/dispatch-plan.cjs +0 -483
- package/pp-core/bin/lib/install-run.cjs +0 -536
- package/pp-core/bin/lib/loop-gates.cjs +0 -213
- package/pp-core/bin/lib/phase-manifest.cjs +0 -527
- package/pp-core/bin/lib/phase-tier.cjs +0 -480
- package/pp-core/bin/lib/plan-graph.cjs +0 -368
- package/pp-core/bin/lib/practices-review-check.cjs +0 -938
- package/pp-core/bin/lib/vault-audit.cjs +0 -2070
- package/pp-core/bin/lib/vault-practices.cjs +0 -1990
- package/pp-core/bin/lib/vault-review.cjs +0 -2359
- package/pp-core/bin/lib/vault-write-back.cjs +0 -877
- package/pp-core/references/executor-vault-trace.md +0 -47
- package/pp-core/references/planner-plan-graph.md +0 -66
- package/pp-core/references/planner-vault-practices.md +0 -112
- package/pp-core/templates/practices/README.md +0 -251
- package/pp-core/templates/practices/error-handling.md +0 -18
- package/pp-core/templates/practices/minimal-comments.md +0 -14
- package/pp-core/templates/practices/naming-convention.md +0 -18
- package/pp-core/templates/practices/practice-template.md +0 -23
- package/pp-core/workflows/discovery-sprint/vault-fetch.md +0 -37
- package/pp-core/workflows/execute-phase/steps/checkpoint-handling.md +0 -45
- package/pp-core/workflows/execute-phase/steps/install-run.md +0 -29
- package/pp-core/workflows/execute-phase/steps/phase-close-rebaseline.md +0 -23
- package/pp-core/workflows/execute-phase/steps/serial-group-dispatch.md +0 -73
- package/pp-core/workflows/execute-phase/steps/vault-door-gate.md +0 -19
- package/pp-core/workflows/plan-phase/steps/phase-tier.md +0 -43
- package/scripts/lib/size-budget.cjs +0 -311
- package/scripts/lint-neutrality-names.cjs +0 -694
- package/scripts/lint-org-coordinates.allowlist.json +0 -35
- package/scripts/lint-org-coordinates.cjs +0 -426
|
@@ -118,15 +118,74 @@ function renderComposeConfirm(prompter, info) {
|
|
|
118
118
|
async function runInitInteractive(cwd, prompter, opts = {}) {
|
|
119
119
|
const sessionOpts = { offline: opts.offline === true, _globalRoot: opts._globalRoot };
|
|
120
120
|
let wroteBinding = false;
|
|
121
|
+
// PBI 74299: answers the session filled in itself are shown once each, as
|
|
122
|
+
// soon as they are decided, so the operator sees every value before the
|
|
123
|
+
// compose confirmation.
|
|
124
|
+
const shownAutoAnswers = new Set();
|
|
121
125
|
for (let steps = 1; steps <= MAX_SESSION_STEPS; steps++) {
|
|
122
126
|
const state = (0, init_contract_cjs_1.initSessionNext)(cwd, sessionOpts);
|
|
123
127
|
if (state.error !== undefined) {
|
|
124
128
|
prompter.print(`Error: ${state.message ?? state.error}`);
|
|
125
129
|
return { ok: false, wroteBinding, steps, violations: [] };
|
|
126
130
|
}
|
|
131
|
+
for (const auto of state.autoAnswered ?? []) {
|
|
132
|
+
if (shownAutoAnswers.has(auto.id))
|
|
133
|
+
continue;
|
|
134
|
+
shownAutoAnswers.add(auto.id);
|
|
135
|
+
const why = auto.source === 'derived' ? 'derived' : 'set by the org profile';
|
|
136
|
+
prompter.print(` ${auto.id} = ${auto.value} (${why})`);
|
|
137
|
+
}
|
|
127
138
|
if (state.done) {
|
|
128
139
|
if (wroteBinding) {
|
|
129
|
-
|
|
140
|
+
// OD-1: the done line names the capability the session just armed and
|
|
141
|
+
// the step that is now live, so an operator is not left to discover
|
|
142
|
+
// either from the config file.
|
|
143
|
+
//
|
|
144
|
+
// 07-09 (WR-07): a READING, not a claim. The arming write happens
|
|
145
|
+
// only on an ABSENT key, so an operator's explicit `false` — and a
|
|
146
|
+
// hand-edited non-boolean — are still there when the session ends.
|
|
147
|
+
// Printing the armed line over either of those would make the last
|
|
148
|
+
// line `pp-tools init` prints contradict the config file it just
|
|
149
|
+
// finished writing, which is precisely the
|
|
150
|
+
// tool-reports-a-state-that-isn't-real failure this phase exists to
|
|
151
|
+
// end.
|
|
152
|
+
const vaultState = (0, init_contract_cjs_1.readVaultEnabledState)(cwd).state;
|
|
153
|
+
if (vaultState === 'off') {
|
|
154
|
+
prompter.print('Done — .platform-bindings.json was composed and written; vault.enabled was left at false ' +
|
|
155
|
+
'as this project set it, so the vault capability stays off and /pp-init Step 2.6 stays ' +
|
|
156
|
+
'inert (arm it with pp-tools config-set vault.enabled true).');
|
|
157
|
+
}
|
|
158
|
+
else if (vaultState === 'malformed') {
|
|
159
|
+
prompter.print('Done — .platform-bindings.json was composed and written; vault.enabled holds a non-boolean ' +
|
|
160
|
+
'value and was left untouched — pp-tools query init-contract --verify reports it as ' +
|
|
161
|
+
'INIT_VAULT_ENABLED_MALFORMED; store the boolean with pp-tools config-set vault.enabled true.');
|
|
162
|
+
}
|
|
163
|
+
else if (vaultState === 'armed') {
|
|
164
|
+
// Quick 260916-s5n: vault.required is named only when the READING
|
|
165
|
+
// says armed, by the same rule — an explicit false is the project's
|
|
166
|
+
// choice and the last line printed must not contradict it.
|
|
167
|
+
const requiredArmed = (0, init_contract_cjs_1.readVaultRequiredState)(cwd).state === 'armed';
|
|
168
|
+
// Built as a head plus clauses carrying no terminator of their own,
|
|
169
|
+
// with exactly one full stop appended at the end.
|
|
170
|
+
const head = 'Done — .platform-bindings.json was composed and written; vault.enabled is now true ' +
|
|
171
|
+
'(the vault capability is armed — /pp-init Step 2.6 probes reachability next)';
|
|
172
|
+
// 15-REVIEW WR-09: the clause names what is recorded and checked.
|
|
173
|
+
const standardsClause = '; each plan records which client standards documents governed it ' +
|
|
174
|
+
'(<vault_standards>), checked by the vault.trace gate';
|
|
175
|
+
const requiredClause = requiredArmed
|
|
176
|
+
? '; vault.required is true, so a client vault miss, a failed fetch or an unwritable vault summary ' +
|
|
177
|
+
'stops the build at plan:pre and execute:pre'
|
|
178
|
+
: '';
|
|
179
|
+
prompter.print(head + standardsClause + requiredClause + '.');
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// 'absent' — unreachable after an approved compose (the arming
|
|
183
|
+
// write fires on exactly this state), kept defensive for the case
|
|
184
|
+
// where that write itself failed. It says only what is certain:
|
|
185
|
+
// the binding was written, and it does NOT claim the capability is
|
|
186
|
+
// on, because the key is not there to say so.
|
|
187
|
+
prompter.print('Done — .platform-bindings.json was composed and written.');
|
|
188
|
+
}
|
|
130
189
|
}
|
|
131
190
|
else if (typeof state.info === 'string') {
|
|
132
191
|
prompter.print(state.info);
|
|
@@ -168,9 +227,8 @@ async function runInitInteractive(cwd, prompter, opts = {}) {
|
|
|
168
227
|
preselectedLabel: state.preselectedLabel,
|
|
169
228
|
optionalAnswer: state.optionalAnswer,
|
|
170
229
|
});
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
// verbatim, which owns the none/blank decline.
|
|
230
|
+
// UAT-13-F2: the driver has no default-acceptance path, on purpose — the
|
|
231
|
+
// answer goes to initSessionAnswer verbatim, which owns the none/blank decline.
|
|
174
232
|
const result = (0, init_contract_cjs_1.initSessionAnswer)(cwd, stepId, answer, sessionOpts);
|
|
175
233
|
if (result.ok) {
|
|
176
234
|
if (stepId === 'compose_confirm') {
|
package/pp-core/bin/lib/init.cjs
CHANGED
|
@@ -32,7 +32,6 @@ const worktreeSafety = require("./worktree-safety.cjs");
|
|
|
32
32
|
// eslint-disable-next-line @typescript-eslint/no-require-imports -- planning-workspace.cjs is an export= CommonJS module
|
|
33
33
|
const planningWorkspace = require("./planning-workspace.cjs");
|
|
34
34
|
const secrets_cjs_1 = require("./secrets.cjs");
|
|
35
|
-
const phase_tier_cjs_1 = require("./phase-tier.cjs");
|
|
36
35
|
// eslint-disable-next-line @typescript-eslint/no-require-imports -- plan-scan.cjs is an export= CommonJS module
|
|
37
36
|
const scanPhasePlans = require("./plan-scan.cjs");
|
|
38
37
|
const state_document_cjs_1 = require("./state-document.cjs");
|
|
@@ -189,7 +188,8 @@ function getInitGitState(cwd) {
|
|
|
189
188
|
* Quick 261007-jkl, D2 (todo "init execute-phase returns null phase_dir for an
|
|
190
189
|
* archived phase") put the "is this archived match the current milestone's?"
|
|
191
190
|
* compare HERE, for these four verbs only; every other consumer of the raw
|
|
192
|
-
* locator kept the archive fall-through with no compare
|
|
191
|
+
* locator kept the archive fall-through with no compare (PBI 75323, quick
|
|
192
|
+
* 261009-gvf). The decision now lives in ONE owner, src/phase-scope.cts, which
|
|
193
193
|
* every consumer shares: a phase archived in the CURRENT milestone keeps its
|
|
194
194
|
* match, directory and artifacts; a PRIOR milestone's archived phase whose
|
|
195
195
|
* number the current ROADMAP reuses is dropped (the pins in tests/init.test.cjs
|
|
@@ -222,26 +222,6 @@ function resolvePhaseForInit(cwd, phase) {
|
|
|
222
222
|
}
|
|
223
223
|
return { phaseInfo, roadmapPhase };
|
|
224
224
|
}
|
|
225
|
-
/**
|
|
226
|
-
* The phase's resolved ceremony tier for an init payload (src/phase-tier.cts).
|
|
227
|
-
* Init's gate booleans (`research_enabled`, `plan_checker_enabled`,
|
|
228
|
-
* `verifier_enabled`, …) are read from this, never from raw config, so a
|
|
229
|
-
* workflow that reads init reads the tier-resolved set.
|
|
230
|
-
*/
|
|
231
|
-
function initPhaseTier(cwd, phase, options) {
|
|
232
|
-
const flag = options['tier'];
|
|
233
|
-
let cli = null;
|
|
234
|
-
if (typeof flag === 'string') {
|
|
235
|
-
const v = flag.trim().toLowerCase();
|
|
236
|
-
if (!(0, phase_tier_cjs_1.isPhaseTier)(v))
|
|
237
|
-
error(`--tier needs one of ${phase_tier_cjs_1.PHASE_TIERS.join(', ')}`);
|
|
238
|
-
cli = v;
|
|
239
|
-
}
|
|
240
|
-
return (0, phase_tier_cjs_1.resolvePhaseTierForProject)(cwd, phase, cli);
|
|
241
|
-
}
|
|
242
|
-
function phaseTierSummary(t) {
|
|
243
|
-
return { tier: t.tier, source: t.source, gates: t.gates, suppressed: t.suppressed };
|
|
244
|
-
}
|
|
245
225
|
function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
|
|
246
226
|
if (!phase) {
|
|
247
227
|
error('phase required for init execute-phase');
|
|
@@ -255,7 +235,6 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
|
|
|
255
235
|
: null;
|
|
256
236
|
const phase_req_ids = reqExtracted && reqExtracted !== 'TBD' ? reqExtracted : null;
|
|
257
237
|
const wf = (config.workflow ?? {});
|
|
258
|
-
const tier = initPhaseTier(cwd, phase, options);
|
|
259
238
|
const result = {
|
|
260
239
|
executor_model: resolveModelInternal(cwd, 'pp-executor'),
|
|
261
240
|
verifier_model: resolveModelInternal(cwd, 'pp-verifier'),
|
|
@@ -267,12 +246,7 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
|
|
|
267
246
|
branching_strategy: config.branching_strategy,
|
|
268
247
|
phase_branch_template: config.phase_branch_template,
|
|
269
248
|
milestone_branch_template: config.milestone_branch_template,
|
|
270
|
-
verifier_enabled:
|
|
271
|
-
code_review_enabled: tier.gates.code_review,
|
|
272
|
-
security_enforcement_enabled: tier.gates.security_enforcement,
|
|
273
|
-
nyquist_validation_enabled: tier.gates.nyquist_validation,
|
|
274
|
-
install_verification_enabled: tier.gates.install_verification,
|
|
275
|
-
phase_tier: phaseTierSummary(tier),
|
|
249
|
+
verifier_enabled: config.verifier,
|
|
276
250
|
phase_found: !!phaseInfo,
|
|
277
251
|
phase_dir: phaseInfo?.['directory'] || null,
|
|
278
252
|
phase_number: phaseInfo?.['phase_number'] || null,
|
|
@@ -357,22 +331,15 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
|
|
|
357
331
|
assertValidGranularityOverride(granularityOverride, error);
|
|
358
332
|
const granularity = resolveGranularityInternal(cwd, 'planning', granularityOverride || undefined);
|
|
359
333
|
const wf = (config.workflow ?? {});
|
|
360
|
-
const tier = initPhaseTier(cwd, phase, options);
|
|
361
334
|
const result = {
|
|
362
335
|
researcher_model: resolveModelInternal(cwd, 'pp-phase-researcher'),
|
|
363
336
|
planner_model: resolveModelInternal(cwd, 'pp-planner'),
|
|
364
337
|
checker_model: resolveModelInternal(cwd, 'pp-plan-checker'),
|
|
365
338
|
tdd_mode: options['tdd'] || Boolean(wf['tdd_mode']) || false,
|
|
366
339
|
granularity,
|
|
367
|
-
research_enabled:
|
|
368
|
-
plan_checker_enabled:
|
|
369
|
-
|
|
370
|
-
nyquist_validation_enabled: tier.gates.nyquist_validation,
|
|
371
|
-
pattern_mapper_enabled: tier.gates.pattern_mapper,
|
|
372
|
-
post_planning_gaps_enabled: tier.gates.post_planning_gaps,
|
|
373
|
-
security_enforcement_enabled: tier.gates.security_enforcement,
|
|
374
|
-
plan_bounce_enabled: tier.gates.plan_bounce,
|
|
375
|
-
phase_tier: phaseTierSummary(tier),
|
|
340
|
+
research_enabled: wf['research'],
|
|
341
|
+
plan_checker_enabled: config.plan_checker,
|
|
342
|
+
nyquist_validation_enabled: wf['nyquist_validation'],
|
|
376
343
|
commit_docs: config.commit_docs,
|
|
377
344
|
text_mode: config.text_mode,
|
|
378
345
|
auto_advance: !!(config.auto_advance),
|
|
@@ -603,10 +570,14 @@ function cmdInitNewMilestone(cwd, raw) {
|
|
|
603
570
|
};
|
|
604
571
|
output(withProjectRoot(cwd, result), raw);
|
|
605
572
|
}
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
573
|
+
/**
|
|
574
|
+
* The quick-task id for a moment: `yymmdd` + `-` + the two-second block of the
|
|
575
|
+
* local day in base 36, padded to three (`261011-8yt`). A pure function of
|
|
576
|
+
* `now`, extracted verbatim from `cmdInitQuick` (16-05, D-29) so the plan-id
|
|
577
|
+
* owner (`SCAFFOLD_PLAN_ID_RE`, src/vault-standards.cts) is tested over ids the
|
|
578
|
+
* engine itself builds, all-digit and lettered, rather than over hand-typed ones.
|
|
579
|
+
*/
|
|
580
|
+
function buildQuickId(now) {
|
|
610
581
|
const yy = String(now.getFullYear()).slice(-2);
|
|
611
582
|
const mm = String(now.getMonth() + 1).padStart(2, '0');
|
|
612
583
|
const dd = String(now.getDate()).padStart(2, '0');
|
|
@@ -614,7 +585,13 @@ function cmdInitQuick(cwd, description, raw) {
|
|
|
614
585
|
const secondsSinceMidnight = now.getHours() * 3600 + now.getMinutes() * 60 + now.getSeconds();
|
|
615
586
|
const timeBlocks = Math.floor(secondsSinceMidnight / 2);
|
|
616
587
|
const timeEncoded = timeBlocks.toString(36).padStart(3, '0');
|
|
617
|
-
|
|
588
|
+
return dateStr + '-' + timeEncoded;
|
|
589
|
+
}
|
|
590
|
+
function cmdInitQuick(cwd, description, raw) {
|
|
591
|
+
const config = loadConfig(cwd);
|
|
592
|
+
const now = new Date();
|
|
593
|
+
const slug = description ? generateSlugInternal(description)?.substring(0, 40) : null;
|
|
594
|
+
const quickId = buildQuickId(now);
|
|
618
595
|
const branchSlug = slug || 'quick';
|
|
619
596
|
const quickBranchName = config.quick_branch_template
|
|
620
597
|
? config.quick_branch_template
|
|
@@ -676,22 +653,16 @@ function cmdInitResume(cwd, raw) {
|
|
|
676
653
|
};
|
|
677
654
|
output(withProjectRoot(cwd, result), raw);
|
|
678
655
|
}
|
|
679
|
-
function cmdInitVerifyWork(cwd, phase, raw
|
|
656
|
+
function cmdInitVerifyWork(cwd, phase, raw) {
|
|
680
657
|
if (!phase) {
|
|
681
658
|
error('phase required for init verify-work');
|
|
682
659
|
}
|
|
683
660
|
const config = loadConfig(cwd);
|
|
684
661
|
const { phaseInfo } = resolvePhaseForInit(cwd, phase);
|
|
685
|
-
const tier = initPhaseTier(cwd, phase, options);
|
|
686
662
|
const result = {
|
|
687
663
|
planner_model: resolveModelInternal(cwd, 'pp-planner'),
|
|
688
664
|
checker_model: resolveModelInternal(cwd, 'pp-plan-checker'),
|
|
689
665
|
commit_docs: config.commit_docs,
|
|
690
|
-
plan_checker_enabled: tier.gates.plan_check,
|
|
691
|
-
plan_check_passes: tier.gates.plan_check_passes,
|
|
692
|
-
security_enforcement_enabled: tier.gates.security_enforcement,
|
|
693
|
-
nyquist_validation_enabled: tier.gates.nyquist_validation,
|
|
694
|
-
phase_tier: phaseTierSummary(tier),
|
|
695
666
|
phase_found: !!phaseInfo,
|
|
696
667
|
phase_dir: phaseInfo?.['directory'] || null,
|
|
697
668
|
phase_number: phaseInfo?.['phase_number'] || null,
|
|
@@ -1882,6 +1853,8 @@ module.exports = {
|
|
|
1882
1853
|
cmdInitNewProject,
|
|
1883
1854
|
cmdInitNewMilestone,
|
|
1884
1855
|
cmdInitQuick,
|
|
1856
|
+
// 16-05 (D-29): the pure quick-id builder, so the plan-id owner is tested over real ids.
|
|
1857
|
+
buildQuickId,
|
|
1885
1858
|
cmdInitIngestDocs,
|
|
1886
1859
|
cmdInitResume,
|
|
1887
1860
|
cmdInitVerifyWork,
|
|
@@ -27,7 +27,7 @@ const shell_command_projection_cjs_1 = require("./shell-command-projection.cjs")
|
|
|
27
27
|
*/
|
|
28
28
|
const PROFILES = Object.freeze({
|
|
29
29
|
core: Object.freeze([
|
|
30
|
-
// init is the front door every installer/hook/no-project message
|
|
30
|
+
// PBI 75232: init is the front door every installer/hook/no-project message
|
|
31
31
|
// names, so it ships in every profile — a minimal install must not print a
|
|
32
32
|
// start command it did not install.
|
|
33
33
|
'init',
|
package/pp-core/bin/lib/io.cjs
CHANGED
|
@@ -180,9 +180,9 @@ const ERROR_REASON = Object.freeze({
|
|
|
180
180
|
PLATFORM_BINDINGS_PARSE_FAILED: 'platform_bindings_parse_failed',
|
|
181
181
|
// init (Phase 34-09 gap closure: `pp-tools init` interactive command)
|
|
182
182
|
INIT_NON_INTERACTIVE: 'init_non_interactive',
|
|
183
|
-
// vault
|
|
183
|
+
// vault promote (a standards document into the client vault)
|
|
184
184
|
VAULT_PROMOTE_DISABLED: 'vault_promote_disabled',
|
|
185
|
-
|
|
185
|
+
VAULT_PROMOTE_INVALID_DOCUMENT: 'vault_promote_invalid_document',
|
|
186
186
|
VAULT_PROMOTE_SECRET_DETECTED: 'vault_promote_secret_detected',
|
|
187
187
|
VAULT_PROMOTE_TARGET_REFUSED: 'vault_promote_target_refused',
|
|
188
188
|
VAULT_PROMOTE_CONCURRENT_EDIT: 'vault_promote_concurrent_edit',
|
|
@@ -201,6 +201,8 @@ const ERROR_REASON = Object.freeze({
|
|
|
201
201
|
DISCOVERY_ELEMENT_SWEEP_FAILED: 'discovery_element_sweep_failed',
|
|
202
202
|
// discovery scope re-baselining (discovery-v2 Phase 5: D-72/D-73 gate)
|
|
203
203
|
DISCOVERY_REBASELINE_CHECK_FAILED: 'discovery_rebaseline_check_failed',
|
|
204
|
+
// discovery vault context record (PBI 75336)
|
|
205
|
+
DISCOVERY_VAULT_CHECK_FAILED: 'discovery_vault_check_failed',
|
|
204
206
|
// generic
|
|
205
207
|
USAGE: 'usage',
|
|
206
208
|
UNKNOWN: 'unknown',
|