Skip to content

Commit b63bd28

Browse files
V44 Gate 3: Add Packs portfolio market intelligence
Add source-safe Packs portfolio positions, market signals, saved filter presets, and settlement/compensation/delivery/repair facets to the activity model, API, and /packs interface. Add the deterministic V44 Packs portfolio market intelligence artifact, generator, checker, protocol exports, tests, workflow hooks, and draft specification documentation updates. Validated with protocol tests, uapi pack activity Jest coverage, uapi typecheck, protocol typecheck, V44 gate checks, spec posture checks, workflow YAML parsing, ASCII hygiene, diff whitespace, and changed-file secret scanning.
1 parent b3be6ed commit b63bd28

22 files changed

Lines changed: 1395 additions & 31 deletions

.bitcode/v44-economic-domain-model.json

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"currentTarget": "V43",
66
"sourceSafetyVerdict": "source-safe-economic-domain-model-metadata",
77
"generatedAt": "deterministic",
8-
"artifactRoot": "v44-economic-domain-model:ef6092ede081c31a2dd1fa62",
8+
"artifactRoot": "v44-economic-domain-model:1ac488c93f2cbc4464d79d2f",
99
"passed": true,
1010
"economicObjectIds": [
1111
"EnterprisePackPortfolio",
@@ -759,18 +759,18 @@
759759
],
760760
"sourceRoots": {
761761
"activePointer": "BITCODE_SPEC.txt:4ea77b214c66f69c697bff3d",
762-
"spec": "BITCODE_SPEC_V44.md:27d0568087e0f617f8576694",
763-
"delta": "BITCODE_SPEC_V44_DELTA.md:6cc34f9e954f1a83707af740",
764-
"notes": "BITCODE_SPEC_V44_NOTES.md:05a13e9c9e270882dbc13ebc",
765-
"parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:ad818785f7ad1864ca7ca237",
766-
"roadmap": "SPECIFICATIONS_ROADMAP.md:aa89238169c79ff321e3f828",
767-
"readme": "README.md:06a61892efa39a9bb5daf972",
768-
"protocolReadme": "packages/protocol/README.md:8c8711285580b921cfc3b1ac",
769-
"packageJson": "package.json:40af7a5aa6601162b9ccab7b",
770-
"gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:b9d45fc664e62530318993cc",
771-
"canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:c61a38ba01701c8f4f39a5c3",
772-
"packageIndex": "packages/protocol/src/index.js:05205fd7a16b03943b4a0f22",
773-
"packageTypes": "packages/protocol/src/index.d.ts:ef61d24f3eeba4aa9e537b22",
762+
"spec": "BITCODE_SPEC_V44.md:61a14ac02f93d45980135444",
763+
"delta": "BITCODE_SPEC_V44_DELTA.md:8e456398e6b8f70ce1c79bf6",
764+
"notes": "BITCODE_SPEC_V44_NOTES.md:427bff37cf91930869a4ec4b",
765+
"parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:95b96fd368ff03e218ce4d9e",
766+
"roadmap": "SPECIFICATIONS_ROADMAP.md:265ab18c2e4e40b44c53e6c2",
767+
"readme": "README.md:c3d54908be1513348a80fce9",
768+
"protocolReadme": "packages/protocol/README.md:32f06e276fcd832dd7b87195",
769+
"packageJson": "package.json:7a1928fa7ee07cb9e5a0ccea",
770+
"gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e599b8492c1b1889903c105c",
771+
"canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:23259d5fe5601792812544f3",
772+
"packageIndex": "packages/protocol/src/index.js:6d944931866655f14635448d",
773+
"packageTypes": "packages/protocol/src/index.d.ts:fc425e096922043863600369",
774774
"packageSource": "packages/protocol/src/canonical/v44-economic-domain-model.js:21b8f5c80ad8322dff2909ed",
775775
"packageTest": "packages/protocol/test/v44-economic-domain-model.test.js:b89f71aa0cf578dabbec3cd9",
776776
"generator": "scripts/generate-v44-economic-domain-model.mjs:3390fbc087e919bedb14550c",
Lines changed: 302 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,302 @@
1+
{
2+
"artifactId": "v44-packs-portfolio-market-intelligence",
3+
"schemaId": "bitcode.v44.packsPortfolioMarketIntelligence.v1",
4+
"version": "V44",
5+
"currentTarget": "V43",
6+
"sourceSafetyVerdict": "source-safe-packs-portfolio-market-intelligence-metadata",
7+
"generatedAt": "deterministic",
8+
"artifactRoot": "v44-packs-portfolio-market-intelligence:4f9b4a7ab99f67bcc65e6701",
9+
"passed": true,
10+
"portfolioViewIds": [
11+
"enterprise-pack-portfolio",
12+
"pack-portfolio-position",
13+
"saved-filter-preset",
14+
"organization-view",
15+
"proof-root-drilldown"
16+
],
17+
"marketSignalIds": [
18+
"demand",
19+
"supply",
20+
"unfit-need",
21+
"settlement",
22+
"compensation",
23+
"delivery",
24+
"repair"
25+
],
26+
"marketFacetIds": [
27+
"settlementState",
28+
"compensationState",
29+
"deliveryState",
30+
"repairState",
31+
"repository",
32+
"type",
33+
"state"
34+
],
35+
"forbiddenPayloadIds": [
36+
"protected-source-payloads",
37+
"unpaid-assetpack-source",
38+
"source-snippets",
39+
"raw-prompts",
40+
"interpolated-prompts",
41+
"raw-provider-responses",
42+
"credentials",
43+
"wallet-private-material",
44+
"private-settlement-payloads"
45+
],
46+
"rows": [
47+
{
48+
"rowId": "portfolio-position-projection",
49+
"owner": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
50+
"contract": "PackPortfolioPositionProjection groups source-safe PackActivity rows into enterprise portfolio positions with BTD estimates, sats values, signal counts, proof counts, and state readback.",
51+
"requiredFields": [
52+
"assetPackTitle",
53+
"repository",
54+
"activityCount",
55+
"valueTotalSats",
56+
"btdEstimate",
57+
"proofRootCount"
58+
],
59+
"rowRoot": "v44-packs-portfolio-market-row:d79157690ecee393a831ecfb",
60+
"sourceSafeMetadataOnly": true,
61+
"protectedSourceVisible": false,
62+
"unpaidAssetPackSourceVisible": false
63+
},
64+
{
65+
"rowId": "market-signal-projection",
66+
"owner": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
67+
"contract": "PackMarketSignalProjection exposes demand, supply, unfit-Need, settlement, compensation, delivery, and repair signals without source-bearing payloads.",
68+
"requiredFields": [
69+
"kind",
70+
"strength",
71+
"state",
72+
"relatedRecordIds",
73+
"proofRoots"
74+
],
75+
"rowRoot": "v44-packs-portfolio-market-row:c568a5c63f0c4fcf639451f5",
76+
"sourceSafeMetadataOnly": true,
77+
"protectedSourceVisible": false,
78+
"unpaidAssetPackSourceVisible": false
79+
},
80+
{
81+
"rowId": "saved-filter-presets",
82+
"owner": "uapi/app/packs/PacksPageClient.tsx",
83+
"contract": "/packs renders saved source-safe filters for repair cases, demand signals, supply signals, settlement facets, and compensation facets.",
84+
"requiredFields": [
85+
"savedFilters",
86+
"writeParams",
87+
"Settlement facets",
88+
"Compensation facets"
89+
],
90+
"rowRoot": "v44-packs-portfolio-market-row:e93081a5971fe563f6d6fc69",
91+
"sourceSafeMetadataOnly": true,
92+
"protectedSourceVisible": false,
93+
"unpaidAssetPackSourceVisible": false
94+
},
95+
{
96+
"rowId": "portfolio-market-api",
97+
"owner": "uapi/app/api/packs/activity/route.ts",
98+
"contract": "/api/packs/activity returns marketIntelligence beside records, detail, summary, query, and sourceSafety.",
99+
"requiredFields": [
100+
"marketIntelligence",
101+
"buildPackPortfolioMarketIntelligence",
102+
"sourceSafety"
103+
],
104+
"rowRoot": "v44-packs-portfolio-market-row:6a64c79cfe3b6713d2641fa4",
105+
"sourceSafeMetadataOnly": true,
106+
"protectedSourceVisible": false,
107+
"unpaidAssetPackSourceVisible": false
108+
}
109+
],
110+
"sourceRoots": {
111+
"activePointer": "BITCODE_SPEC.txt:4ea77b214c66f69c697bff3d",
112+
"spec": "BITCODE_SPEC_V44.md:61a14ac02f93d45980135444",
113+
"delta": "BITCODE_SPEC_V44_DELTA.md:8e456398e6b8f70ce1c79bf6",
114+
"notes": "BITCODE_SPEC_V44_NOTES.md:427bff37cf91930869a4ec4b",
115+
"parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:95b96fd368ff03e218ce4d9e",
116+
"roadmap": "SPECIFICATIONS_ROADMAP.md:265ab18c2e4e40b44c53e6c2",
117+
"readme": "README.md:c3d54908be1513348a80fce9",
118+
"protocolReadme": "packages/protocol/README.md:32f06e276fcd832dd7b87195",
119+
"packageJson": "package.json:7a1928fa7ee07cb9e5a0ccea",
120+
"gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e599b8492c1b1889903c105c",
121+
"canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:23259d5fe5601792812544f3",
122+
"economicModel": "packages/protocol/src/canonical/v44-economic-domain-model.js:21b8f5c80ad8322dff2909ed",
123+
"model": "uapi/components/base/bitcode/activity/pack-activity-model.ts:77058cc82039a3bd1b7514bf",
124+
"route": "uapi/app/api/packs/activity/route.ts:97c5a4539d48562eb5de66e8",
125+
"client": "uapi/app/packs/PacksPageClient.tsx:b70aa97a8022a9c42995a030",
126+
"uapiTest": "uapi/tests/packActivityModel.test.ts:541e71f2806dc1497379d0f1",
127+
"packageIndex": "packages/protocol/src/index.js:6d944931866655f14635448d",
128+
"packageTypes": "packages/protocol/src/index.d.ts:fc425e096922043863600369",
129+
"packageTest": "packages/protocol/test/v44-packs-portfolio-market-intelligence.test.js:ea02fa03d210e6480036fc0f",
130+
"generator": "scripts/generate-v44-packs-portfolio-market-intelligence.mjs:c106ef7138e3a330d405bec2",
131+
"checker": "scripts/check-v44-gate3-packs-portfolio-market-intelligence.mjs:0de0b87cbc96bb307cc1533a"
132+
},
133+
"predicateResults": [
134+
{
135+
"id": "active-canon-pointer-remains-v43",
136+
"sourcePath": "BITCODE_SPEC.txt",
137+
"passed": true
138+
},
139+
{
140+
"id": "spec-defines-gate3",
141+
"sourcePath": "BITCODE_SPEC_V44.md",
142+
"passed": true
143+
},
144+
{
145+
"id": "spec-names-gate3-artifact",
146+
"sourcePath": "BITCODE_SPEC_V44.md",
147+
"passed": true
148+
},
149+
{
150+
"id": "delta-records-gate3",
151+
"sourcePath": "BITCODE_SPEC_V44_DELTA.md",
152+
"passed": true
153+
},
154+
{
155+
"id": "notes-records-gate3",
156+
"sourcePath": "BITCODE_SPEC_V44_NOTES.md",
157+
"passed": true
158+
},
159+
{
160+
"id": "parity-records-gate3",
161+
"sourcePath": "BITCODE_SPEC_V44_PARITY_MATRIX.md",
162+
"passed": true
163+
},
164+
{
165+
"id": "roadmap-records-gate3",
166+
"sourcePath": "SPECIFICATIONS_ROADMAP.md",
167+
"passed": true
168+
},
169+
{
170+
"id": "readme-records-gate3",
171+
"sourcePath": "README.md",
172+
"passed": true
173+
},
174+
{
175+
"id": "protocol-readme-records-gate3",
176+
"sourcePath": "packages/protocol/README.md",
177+
"passed": true
178+
},
179+
{
180+
"id": "economic-model-prerequisite-present",
181+
"sourcePath": "packages/protocol/src/canonical/v44-economic-domain-model.js",
182+
"passed": true
183+
},
184+
{
185+
"id": "model-defines-market-intelligence",
186+
"sourcePath": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
187+
"passed": true
188+
},
189+
{
190+
"id": "model-defines-saved-filters",
191+
"sourcePath": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
192+
"passed": true
193+
},
194+
{
195+
"id": "model-defines-market-signals",
196+
"sourcePath": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
197+
"passed": true
198+
},
199+
{
200+
"id": "model-defines-facets",
201+
"sourcePath": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
202+
"passed": true
203+
},
204+
{
205+
"id": "api-returns-market-intelligence",
206+
"sourcePath": "uapi/app/api/packs/activity/route.ts",
207+
"passed": true
208+
},
209+
{
210+
"id": "client-renders-portfolio-positions",
211+
"sourcePath": "uapi/app/packs/PacksPageClient.tsx",
212+
"passed": true
213+
},
214+
{
215+
"id": "client-renders-market-signals",
216+
"sourcePath": "uapi/app/packs/PacksPageClient.tsx",
217+
"passed": true
218+
},
219+
{
220+
"id": "client-renders-saved-filters",
221+
"sourcePath": "uapi/app/packs/PacksPageClient.tsx",
222+
"passed": true
223+
},
224+
{
225+
"id": "client-renders-facet-filters",
226+
"sourcePath": "uapi/app/packs/PacksPageClient.tsx",
227+
"passed": true
228+
},
229+
{
230+
"id": "uapi-test-covers-gate3-model",
231+
"sourcePath": "uapi/tests/packActivityModel.test.ts",
232+
"passed": true
233+
},
234+
{
235+
"id": "package-test-covers-gate3",
236+
"sourcePath": "packages/protocol/test/v44-packs-portfolio-market-intelligence.test.js",
237+
"passed": true
238+
},
239+
{
240+
"id": "package-exports-gate3",
241+
"sourcePath": "packages/protocol/src/index.js",
242+
"passed": true
243+
},
244+
{
245+
"id": "package-types-export-gate3",
246+
"sourcePath": "packages/protocol/src/index.d.ts",
247+
"passed": true
248+
},
249+
{
250+
"id": "package-json-exposes-gate3",
251+
"sourcePath": "package.json",
252+
"passed": true
253+
},
254+
{
255+
"id": "gate-workflow-runs-gate3",
256+
"sourcePath": ".github/workflows/bitcode-gate-quality.yml",
257+
"passed": true
258+
},
259+
{
260+
"id": "canon-workflow-runs-gate3",
261+
"sourcePath": ".github/workflows/bitcode-canon-quality.yml",
262+
"passed": true
263+
},
264+
{
265+
"id": "generator-exists",
266+
"sourcePath": "scripts/generate-v44-packs-portfolio-market-intelligence.mjs",
267+
"passed": true
268+
},
269+
{
270+
"id": "checker-exists",
271+
"sourcePath": "scripts/check-v44-gate3-packs-portfolio-market-intelligence.mjs",
272+
"passed": true
273+
}
274+
],
275+
"coverage": {
276+
"portfolioPositionsImplemented": true,
277+
"savedFiltersImplemented": true,
278+
"organizationViewsImplemented": true,
279+
"marketSignalsImplemented": true,
280+
"unfitNeedSignalsImplemented": true,
281+
"settlementFacetsImplemented": true,
282+
"compensationFacetsImplemented": true,
283+
"proofRootDrilldownImplemented": true,
284+
"apiProjectionImplemented": true,
285+
"uiProjectionImplemented": true,
286+
"noSourceLeakTestsImplemented": true,
287+
"sourceSafeMetadataOnly": true,
288+
"protectedSourceVisible": false,
289+
"rawSourceTextVisible": false,
290+
"sourceSnippetVisible": false,
291+
"rawPromptVisible": false,
292+
"interpolatedPromptVisible": false,
293+
"rawProviderResponseVisible": false,
294+
"unpaidAssetPackSourceVisible": false,
295+
"credentialsSerialized": false,
296+
"walletPrivateMaterialVisible": false,
297+
"settlementPrivatePayloadVisible": false,
298+
"requiredPredicateCount": 28,
299+
"passedPredicateCount": 28,
300+
"failedPredicateIds": []
301+
}
302+
}

.github/workflows/bitcode-canon-quality.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,9 @@ jobs:
367367
if [ -f scripts/check-v44-gate2-economic-domain-model.mjs ]; then
368368
node scripts/check-v44-gate2-economic-domain-model.mjs --skip-branch-check --skip-package-tests
369369
fi
370+
if [ -f scripts/check-v44-gate3-packs-portfolio-market-intelligence.mjs ]; then
371+
node scripts/check-v44-gate3-packs-portfolio-market-intelligence.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
372+
fi
370373
fi
371374
else
372375
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2

.github/workflows/bitcode-gate-quality.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,9 @@ jobs:
496496
if [ -f scripts/check-v44-gate2-economic-domain-model.mjs ]; then
497497
node scripts/check-v44-gate2-economic-domain-model.mjs --skip-branch-check --skip-package-tests
498498
fi
499+
if [ -f scripts/check-v44-gate3-packs-portfolio-market-intelligence.mjs ]; then
500+
node scripts/check-v44-gate3-packs-portfolio-market-intelligence.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
501+
fi
499502
fi
500503
else
501504
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
@@ -534,6 +537,9 @@ jobs:
534537
if [ "$POINTER" = "V43" ] && [ -f scripts/check-v44-gate2-economic-domain-model.mjs ]; then
535538
node scripts/check-v44-gate2-economic-domain-model.mjs --skip-branch-check --skip-package-tests
536539
fi
540+
if [ "$POINTER" = "V43" ] && [ -f scripts/check-v44-gate3-packs-portfolio-market-intelligence.mjs ]; then
541+
node scripts/check-v44-gate3-packs-portfolio-market-intelligence.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
542+
fi
537543
if [ "$POINTER" != "V43" ]; then
538544
if [ -f scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs ]; then
539545
node scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs --skip-branch-check

0 commit comments

Comments
 (0)