xytara 2.1.0 → 2.3.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/.env.example +5 -1
- package/ADAPTER_START_HERE.md +56 -0
- package/CARRIED_HANDOFF_DEMO.md +60 -0
- package/EXAMPLE_PATHS.md +53 -0
- package/OPERATIONS_RUNBOOK.md +65 -0
- package/OPERATOR_START_HERE.md +63 -0
- package/PARTNER_READY_PATH.md +71 -0
- package/PROGRAM_COMPLETE_RELEASE.md +63 -0
- package/PROGRAM_STATUS.md +57 -0
- package/PUBLIC_DEMO_SCRIPT.md +78 -0
- package/PUBLISH_PLAN.md +7 -5
- package/README.md +66 -0
- package/RELEASE_CHECKLIST.md +8 -2
- package/RELEASE_NOTES.md +19 -8
- package/START_HERE.md +32 -0
- package/SUPABASE_RUNTIME_STATE_SETUP.md +61 -0
- package/WHY_XYTARA_XOONYA.md +63 -0
- package/adapters/examples/minimal-third-party-execution-adapter.js +61 -0
- package/adapters/examples/minimal-third-party-execution-adapter.manifest.json +79 -0
- package/adapters/examples/minimal-third-party-execution-registration.record.json +26 -0
- package/adapters/examples/minimal-third-party-execution.certification-pack.json +22 -0
- package/adapters/examples/minimal-third-party-execution.submission-bundle.json +126 -0
- package/bin/xytara-release.js +1251 -1
- package/examples/adapter_review_walkthrough.js +53 -0
- package/examples/export_carried_handoff.js +80 -0
- package/examples/funded_runtime_walkthrough.js +70 -0
- package/examples/partner_launch_walkthrough.js +43 -0
- package/examples/quickstart.js +3255 -0
- package/index.js +7 -1
- package/lib/adapter_pack.js +118 -0
- package/lib/adapter_partner_pack.js +89 -0
- package/lib/adapter_promotion_pack.js +89 -0
- package/lib/commerce_client.js +38 -0
- package/lib/commerce_economics.js +304 -0
- package/lib/operator_intelligence.js +90 -0
- package/lib/outreach_copy_pack.js +51 -0
- package/lib/outreach_message_pack.js +71 -0
- package/lib/outreach_target_pack.js +60 -0
- package/lib/partner_intelligence.js +105 -0
- package/lib/phase_10_closeout_pack.js +45 -0
- package/lib/phase_10_completion_pack.js +76 -0
- package/lib/phase_10_decision_record_pack.js +54 -0
- package/lib/phase_10_decision_resolution_pack.js +53 -0
- package/lib/phase_10_demand_signal_adapters_runtime_pack.js +74 -0
- package/lib/phase_10_ecosystem_backlog_triage_runtime_pack.js +74 -0
- package/lib/phase_10_freeze_baseline_pack.js +67 -0
- package/lib/phase_10_freeze_review_pack.js +64 -0
- package/lib/phase_10_gate_pack.js +57 -0
- package/lib/phase_10_long_tail_continuity_pack.js +80 -0
- package/lib/phase_10_long_tail_ecosystem_pack.js +66 -0
- package/lib/phase_10_niche_extension_registry_runtime_pack.js +74 -0
- package/lib/phase_1_claude_mcp_pack.js +60 -0
- package/lib/phase_1_claude_mcp_runtime_pack.js +52 -0
- package/lib/phase_1_ecosystem_pack.js +67 -0
- package/lib/phase_1_openai_codex_pack.js +60 -0
- package/lib/phase_1_openai_codex_runtime_pack.js +52 -0
- package/lib/phase_2_base_runtime_pack.js +71 -0
- package/lib/phase_2_base_usdc_runtime_pack.js +72 -0
- package/lib/phase_2_closeout_pack.js +65 -0
- package/lib/phase_2_completion_pack.js +113 -0
- package/lib/phase_2_decision_record_pack.js +66 -0
- package/lib/phase_2_decision_resolution_pack.js +69 -0
- package/lib/phase_2_eth_runtime_pack.js +70 -0
- package/lib/phase_2_evm_base_runtime_pack.js +73 -0
- package/lib/phase_2_evm_runtime_pack.js +71 -0
- package/lib/phase_2_flip_preview_pack.js +60 -0
- package/lib/phase_2_freeze_review_pack.js +99 -0
- package/lib/phase_2_gate_pack.js +77 -0
- package/lib/phase_2_payment_rails_pack.js +71 -0
- package/lib/phase_2_usdc_runtime_pack.js +71 -0
- package/lib/phase_3_brc_runtime_pack.js +81 -0
- package/lib/phase_3_bsv_teranode_runtime_pack.js +83 -0
- package/lib/phase_3_closeout_pack.js +62 -0
- package/lib/phase_3_completion_pack.js +94 -0
- package/lib/phase_3_decision_record_pack.js +64 -0
- package/lib/phase_3_decision_resolution_pack.js +69 -0
- package/lib/phase_3_freeze_baseline_pack.js +67 -0
- package/lib/phase_3_freeze_review_pack.js +80 -0
- package/lib/phase_3_gate_pack.js +76 -0
- package/lib/phase_3_metanet_runtime_pack.js +81 -0
- package/lib/phase_3_native_bsv_pack.js +91 -0
- package/lib/phase_3_native_continuity_pack.js +82 -0
- package/lib/phase_4_attestation_runtime_pack.js +75 -0
- package/lib/phase_4_closeout_pack.js +45 -0
- package/lib/phase_4_completion_pack.js +94 -0
- package/lib/phase_4_decision_record_pack.js +54 -0
- package/lib/phase_4_decision_resolution_pack.js +45 -0
- package/lib/phase_4_erc8004_runtime_pack.js +76 -0
- package/lib/phase_4_freeze_baseline_pack.js +67 -0
- package/lib/phase_4_freeze_review_pack.js +68 -0
- package/lib/phase_4_gate_pack.js +58 -0
- package/lib/phase_4_identity_registry_runtime_pack.js +75 -0
- package/lib/phase_4_identity_trust_pack.js +73 -0
- package/lib/phase_4_trust_continuity_pack.js +86 -0
- package/lib/phase_5_antelope_runtime_pack.js +76 -0
- package/lib/phase_5_closeout_pack.js +44 -0
- package/lib/phase_5_completion_pack.js +82 -0
- package/lib/phase_5_decision_record_pack.js +54 -0
- package/lib/phase_5_decision_resolution_pack.js +45 -0
- package/lib/phase_5_freeze_baseline_pack.js +67 -0
- package/lib/phase_5_freeze_review_pack.js +68 -0
- package/lib/phase_5_gate_pack.js +58 -0
- package/lib/phase_5_major_rails_continuity_pack.js +86 -0
- package/lib/phase_5_major_rails_pack.js +74 -0
- package/lib/phase_5_proton_xpr_runtime_pack.js +76 -0
- package/lib/phase_5_solana_runtime_pack.js +76 -0
- package/lib/phase_6_autogen_runtime_pack.js +72 -0
- package/lib/phase_6_closeout_pack.js +46 -0
- package/lib/phase_6_completion_pack.js +77 -0
- package/lib/phase_6_decision_record_pack.js +54 -0
- package/lib/phase_6_decision_resolution_pack.js +53 -0
- package/lib/phase_6_framework_continuity_pack.js +81 -0
- package/lib/phase_6_framework_runtime_pack.js +68 -0
- package/lib/phase_6_freeze_baseline_pack.js +68 -0
- package/lib/phase_6_freeze_review_pack.js +65 -0
- package/lib/phase_6_gate_pack.js +59 -0
- package/lib/phase_6_langchain_runtime_pack.js +72 -0
- package/lib/phase_6_langgraph_runtime_pack.js +72 -0
- package/lib/phase_6_semantic_kernel_runtime_pack.js +72 -0
- package/lib/phase_7_closeout_pack.js +45 -0
- package/lib/phase_7_completion_pack.js +85 -0
- package/lib/phase_7_decision_record_pack.js +53 -0
- package/lib/phase_7_decision_resolution_pack.js +53 -0
- package/lib/phase_7_event_system_continuity_pack.js +89 -0
- package/lib/phase_7_event_system_pack.js +76 -0
- package/lib/phase_7_freeze_baseline_pack.js +74 -0
- package/lib/phase_7_freeze_review_pack.js +65 -0
- package/lib/phase_7_gate_pack.js +58 -0
- package/lib/phase_7_kafka_runtime_pack.js +74 -0
- package/lib/phase_7_mqtt_runtime_pack.js +74 -0
- package/lib/phase_7_nats_runtime_pack.js +74 -0
- package/lib/phase_7_webhook_event_bus_runtime_pack.js +74 -0
- package/lib/phase_8_closeout_pack.js +46 -0
- package/lib/phase_8_completion_pack.js +82 -0
- package/lib/phase_8_decision_record_pack.js +54 -0
- package/lib/phase_8_decision_resolution_pack.js +53 -0
- package/lib/phase_8_external_receipt_import_runtime_pack.js +74 -0
- package/lib/phase_8_external_result_import_runtime_pack.js +74 -0
- package/lib/phase_8_freeze_baseline_pack.js +71 -0
- package/lib/phase_8_freeze_review_pack.js +64 -0
- package/lib/phase_8_gate_pack.js +58 -0
- package/lib/phase_8_proof_bridge_continuity_pack.js +86 -0
- package/lib/phase_8_proof_bridges_pack.js +72 -0
- package/lib/phase_8_proof_bundle_normalization_runtime_pack.js +74 -0
- package/lib/phase_9_closeout_pack.js +46 -0
- package/lib/phase_9_completion_pack.js +82 -0
- package/lib/phase_9_custody_refs_runtime_pack.js +74 -0
- package/lib/phase_9_decision_record_pack.js +54 -0
- package/lib/phase_9_decision_resolution_pack.js +53 -0
- package/lib/phase_9_freeze_baseline_pack.js +71 -0
- package/lib/phase_9_freeze_review_pack.js +64 -0
- package/lib/phase_9_gate_pack.js +58 -0
- package/lib/phase_9_operator_accounting_bridges_runtime_pack.js +74 -0
- package/lib/phase_9_treasury_connectivity_pack.js +72 -0
- package/lib/phase_9_treasury_continuity_pack.js +86 -0
- package/lib/phase_9_treasury_destinations_runtime_pack.js +74 -0
- package/lib/phase_program_pack.js +120 -0
- package/lib/release_center.js +970 -0
- package/lib/release_history.js +1 -1
- package/lib/runtime_state_store.js +212 -27
- package/lib/soft_launch_pack.js +78 -0
- package/package.json +13 -1
- package/server.js +2110 -235
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
const { buildAdoptionPack } = require("./release_pack");
|
|
5
|
+
const { buildAdapterPartnerPack } = require("./adapter_partner_pack");
|
|
6
|
+
|
|
7
|
+
function classifyPartnerReadinessState(adoptionPack, adapterPartnerPack) {
|
|
8
|
+
const targetCount = adoptionPack.initial_adoption_targets.length;
|
|
9
|
+
const firstSuccessPathCount = adoptionPack.first_success_paths.length;
|
|
10
|
+
const partnerValueCount = adapterPartnerPack.partner_value.length;
|
|
11
|
+
const maturityStepCount = adapterPartnerPack.trust_path.maturity_path.length;
|
|
12
|
+
|
|
13
|
+
if (targetCount >= 4 && firstSuccessPathCount >= 3 && partnerValueCount >= 4 && maturityStepCount >= 5) {
|
|
14
|
+
return "strong";
|
|
15
|
+
}
|
|
16
|
+
if (targetCount >= 2 && firstSuccessPathCount >= 2 && partnerValueCount >= 2) {
|
|
17
|
+
return "working";
|
|
18
|
+
}
|
|
19
|
+
return "early";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function classifyOnboardingFrictionState(adapterPartnerPack) {
|
|
23
|
+
const docCount = adapterPartnerPack.start_path.first_docs.length;
|
|
24
|
+
const commandCount = adapterPartnerPack.start_path.first_commands.length;
|
|
25
|
+
const exampleCount = adapterPartnerPack.start_path.first_examples.length;
|
|
26
|
+
|
|
27
|
+
if (docCount >= 2 && commandCount >= 4 && exampleCount >= 2) return "low";
|
|
28
|
+
if (docCount >= 1 && commandCount >= 2) return "manageable";
|
|
29
|
+
return "high";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function classifyPromotionReadinessState(adapterPartnerPack) {
|
|
33
|
+
const publicSurfaceCount = Object.keys(adapterPartnerPack.public_surfaces).length;
|
|
34
|
+
const maturityStepCount = adapterPartnerPack.trust_path.maturity_path.length;
|
|
35
|
+
if (publicSurfaceCount >= 5 && maturityStepCount >= 5) return "strong";
|
|
36
|
+
if (publicSurfaceCount >= 3 && maturityStepCount >= 3) return "working";
|
|
37
|
+
return "early";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function buildPartnerIntelligencePack() {
|
|
41
|
+
const adoptionPack = buildAdoptionPack();
|
|
42
|
+
const adapterPartnerPack = buildAdapterPartnerPack();
|
|
43
|
+
const partnerReadinessState = classifyPartnerReadinessState(adoptionPack, adapterPartnerPack);
|
|
44
|
+
const onboardingFrictionState = classifyOnboardingFrictionState(adapterPartnerPack);
|
|
45
|
+
const promotionReadinessState = classifyPromotionReadinessState(adapterPartnerPack);
|
|
46
|
+
|
|
47
|
+
let nextBestAction = "promote_partner_start_path";
|
|
48
|
+
if (onboardingFrictionState !== "low") {
|
|
49
|
+
nextBestAction = "tighten_partner_onboarding";
|
|
50
|
+
} else if (promotionReadinessState !== "strong") {
|
|
51
|
+
nextBestAction = "strengthen_promotion_trust_path";
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
ok: true,
|
|
56
|
+
product: packageJson.name,
|
|
57
|
+
category: "machine-commerce-partner-intelligence-pack",
|
|
58
|
+
partner_readiness_state: partnerReadinessState,
|
|
59
|
+
onboarding_friction_state: onboardingFrictionState,
|
|
60
|
+
promotion_readiness_state: promotionReadinessState,
|
|
61
|
+
first_partner_segment: adapterPartnerPack.adoption_message.first_partner_type,
|
|
62
|
+
recommended_partner_motion: "lead_with_adapter_authors_and_agent_builders",
|
|
63
|
+
next_best_action: nextBestAction,
|
|
64
|
+
explanation_signals: {
|
|
65
|
+
adoption_target_count: adoptionPack.initial_adoption_targets.length,
|
|
66
|
+
target_ecosystem_count: adoptionPack.target_ecosystems.length,
|
|
67
|
+
first_success_path_count: adoptionPack.first_success_paths.length,
|
|
68
|
+
partner_value_count: adapterPartnerPack.partner_value.length,
|
|
69
|
+
onboarding_doc_count: adapterPartnerPack.start_path.first_docs.length,
|
|
70
|
+
onboarding_command_count: adapterPartnerPack.start_path.first_commands.length,
|
|
71
|
+
onboarding_example_count: adapterPartnerPack.start_path.first_examples.length,
|
|
72
|
+
maturity_step_count: adapterPartnerPack.trust_path.maturity_path.length,
|
|
73
|
+
public_surface_count: Object.keys(adapterPartnerPack.public_surfaces).length
|
|
74
|
+
},
|
|
75
|
+
linked_surfaces: {
|
|
76
|
+
adoption_summary_ref: "/v1/release-pack/adoption/summary",
|
|
77
|
+
adapter_partner_summary_ref: "/v1/adapter-partners/summary",
|
|
78
|
+
release_center_summary_ref: "/v1/release-center/summary"
|
|
79
|
+
},
|
|
80
|
+
generated_from: {
|
|
81
|
+
adoption_pack_category: adoptionPack.category,
|
|
82
|
+
adapter_partner_pack_category: adapterPartnerPack.category
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function summarizePartnerIntelligencePack() {
|
|
88
|
+
const pack = buildPartnerIntelligencePack();
|
|
89
|
+
return {
|
|
90
|
+
ok: true,
|
|
91
|
+
product: pack.product,
|
|
92
|
+
category: pack.category,
|
|
93
|
+
partner_readiness_state: pack.partner_readiness_state,
|
|
94
|
+
onboarding_friction_state: pack.onboarding_friction_state,
|
|
95
|
+
promotion_readiness_state: pack.promotion_readiness_state,
|
|
96
|
+
first_partner_segment: pack.first_partner_segment,
|
|
97
|
+
next_best_action: pack.next_best_action,
|
|
98
|
+
signal_count: Object.keys(pack.explanation_signals).length
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
module.exports = {
|
|
103
|
+
buildPartnerIntelligencePack,
|
|
104
|
+
summarizePartnerIntelligencePack
|
|
105
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildPhase10CloseoutPack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "machine-commerce-phase-10-closeout-pack",
|
|
10
|
+
phase_ref: "phase_10",
|
|
11
|
+
posture: "closeout_plan",
|
|
12
|
+
current_decision: "ready_for_program_closeout",
|
|
13
|
+
blocking_actions: [],
|
|
14
|
+
action_steps: [
|
|
15
|
+
"confirm the current long-tail lane family is the intended final Phase 10 shape",
|
|
16
|
+
"record the terminal program closeout review",
|
|
17
|
+
"recheck phase-10 gate summary for zero unsatisfied conditions",
|
|
18
|
+
"advance only once phase-10 gate resolves to ready_for_program_closeout"
|
|
19
|
+
],
|
|
20
|
+
completion_signals: [
|
|
21
|
+
"phase-10 completion shows no remaining focus",
|
|
22
|
+
"phase-10 decision record shows no pending records",
|
|
23
|
+
"phase-10 gate resolves to ready_for_program_closeout"
|
|
24
|
+
]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function summarizePhase10CloseoutPack() {
|
|
29
|
+
const pack = buildPhase10CloseoutPack();
|
|
30
|
+
return {
|
|
31
|
+
ok: true,
|
|
32
|
+
product: pack.product,
|
|
33
|
+
category: pack.category,
|
|
34
|
+
phase_ref: pack.phase_ref,
|
|
35
|
+
blocking_action_count: pack.blocking_actions.length,
|
|
36
|
+
action_step_count: pack.action_steps.length,
|
|
37
|
+
completion_signal_count: pack.completion_signals.length,
|
|
38
|
+
current_decision: pack.current_decision
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
module.exports = {
|
|
43
|
+
buildPhase10CloseoutPack,
|
|
44
|
+
summarizePhase10CloseoutPack
|
|
45
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildPhase10CompletionPack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "machine-commerce-phase-10-completion-pack",
|
|
10
|
+
phase_ref: "phase_10",
|
|
11
|
+
posture: "completion_review",
|
|
12
|
+
coverage: {
|
|
13
|
+
ecosystem_refs: ["demand_signal_adapters", "niche_extension_registry", "ecosystem_backlog_triage"],
|
|
14
|
+
lane_refs: [
|
|
15
|
+
"/v1/phases/phase-10/demand-signal-adapters/summary",
|
|
16
|
+
"/v1/phases/phase-10/niche-extension-registry/summary",
|
|
17
|
+
"/v1/phases/phase-10/ecosystem-backlog-triage/summary"
|
|
18
|
+
],
|
|
19
|
+
extension_modes: ["demand_signal_capture", "extension_registry_mapping", "backlog_triage"],
|
|
20
|
+
demand_modes: ["partner_signal_flow", "extension_fit_flow", "queue_handoff_flow"],
|
|
21
|
+
extension_artifacts: ["demand_signal_ref", "extension_registry_ref", "triage_queue_ref"],
|
|
22
|
+
operator_surfaces: [
|
|
23
|
+
"/v1/release-center/summary",
|
|
24
|
+
"/v1/publish-plan/summary",
|
|
25
|
+
"/v1/phases/phase-10/long-tail-continuity/summary"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
completion: {
|
|
29
|
+
checks: [
|
|
30
|
+
"broad Phase 10 long-tail ecosystem pack is public and inspectable",
|
|
31
|
+
"all current Phase 10 long-tail lanes are public and inspectable",
|
|
32
|
+
"extension posture is visible at phase level",
|
|
33
|
+
"long-tail continuity is explicit across the lane family",
|
|
34
|
+
"release-center summary reflects Phase 10 breadth and lane coverage",
|
|
35
|
+
"Phase 10 closeout criteria are explicit before final program closeout"
|
|
36
|
+
],
|
|
37
|
+
readiness_criteria: [
|
|
38
|
+
{ ref: "criterion.phase_surface_public", label: "Phase 10 broad summary is live and inspectable", satisfied: true },
|
|
39
|
+
{ ref: "criterion.long_tail_lane_coverage", label: "All current long-tail lanes are live and inspectable", satisfied: true },
|
|
40
|
+
{ ref: "criterion.long_tail_continuity_visible", label: "Long-tail continuity is visible at phase level", satisfied: true },
|
|
41
|
+
{ ref: "criterion.operator_surfaces_attached", label: "Operator surfaces remain attached to the long-tail family", satisfied: true },
|
|
42
|
+
{ ref: "criterion.freeze_shape_confirmed", label: "The final Phase 10 long-tail lane shape is explicitly frozen", satisfied: true },
|
|
43
|
+
{ ref: "criterion.program_closeout_reviewed", label: "A final program closeout review has been recorded", satisfied: true }
|
|
44
|
+
],
|
|
45
|
+
ready_for_next_phase: false,
|
|
46
|
+
remaining_focus: []
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function summarizePhase10CompletionPack() {
|
|
52
|
+
const pack = buildPhase10CompletionPack();
|
|
53
|
+
return {
|
|
54
|
+
ok: true,
|
|
55
|
+
product: pack.product,
|
|
56
|
+
category: pack.category,
|
|
57
|
+
phase_ref: pack.phase_ref,
|
|
58
|
+
ecosystem_count: pack.coverage.ecosystem_refs.length,
|
|
59
|
+
lane_count: pack.coverage.lane_refs.length,
|
|
60
|
+
extension_mode_count: pack.coverage.extension_modes.length,
|
|
61
|
+
demand_mode_count: pack.coverage.demand_modes.length,
|
|
62
|
+
extension_artifact_count: pack.coverage.extension_artifacts.length,
|
|
63
|
+
operator_surface_count: pack.coverage.operator_surfaces.length,
|
|
64
|
+
completion_check_count: pack.completion.checks.length,
|
|
65
|
+
readiness_criteria_count: pack.completion.readiness_criteria.length,
|
|
66
|
+
satisfied_criteria_count: pack.completion.readiness_criteria.filter((criterion) => criterion.satisfied === true).length,
|
|
67
|
+
unsatisfied_criteria_count: pack.completion.readiness_criteria.filter((criterion) => criterion.satisfied !== true).length,
|
|
68
|
+
remaining_focus_count: pack.completion.remaining_focus.length,
|
|
69
|
+
ready_for_next_phase: pack.completion.ready_for_next_phase
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module.exports = {
|
|
74
|
+
buildPhase10CompletionPack,
|
|
75
|
+
summarizePhase10CompletionPack
|
|
76
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildPhase10DecisionRecordPack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "machine-commerce-phase-10-decision-record-pack",
|
|
10
|
+
phase_ref: "phase_10",
|
|
11
|
+
posture: "decision_record",
|
|
12
|
+
records: {
|
|
13
|
+
freeze_decision: {
|
|
14
|
+
status: "recorded",
|
|
15
|
+
description: "record the final long-tail lane shape as the frozen Phase 10 baseline"
|
|
16
|
+
},
|
|
17
|
+
program_closeout_review: {
|
|
18
|
+
status: "recorded",
|
|
19
|
+
description: "record the final review that authorizes terminal program closeout"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
record_steps: [
|
|
23
|
+
"confirm the current long-tail lane family matches the intended final Phase 10 shape",
|
|
24
|
+
"record the freeze decision outcome",
|
|
25
|
+
"record the program closeout review outcome",
|
|
26
|
+
"recheck phase-10 gate summary for the remaining terminal blockers"
|
|
27
|
+
],
|
|
28
|
+
outputs: [
|
|
29
|
+
"freeze decision status is recorded and inspectable",
|
|
30
|
+
"program closeout review status is recorded and inspectable",
|
|
31
|
+
"phase-10 terminal gate can be flipped deliberately"
|
|
32
|
+
]
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function summarizePhase10DecisionRecordPack() {
|
|
37
|
+
const pack = buildPhase10DecisionRecordPack();
|
|
38
|
+
return {
|
|
39
|
+
ok: true,
|
|
40
|
+
product: pack.product,
|
|
41
|
+
category: pack.category,
|
|
42
|
+
phase_ref: pack.phase_ref,
|
|
43
|
+
pending_record_count: Object.values(pack.records).filter((record) => record.status === "pending_record").length,
|
|
44
|
+
record_step_count: pack.record_steps.length,
|
|
45
|
+
output_count: pack.outputs.length,
|
|
46
|
+
freeze_decision_status: pack.records.freeze_decision.status,
|
|
47
|
+
program_closeout_review_status: pack.records.program_closeout_review.status
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
module.exports = {
|
|
52
|
+
buildPhase10DecisionRecordPack,
|
|
53
|
+
summarizePhase10DecisionRecordPack
|
|
54
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildPhase10DecisionResolutionPack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "machine-commerce-phase-10-decision-resolution-pack",
|
|
10
|
+
phase_ref: "phase_10",
|
|
11
|
+
posture: "decision_resolution",
|
|
12
|
+
transitions: [
|
|
13
|
+
{
|
|
14
|
+
ref: "freeze_decision",
|
|
15
|
+
from: "pending_record",
|
|
16
|
+
to: "recorded"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
ref: "program_closeout_review",
|
|
20
|
+
from: "pending_record",
|
|
21
|
+
to: "recorded"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
resolution_steps: [
|
|
25
|
+
"confirm the long-tail lane family is the intended final Phase 10 shape",
|
|
26
|
+
"record the freeze decision outcome",
|
|
27
|
+
"record the terminal program closeout review outcome",
|
|
28
|
+
"recheck phase-10 completion and freeze-review summaries",
|
|
29
|
+
"confirm phase-10 gate resolves to ready_for_program_closeout"
|
|
30
|
+
],
|
|
31
|
+
target_gate_decision: "ready_for_program_closeout",
|
|
32
|
+
target_ready_for_next_phase: false
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function summarizePhase10DecisionResolutionPack() {
|
|
37
|
+
const pack = buildPhase10DecisionResolutionPack();
|
|
38
|
+
return {
|
|
39
|
+
ok: true,
|
|
40
|
+
product: pack.product,
|
|
41
|
+
category: pack.category,
|
|
42
|
+
phase_ref: pack.phase_ref,
|
|
43
|
+
transition_count: pack.transitions.length,
|
|
44
|
+
resolution_step_count: pack.resolution_steps.length,
|
|
45
|
+
target_gate_decision: pack.target_gate_decision,
|
|
46
|
+
target_ready_for_next_phase: pack.target_ready_for_next_phase
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
module.exports = {
|
|
51
|
+
buildPhase10DecisionResolutionPack,
|
|
52
|
+
summarizePhase10DecisionResolutionPack
|
|
53
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildPhase10DemandSignalAdaptersRuntimePack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "machine-commerce-phase-10-demand-signal-adapters-runtime-pack",
|
|
10
|
+
phase_ref: "phase_10",
|
|
11
|
+
posture: "runtime_path",
|
|
12
|
+
ecosystems: ["demand_signal_adapters"],
|
|
13
|
+
runtime_shape: {
|
|
14
|
+
extension_modes: ["demand_signal_capture", "extension_registry_mapping", "backlog_triage"],
|
|
15
|
+
demand_modes: ["partner_signal_flow", "extension_fit_flow", "queue_handoff_flow"],
|
|
16
|
+
extension_artifacts: ["signal_ref", "fit_ref", "triage_ref"],
|
|
17
|
+
operator_surfaces: [
|
|
18
|
+
"/v1/release-center/summary",
|
|
19
|
+
"/v1/publish-plan/summary",
|
|
20
|
+
"/v1/phases/phase-10/summary"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
first_path: {
|
|
24
|
+
purpose: "show the first Phase 10 path from incoming ecosystem demand into governed extension triage",
|
|
25
|
+
first_http_sequence: [
|
|
26
|
+
"/v1/phases/phase-10/summary",
|
|
27
|
+
"/v1/phases/phase-10/demand-signal-adapters/summary",
|
|
28
|
+
"/v1/release-center/summary"
|
|
29
|
+
],
|
|
30
|
+
first_cli_sequence: [
|
|
31
|
+
"xytara-release --phase-10-demand-signal-adapters-runtime --summary",
|
|
32
|
+
"xytara-release --phase-10 --summary"
|
|
33
|
+
],
|
|
34
|
+
expected_signals: [
|
|
35
|
+
"demand signal adapters is a public Phase 10 lane",
|
|
36
|
+
"extension artifacts are explicit at the lane level",
|
|
37
|
+
"extension posture is visible before broader Phase 10 expansion"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
completion: {
|
|
41
|
+
completion_checks: [
|
|
42
|
+
"demand signal adapters lane is public and inspectable",
|
|
43
|
+
"extension artifacts are visible at lane level",
|
|
44
|
+
"operator surfaces remain attached to the extension lane",
|
|
45
|
+
"the lane is ready to anchor broader long-tail ecosystem breadth"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function summarizePhase10DemandSignalAdaptersRuntimePack() {
|
|
52
|
+
const pack = buildPhase10DemandSignalAdaptersRuntimePack();
|
|
53
|
+
return {
|
|
54
|
+
ok: true,
|
|
55
|
+
product: pack.product,
|
|
56
|
+
category: pack.category,
|
|
57
|
+
phase_ref: pack.phase_ref,
|
|
58
|
+
ecosystem_count: pack.ecosystems.length,
|
|
59
|
+
extension_mode_count: pack.runtime_shape.extension_modes.length,
|
|
60
|
+
demand_mode_count: pack.runtime_shape.demand_modes.length,
|
|
61
|
+
extension_artifact_count: pack.runtime_shape.extension_artifacts.length,
|
|
62
|
+
completion_check_count: pack.completion.completion_checks.length,
|
|
63
|
+
http_step_count: pack.first_path.first_http_sequence.length,
|
|
64
|
+
cli_step_count: pack.first_path.first_cli_sequence.length,
|
|
65
|
+
signal_count: pack.first_path.expected_signals.length,
|
|
66
|
+
operator_surface_count: pack.runtime_shape.operator_surfaces.length,
|
|
67
|
+
first_http_step: pack.first_path.first_http_sequence[0] || null
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
module.exports = {
|
|
72
|
+
buildPhase10DemandSignalAdaptersRuntimePack,
|
|
73
|
+
summarizePhase10DemandSignalAdaptersRuntimePack
|
|
74
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildPhase10EcosystemBacklogTriageRuntimePack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "machine-commerce-phase-10-ecosystem-backlog-triage-runtime-pack",
|
|
10
|
+
phase_ref: "phase_10",
|
|
11
|
+
posture: "runtime_path",
|
|
12
|
+
ecosystems: ["ecosystem_backlog_triage"],
|
|
13
|
+
runtime_shape: {
|
|
14
|
+
extension_modes: ["demand_signal_capture", "extension_registry_mapping", "backlog_triage"],
|
|
15
|
+
demand_modes: ["partner_signal_flow", "extension_fit_flow", "queue_handoff_flow"],
|
|
16
|
+
extension_artifacts: ["signal_ref", "registry_ref", "queue_ref"],
|
|
17
|
+
operator_surfaces: [
|
|
18
|
+
"/v1/release-center/summary",
|
|
19
|
+
"/v1/publish-plan/summary",
|
|
20
|
+
"/v1/phases/phase-10/summary"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
first_path: {
|
|
24
|
+
purpose: "show the Phase 10 triage path that turns long-tail demand into explicit backlog handling and queue discipline",
|
|
25
|
+
first_http_sequence: [
|
|
26
|
+
"/v1/phases/phase-10/summary",
|
|
27
|
+
"/v1/phases/phase-10/ecosystem-backlog-triage/summary",
|
|
28
|
+
"/v1/release-center/summary"
|
|
29
|
+
],
|
|
30
|
+
first_cli_sequence: [
|
|
31
|
+
"xytara-release --phase-10-ecosystem-backlog-triage-runtime --summary",
|
|
32
|
+
"xytara-release --phase-10 --summary"
|
|
33
|
+
],
|
|
34
|
+
expected_signals: [
|
|
35
|
+
"ecosystem backlog triage is a public Phase 10 lane",
|
|
36
|
+
"queue artifacts are explicit at the lane level",
|
|
37
|
+
"triage posture is visible before Phase 10 closure discipline"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
completion: {
|
|
41
|
+
completion_checks: [
|
|
42
|
+
"ecosystem backlog triage lane is public and inspectable",
|
|
43
|
+
"triage artifacts are visible at lane level",
|
|
44
|
+
"operator surfaces remain attached to the triage lane",
|
|
45
|
+
"the lane is ready to support broader long-tail ecosystem breadth"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function summarizePhase10EcosystemBacklogTriageRuntimePack() {
|
|
52
|
+
const pack = buildPhase10EcosystemBacklogTriageRuntimePack();
|
|
53
|
+
return {
|
|
54
|
+
ok: true,
|
|
55
|
+
product: pack.product,
|
|
56
|
+
category: pack.category,
|
|
57
|
+
phase_ref: pack.phase_ref,
|
|
58
|
+
ecosystem_count: pack.ecosystems.length,
|
|
59
|
+
extension_mode_count: pack.runtime_shape.extension_modes.length,
|
|
60
|
+
demand_mode_count: pack.runtime_shape.demand_modes.length,
|
|
61
|
+
extension_artifact_count: pack.runtime_shape.extension_artifacts.length,
|
|
62
|
+
completion_check_count: pack.completion.completion_checks.length,
|
|
63
|
+
http_step_count: pack.first_path.first_http_sequence.length,
|
|
64
|
+
cli_step_count: pack.first_path.first_cli_sequence.length,
|
|
65
|
+
signal_count: pack.first_path.expected_signals.length,
|
|
66
|
+
operator_surface_count: pack.runtime_shape.operator_surfaces.length,
|
|
67
|
+
first_http_step: pack.first_path.first_http_sequence[0] || null
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
module.exports = {
|
|
72
|
+
buildPhase10EcosystemBacklogTriageRuntimePack,
|
|
73
|
+
summarizePhase10EcosystemBacklogTriageRuntimePack
|
|
74
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildPhase10FreezeBaselinePack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "machine-commerce-phase-10-freeze-baseline-pack",
|
|
10
|
+
phase_ref: "phase_10",
|
|
11
|
+
posture: "frozen_baseline",
|
|
12
|
+
baseline: {
|
|
13
|
+
lane_refs: [
|
|
14
|
+
"/v1/phases/phase-10/demand-signal-adapters/summary",
|
|
15
|
+
"/v1/phases/phase-10/niche-extension-registry/summary",
|
|
16
|
+
"/v1/phases/phase-10/ecosystem-backlog-triage/summary"
|
|
17
|
+
],
|
|
18
|
+
extension_modes: ["demand_signal_capture", "extension_registry_mapping", "backlog_triage"],
|
|
19
|
+
demand_modes: ["partner_signal_flow", "extension_fit_flow", "queue_handoff_flow"],
|
|
20
|
+
baseline_status: "recorded",
|
|
21
|
+
frozen_outputs: [
|
|
22
|
+
"current long-tail lane family is the recorded Phase 10 baseline",
|
|
23
|
+
"Phase 10 can now be judged against a stable final shape rather than an open expansion set",
|
|
24
|
+
"only the final program closeout review remains before terminal closeout"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
first_path: {
|
|
28
|
+
purpose: "show that the Phase 10 long-tail family is now treated as a frozen terminal baseline",
|
|
29
|
+
first_http_sequence: [
|
|
30
|
+
"/v1/phases/phase-10/summary",
|
|
31
|
+
"/v1/phases/phase-10/freeze-baseline/summary",
|
|
32
|
+
"/v1/phases/phase-10/gate/summary"
|
|
33
|
+
],
|
|
34
|
+
first_cli_sequence: [
|
|
35
|
+
"xytara-release --phase-10-freeze-baseline --summary",
|
|
36
|
+
"xytara-release --phase-10 --summary"
|
|
37
|
+
],
|
|
38
|
+
expected_signals: [
|
|
39
|
+
"the Phase 10 long-tail family is explicitly frozen",
|
|
40
|
+
"shape freeze is no longer part of the remaining Phase 10 uncertainty",
|
|
41
|
+
"the only remaining terminal work is the final program closeout review"
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function summarizePhase10FreezeBaselinePack() {
|
|
48
|
+
const pack = buildPhase10FreezeBaselinePack();
|
|
49
|
+
return {
|
|
50
|
+
ok: true,
|
|
51
|
+
product: pack.product,
|
|
52
|
+
category: pack.category,
|
|
53
|
+
phase_ref: pack.phase_ref,
|
|
54
|
+
lane_count: pack.baseline.lane_refs.length,
|
|
55
|
+
extension_mode_count: pack.baseline.extension_modes.length,
|
|
56
|
+
demand_mode_count: pack.baseline.demand_modes.length,
|
|
57
|
+
baseline_status: pack.baseline.baseline_status,
|
|
58
|
+
frozen_output_count: pack.baseline.frozen_outputs.length,
|
|
59
|
+
signal_count: pack.first_path.expected_signals.length,
|
|
60
|
+
first_http_step: pack.first_path.first_http_sequence[0] || null
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
module.exports = {
|
|
65
|
+
buildPhase10FreezeBaselinePack,
|
|
66
|
+
summarizePhase10FreezeBaselinePack
|
|
67
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
|
|
5
|
+
function buildPhase10FreezeReviewPack() {
|
|
6
|
+
return {
|
|
7
|
+
ok: true,
|
|
8
|
+
product: packageJson.name,
|
|
9
|
+
category: "machine-commerce-phase-10-freeze-review-pack",
|
|
10
|
+
phase_ref: "phase_10",
|
|
11
|
+
posture: "freeze_review",
|
|
12
|
+
freeze_review: {
|
|
13
|
+
lane_refs: [
|
|
14
|
+
"/v1/phases/phase-10/demand-signal-adapters/summary",
|
|
15
|
+
"/v1/phases/phase-10/niche-extension-registry/summary",
|
|
16
|
+
"/v1/phases/phase-10/ecosystem-backlog-triage/summary"
|
|
17
|
+
],
|
|
18
|
+
extension_modes: ["demand_signal_capture", "extension_registry_mapping", "backlog_triage"],
|
|
19
|
+
review_questions: [
|
|
20
|
+
"Is the current long-tail lane family the intended final Phase 10 breadth?",
|
|
21
|
+
"Are demand capture, extension registry, and backlog triage coherent across the family?",
|
|
22
|
+
"Do operator surfaces expose enough review posture for the long-tail family?",
|
|
23
|
+
"Is the final program slice ready to freeze before program closeout?"
|
|
24
|
+
],
|
|
25
|
+
resolution_criteria: [
|
|
26
|
+
{ ref: "criterion.long_tail_breadth_confirmed", label: "The final long-tail lane breadth is confirmed", satisfied: true },
|
|
27
|
+
{ ref: "criterion.long_tail_roles_confirmed", label: "Demand, registry, and backlog roles are coherent across the family", satisfied: true },
|
|
28
|
+
{ ref: "criterion.freeze_decision_recorded", label: "The freeze decision is explicitly recorded", satisfied: true },
|
|
29
|
+
{ ref: "criterion.program_closeout_review_recorded", label: "The program closeout review is explicitly recorded", satisfied: true }
|
|
30
|
+
],
|
|
31
|
+
blockers: [],
|
|
32
|
+
outputs: [
|
|
33
|
+
"the final Phase 10 long-tail lane shape is frozen",
|
|
34
|
+
"the remaining terminal gate blockers are explicit and inspectable",
|
|
35
|
+
"Phase 10 can be closed deliberately rather than implicitly"
|
|
36
|
+
],
|
|
37
|
+
decision_posture: "terminal_closeout_recorded"
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function summarizePhase10FreezeReviewPack() {
|
|
43
|
+
const pack = buildPhase10FreezeReviewPack();
|
|
44
|
+
return {
|
|
45
|
+
ok: true,
|
|
46
|
+
product: pack.product,
|
|
47
|
+
category: pack.category,
|
|
48
|
+
phase_ref: pack.phase_ref,
|
|
49
|
+
lane_count: pack.freeze_review.lane_refs.length,
|
|
50
|
+
extension_mode_count: pack.freeze_review.extension_modes.length,
|
|
51
|
+
review_question_count: pack.freeze_review.review_questions.length,
|
|
52
|
+
resolution_criteria_count: pack.freeze_review.resolution_criteria.length,
|
|
53
|
+
satisfied_resolution_count: pack.freeze_review.resolution_criteria.filter((criterion) => criterion.satisfied === true).length,
|
|
54
|
+
unsatisfied_resolution_count: pack.freeze_review.resolution_criteria.filter((criterion) => criterion.satisfied !== true).length,
|
|
55
|
+
blocker_count: pack.freeze_review.blockers.length,
|
|
56
|
+
freeze_output_count: pack.freeze_review.outputs.length,
|
|
57
|
+
decision_posture: pack.freeze_review.decision_posture
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
module.exports = {
|
|
62
|
+
buildPhase10FreezeReviewPack,
|
|
63
|
+
summarizePhase10FreezeReviewPack
|
|
64
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const packageJson = require("../package.json");
|
|
4
|
+
const { summarizePhase10CompletionPack } = require("./phase_10_completion_pack");
|
|
5
|
+
const { summarizePhase10FreezeReviewPack } = require("./phase_10_freeze_review_pack");
|
|
6
|
+
|
|
7
|
+
function buildPhase10GatePack() {
|
|
8
|
+
const completion = summarizePhase10CompletionPack();
|
|
9
|
+
const freezeReview = summarizePhase10FreezeReviewPack();
|
|
10
|
+
const unsatisfiedGateCount =
|
|
11
|
+
completion.unsatisfied_criteria_count +
|
|
12
|
+
freezeReview.unsatisfied_resolution_count;
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
ok: true,
|
|
16
|
+
product: packageJson.name,
|
|
17
|
+
category: "machine-commerce-phase-10-gate-pack",
|
|
18
|
+
phase_ref: "phase_10",
|
|
19
|
+
posture: "phase_gate",
|
|
20
|
+
gate: {
|
|
21
|
+
decision: unsatisfiedGateCount === 0 ? "ready_for_program_closeout" : "hold_phase_10",
|
|
22
|
+
ready_for_next_phase: false,
|
|
23
|
+
satisfied_gate_count:
|
|
24
|
+
completion.satisfied_criteria_count +
|
|
25
|
+
freezeReview.satisfied_resolution_count,
|
|
26
|
+
unsatisfied_gate_count: unsatisfiedGateCount,
|
|
27
|
+
blockers: unsatisfiedGateCount === 0 ? [] : [
|
|
28
|
+
"program closeout review has not been explicitly recorded"
|
|
29
|
+
],
|
|
30
|
+
advance_when: [
|
|
31
|
+
"program closeout review is explicitly recorded",
|
|
32
|
+
"completion and freeze-review surfaces both show no unsatisfied terminal gate criteria"
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function summarizePhase10GatePack() {
|
|
39
|
+
const pack = buildPhase10GatePack();
|
|
40
|
+
return {
|
|
41
|
+
ok: true,
|
|
42
|
+
product: pack.product,
|
|
43
|
+
category: pack.category,
|
|
44
|
+
phase_ref: pack.phase_ref,
|
|
45
|
+
satisfied_gate_count: pack.gate.satisfied_gate_count,
|
|
46
|
+
unsatisfied_gate_count: pack.gate.unsatisfied_gate_count,
|
|
47
|
+
blocker_count: pack.gate.blockers.length,
|
|
48
|
+
advance_when_count: pack.gate.advance_when.length,
|
|
49
|
+
decision: pack.gate.decision,
|
|
50
|
+
ready_for_next_phase: pack.gate.ready_for_next_phase
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = {
|
|
55
|
+
buildPhase10GatePack,
|
|
56
|
+
summarizePhase10GatePack
|
|
57
|
+
};
|