diff --git a/Justfile b/Justfile index f656abf..4b94e97 100644 --- a/Justfile +++ b/Justfile @@ -46,7 +46,8 @@ test-file path pattern=".*": fi mkdir -p .data/test-logs log="$(mktemp .data/test-logs/test-XXXXXX)" - timeout --signal=TERM --kill-after=5s 120s {{ gerbil_darwin_env }} gerbil -:max-heap=2G,debug=q test -v 5 -r "{{pattern}}" "{{path}}" 2>&1 | tee "$log" + # Establish the native package environment before gxtest initializes imports. + timeout --signal=TERM --kill-after=5s 120s {{ gerbil_darwin_env }} gerbil -:max-heap=2G,debug=q env gxtest -v 5 -r "{{pattern}}" "{{path}}" 2>&1 | tee "$log" if rg 'ERROR (MODULE|CHECK|CASE|HARNESS)|Heap overflow|Stack overflow' "$log"; then exit 1; fi rg -F -x 'MODULE-OK {{path}}' "$log" >/dev/null rg -F 'HARNESS-OK' "$log" >/dev/null diff --git a/docs/10-19-design/10-architecture/10.147-source-bound-c-and-cpp-contract-verification.org b/docs/10-19-design/10-architecture/10.147-source-bound-c-and-cpp-contract-verification.org index a0ac7b6..749e90c 100644 --- a/docs/10-19-design/10-architecture/10.147-source-bound-c-and-cpp-contract-verification.org +++ b/docs/10-19-design/10-architecture/10.147-source-bound-c-and-cpp-contract-verification.org @@ -10,15 +10,16 @@ #+BEGIN_QUOTE The later [[file:10.148-flat-declarative-library-boundary.org][10.148 Library boundary]] supersedes this proposal's placement of source capture, process execution and evidence issuance. They are consumer/test duties, -not a Runtime implemented by this Library. The contract obligations below remain -design requirements, not executed proof claims. +not a Runtime implemented by this Library. The general contract obligations remain +requirements. The bounded C/C++ subjects and observed acceptance are identified +explicitly below; they do not establish arbitrary-project correctness. #+END_QUOTE * Goal and decision boundary :PROPERTIES: :JD_ID: 10.147 :CUSTOM_ID: source140-goal -:STATUS: design-proposed-not-implemented +:STATUS: bounded-real-source-qualified-cold-install-open :END: Extend the existing Library, POO and ASCENT architecture so that a domain @@ -26,8 +27,11 @@ obligation can be checked against actual C/C++ function bodies, their callers and the native artifact that uses them. The subject is reusable C/C++ engineering capability across projects, not an SMP integration project. SMP illustrates one possible application of capacity and resource-lifecycle contracts. This document -defines the design and per-project implementation gates; it reports no executed -C/C++ verification. Acquiring SMP source is not a prerequisite for this work. +defines the reusable design and per-project implementation gates. Maintained C +capacity/caller and C++ resource-lifetime subjects now have actual CBMC/native +results and ASCENT integration controls. Other families and consuming projects +still require their own captures and evidence. Acquiring SMP source is not a +prerequisite for this work. #+BEGIN_QUOTE A checked model is not a checked implementation. A checked function under a @@ -389,20 +393,22 @@ reasoning without inheriting unsupported implementation conclusions. | Gate | Completion condition | Current state | |------+----------------------+---------------| -| G0 Source | The selected consuming project's actual functions/callers and full configuration captured | Required when verifying that implementation; no project selected here | -| G1 Scope | Reviewed local contract, parent refinement, reachable-state assumptions and independent oracle | Designed; source-specific review pending | -| G2 Static | Real-body checks, caller premises, nonvacuity controls and explicit completeness classification | Not implemented | -| G3 Counter | Historical reproduction where available, fixed replay and negative controls for excluded failure/units | Not executed | -| G4 Native | Same-source real build, artifact lineage, regression and propagation behavior | Not executed | -| G5 Integration | Native POO selection, actual ASCENT registration/queries, invalidation and reuse controls | Not implemented | -| G6 Review | Scoped closure of findings and required authorization under existing Aitia policy | Not executed | +| G0 Source | Actual functions/callers, harnesses and declared configuration captured | Observed for maintained C bounded-capacity and C++ resource-lifetime subjects; no SMP or arbitrary consumer capture claimed | +| G1 Scope | Local contract, parent refinement, reachable-state assumptions and independent oracle | Explicit for these subjects; C caller premises and C++ constructor/counter premises remain part of applicability | +| G2 Static | Real-body checks, caller premises, nonvacuity controls and explicit completeness classification | Actual C body/contract/caller and C++ bounded checks pass; bounded solver results are not universal language proofs | +| G3 Counter | Real negative controls for the selected failure semantics | Actual missing-overflow-guard and occupied-transfer source mutants produce counters; no historical SMP repair claimed | +| G4 Native | Same-source build, artifact lineage and native regression | Actual C and C++ native artifacts execute successfully; full compiler backend/SDK attestation remains unsupported | +| G5 Integration | Native POO selection, actual ASCENT registration/queries, invalidation and reuse | Eight real-source cases plus native language-owner controls pass; reuse shares an identical implementation capture, not unrelated code | +| G6 External review | Consumer-required findings disposition and current-use authorization | Owned by the consuming ecosystem; Library support is not an Aitia approval or application permit | +| G7 Package qualification | Native package identities, compiled ABI and complete cold dependency installation | Earlier local manifests/compiled consumers and root source build pass; subsequent ordinary Core/root deadline failures require requalification; full cold installation remains open | Implementation tests for Scheme integration belong in =t/*-test.ss=. Future verifier harnesses remain C/C++ assets. Preserve the established per-process 2 GiB heap and 180-second acceptance budget for applicable Gerbil processes; derive concurrency from machine resources. Before any solver run, record a method-specific resource policy; a budget termination is pending, never proof. -This design does not change existing budgets or claim a solver run occurred. +These results do not change existing budgets. Their authority is limited to the +actual maintained subjects, declared tool/method inputs and observed runs. The maintenance cost is contracts, environment models, tool qualification and representation mappings. A consuming project can begin with a critical boundary @@ -421,22 +427,27 @@ defect detection and review effort before expanding a project's verified scope. - [X] Define historical counter retention, current applicability and reuse boundaries. - [X] Use existing Module, Profile, Scenario, Catalog and evidence/review owners. - [X] Separate generic C/C++ adoption from optional SMP illustration. -- [ ] For a later selected consumer, capture its source before claiming implementation evidence. -- [ ] Validate the proposed mapping with actual Yuanxu/ASCENT APIs and real results. +- [X] Capture maintained C/C++ subjects before issuing their implementation evidence. +- [X] Exercise native Yuanxu selection and actual ASCENT registration/query with real results. +- [ ] Capture and qualify each additional consuming implementation before transferring a claim. +- [ ] Complete cold dependency installation without treating incremental recovery as a cold pass. * Documentation verification :PROPERTIES: :CUSTOM_ID: source140-documentation-checks :END: -The new Org document passes =org-lint= with no findings. Local file links, +The original design revision passed =org-lint= with no findings. Local file links, English-only text, unique CUSTOM_ID values, eight SG gold rows and eight SC-R rule rows were checked. D2 was formatted and rendered with =--layout elk --theme 0 --pad 24=; the SVG was visually reviewed after simplifying long feedback edges. README and both indexes link the new design and view. -These checks establish document structure and navigability only. All source, -tool execution and integration gates above retain their stated pending status. +Those historical checks establish document structure and navigability only. +The current view is maintained by the repository's TypeScript rendering and +source-receipt checks. Actual source/tool/integration results are qualified +separately in the gate table and current real-source controls; rendering never +promotes a pending package gate to acceptance. * Primary references :PROPERTIES: diff --git a/docs/10-19-design/10-architecture/10.149-unified-language-engineering-configuration.org b/docs/10-19-design/10-architecture/10.149-unified-language-engineering-configuration.org index 08d1e9c..cd0c45d 100644 --- a/docs/10-19-design/10-architecture/10.149-unified-language-engineering-configuration.org +++ b/docs/10-19-design/10-architecture/10.149-unified-language-engineering-configuration.org @@ -186,3 +186,102 @@ ASCENT evidence and application authorization are not issued by these views. PNG export uses the existing lossless compression path. The separate raster comparison checks decoded PNG/WebP pixels against each source image; compressed output is not substituted beneath an unchanged image digest. + +** Native package startup and build-projection acceptance +:PROPERTIES: +:CUSTOM_ID: package-startup-projection +:ENTRY_OWNER: Justfile::test-file +:CONSUMER: t/project-formation-build-test.ss +:END: + +The native test entry is =gerbil env gxtest=. Package environment selection must +precede test-tool initialization. With this selected SDK/cohort, plain +=gerbil test= failed while expanding Core's generated POO import, even after a +native Core clean/rebuild. Establishing =GERBIL_PATH= before process startup +removed that import failure; the maintained entry delegates that selection to +Gerbil's =env= command rather than constructing another load path or resolver. +The independent compiled POO consumer also imports successfully. This evidence +does not establish a general POO export defect or a stale-product-only cause. + +The real compiled-root consumer checks the maintained formation Profile target, +one canonical =(gxc: "config")= row, identical specification identity on repeated +reads and refusal to change retained roots within one init epoch. Config is +already selected through the Profile dependency graph; it must not also appear +as a duplicate ordinary retained target. The separate native root source build +passes; switching the consumer to its public compiled import does not substitute +for that source build. The removed =profiles/library-formation= path is no longer +an asserted product. + +All test markers and error scanning remain mandatory. The 120-second test fence, +180-second build fence, per-process 2 GiB heap and machine-derived compiler +concurrency are unchanged. A zero-exit incremental package build was insufficient +to repair the startup failure and is not treated as consumer acceptance. + +A real native Core clean followed by a rebuild exceeded 180 seconds (exit 124). +The subsequent incremental recovery completed and the root source build passed; +neither result converts the failed cold rebuild into a pass. Complete cold +dependency installation remains open. Remote Linux rendering failed during +Chromium system-dependency installation with Ubuntu mirror DNS errors; macOS +passed at 4f43d48. Those infrastructure observations do not qualify Linux tests. + +*** Cold-build measurement and control +:PROPERTIES: +:CUSTOM_ID: core-cold-measurement-control +:END: + +The subsequent Core diagnostic build completed naturally in 127.41 seconds with +=GERBIL_BUILD_VERBOSE=2=. Its native stage clocks place specification completion +at 20.30 seconds, Make entry at 21.57 seconds and main return at 122.47 seconds. +It generated 274 distinct Scheme targets and scheduled 587 Gambit compilation +jobs; no repeated target-generation row was observed. This does not rule out +repeated internal expansion or metadata work. A +process observation found twelve =gsc= children, matching machine-derived +concurrency; the single/dual-worker hypothesis is not supported for this run. + +The ordinary-entry control used native clean again. Before starting, an inventory +found zero remaining Core =.ssi=, =.ssxi.ss=, dynamic objects or static Scheme +products, including the off-prefix Yuanxu prelude. Prerequisite packages and the +SDK remained installed; this is a Core-product cold control, not a fresh Parent +dependency installation or an operating-system cache reset. + +That ordinary control did not pass: the 180-second timeout escalated after the +unchanged five-second termination grace and the command ended with signal 9 at +185.32 seconds. No natural completion marker was observed. The diagnostic pass +therefore cannot establish ordinary cold-build acceptance. Instrumentation, +scheduling, input order and host load remain candidate explanations; neither a +GC diagnosis nor an accounting-based optimization has been established. The +captured resource sample and job count do not justify a heap or worker change. + +The installed Core also differs from its current open upstream PR by 188 +commits, and that PR declares a different POO revision. The candidate must be +qualified as a coherent native dependency set; upstream success cannot be +transferred to the installed cohort. Package management remains the dependency +owner. No isolated leaf pin, fabricated manifest or compatibility layer is used +to hide this outstanding qualification. + +The observed native manifest chain is: + +#+NAME: native-cohort-upgrade-owners +| Existing owner | Observed declaration | Upgrade obligation | +|----------------+----------------------+--------------------| +| Core PR 19 | A newer POO revision than the installed Core | Qualify the exact declared POO/Core pair | +| Parser PR 23 | Still selects the installed older Core | Change its own declaration and qualify its native consumers before publishing a replacement revision | +| ASCENT PR 1 | Still selects the same older Core | Qualify native rules/queries against the candidate Core before publishing its revision | +| Orgize PR 18 | Selects the older Parser candidate | Consume the qualified Parser revision and exercise real generated parser build/consumer paths | +| Parent PR 34 | Selects Parser, Orgize and ASCENT candidates | Compose their published compatible revisions through native package management | +| This Library | Selects only Parent | Promote Parent only after native install, build, metadata and actual C/C++/ASCENT consumer gates | + +An open PR name is not a version-selection instruction. Each declaration belongs +to its existing package owner; the root must not add a competing direct Core or +POO pin. Parent's optional source Core gitlink is a separate source ownership +declaration and must not silently replace the selected native package identity. +The table records investigation and required validation, not completed upgrades. + +The instrumented incremental recovery subsequently completed, but the ordinary +root source rebuild after recovery also exceeded its unchanged deadline. Earlier +successful root/consumer results remain historical observations at the recorded +baseline; they do not establish current whole-package acceptance after this +control sequence. Requalification requires a naturally completed ordinary root +build and its native metadata/consumer checks. The sampled shared host had load +averages above thirty on twelve cores; this is relevant context, not proof that +host contention alone caused the failures. No unrelated process was stopped. diff --git a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.d2 b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.d2 index 575d8bc..3458975 100644 --- a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.d2 +++ b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.d2 @@ -62,7 +62,7 @@ plans: "Scheme method declarations\nTyped verification plans; no execution" methods: "Development verification\nReal body + callers; bounded CBMC / native tests" math: "Lean / Quint correspondence\nNumeric lemmas / state-order assumptions" oracle: "Independent checks\nLiteral gold and actual source mutants\nOccupied refusal / self transfer" -closure: "Captured evidence inputs\nSource, harness, tools, bounds and configuration\nSix retained real results; five full test cases" +closure: "Captured evidence inputs\nSource, harness, tools, bounds and configuration\nEight real-source cases; independent native owner controls\nCold dependency installation remains unqualified" ascent: "ASCENT relations\nSupport, counter, pending and reuse premises" consumer: "External consuming ecosystem\nReview and current-use authorization" change: "Changed source or assumptions\nNew capture; retain old witnesses and frozen queries" diff --git a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.json b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.json index 38ad8e3..aba8eda 100644 --- a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.json +++ b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.json @@ -2,8 +2,8 @@ "status": "Design projection only; no Scheme or verifier acceptance", "sources": { "bun.lock": "641fa6fb5dd7cc87c32d15ea62a71664efe83d06b0f0f3fe8373f58fb130b346", - "docs/10-19-design/10-architecture/10.147-source-bound-c-and-cpp-contract-verification.org": "251358b226d04f2a0173e7f349e3a8ae6335f12a5eff683539b1c230f27ce6e3", - "docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.d2": "0de4c4f5b4ca75696edad61238188d7417112fff0d8264e74e5d03eb589bdd85", + "docs/10-19-design/10-architecture/10.147-source-bound-c-and-cpp-contract-verification.org": "9f39c4e219a44314a10c2c6d6ae679168f7cee33dcb0c091e79861db0199a3dd", + "docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.d2": "44c88c23c6383a9a8b8e7781fe7138abb57c96ed1ae4e6a403ccd911c3937894", "package.json": "b0c1736c46211bf763696ec088c92281cea4de6dece9644d3b647f5d746dfb53", "packages/render/examples/attribution.ts": "58f7914284a69c4ce42db61ec24c06cf9194232ed3402fc7ae12e3ded4187892", "packages/render/examples/library-boundary.ts": "8a797e2f1700589373bcc173d3c7b80cfc933fd3b8fdc29b1b6cec87b1a609b5", @@ -23,10 +23,10 @@ "lossless": true, "effort": 4 }, - "inputBytes": 503397, - "outputBytes": 224014 + "inputBytes": 534590, + "outputBytes": 237060 }, - "sha256": "b28dbcc7a994622e8f2a347ccde614eaaa6716dec4fa0a23b48d18f8d98d79ee" + "sha256": "08d89e282f973fd26d7a1a397ca851dfb9b11f899a8398267e3b29a9631c6aa4" }, "preferredRaster": "webp", "pngCompression": { @@ -36,8 +36,8 @@ "compressionLevel": 9, "adaptiveFiltering": true }, - "inputBytes": 503397, - "outputBytes": 496970, + "inputBytes": 534590, + "outputBytes": 527707, "selected": "compressed" }, "regions": {} @@ -54,104 +54,104 @@ "x": 0, "y": 0, "width": 1400, - "height": 1106.984375 + "height": 1138.984375 }, "subjects": [ { "id": "parent", "role": "default", "x": 556.4854736328125, - "y": 262.18817138671875, - "width": 202.6021728515625, - "height": 85.6507568359375 + "y": 262.1882629394531, + "width": 202.60223388671875, + "height": 85.65078735351562 }, { "id": "profile", "role": "default", - "x": 578.1608276367188, - "y": 393.57550048828125, - "width": 218.4364013671875, - "height": 85.38897705078125 + "x": 578.1607666015625, + "y": 393.5756530761719, + "width": 218.4365234375, + "height": 85.38900756835938 }, { "id": "scenario", "role": "default", - "x": 854.9517822265625, - "y": 524.993408203125, - "width": 203.1610107421875, - "height": 83.453857421875 + "x": 854.9518432617188, + "y": 524.9935302734375, + "width": 203.16119384765625, + "height": 83.4539794921875 }, { "id": "contracts", "role": "default", - "x": 250.80201721191406, - "y": 524.4169921875, - "width": 249.3784637451172, - "height": 84.132568359375 + "x": 250.80178833007812, + "y": 524.4171752929688, + "width": 249.37857055664062, + "height": 84.13262939453125 }, { "id": "plans", "role": "default", - "x": 522.828369140625, - "y": 524.60498046875, - "width": 256.45037841796875, + "x": 522.8282470703125, + "y": 524.605224609375, + "width": 256.45050048828125, "height": 84.1192626953125 }, { "id": "methods", "role": "default", - "x": 488.3865051269531, - "y": 655.3336181640625, - "width": 325.6199645996094, + "x": 488.3863830566406, + "y": 655.3339233398438, + "width": 325.6201477050781, "height": 84.178955078125 }, { "id": "math", "role": "default", - "x": 836.8213500976562, - "y": 655.275146484375, - "width": 281.31756591796875, + "x": 836.8214111328125, + "y": 655.2754516601562, + "width": 281.3177490234375, "height": 84.17138671875 }, { "id": "oracle", "role": "default", - "x": 807.847412109375, - "y": 786.9891967773438, - "width": 254.6597900390625, - "height": 115.314453125 + "x": 807.8474731445312, + "y": 786.989501953125, + "width": 254.65985107421875, + "height": 115.3145751953125 }, { "id": "closure", "role": "default", - "x": 729.6583862304688, - "y": 949.2947387695312, - "width": 307.99517822265625, - "height": 116.42706298828125 + "x": 685.6268310546875, + "y": 949.295166015625, + "width": 375.088623046875, + "height": 148.1243896484375 }, { "id": "ascent", "role": "default", - "x": 795.4906616210938, - "y": 131.58506774902344, - "width": 297.56597900390625, - "height": 85.02330017089844 + "x": 795.49072265625, + "y": 131.5850830078125, + "width": 297.566162109375, + "height": 85.02334594726562 }, { "id": "consumer", "role": "default", - "x": 854.8197021484375, - "y": 262.616455078125, - "width": 274.7335205078125, - "height": 85.08010864257812 + "x": 854.8197631835938, + "y": 262.61651611328125, + "width": 274.73370361328125, + "height": 85.08016967773438 }, { "id": "change", "role": "default", - "x": 820.1569213867188, - "y": 393.63360595703125, - "width": 344.87969970703125, - "height": 85.3089599609375 + "x": 820.156982421875, + "y": 393.6337585449219, + "width": 344.8798828125, + "height": 85.30899047851562 } ], "relations": [ @@ -193,24 +193,24 @@ }, "readability": { "minimumTextSize": 12, - "samples": 29, + "samples": 30, "requiredMinimum": 12 }, - "inputSHA256": "b7f54b147012ec58f23e94c7eaed4f296f495f7d52125140034e2a50b86b81a4", + "inputSHA256": "5bf4ce0a3d6553c8f96db27647b3439131c176772f1d7acb7a818d96575287c6", "scenes": [ { - "inputSHA256": "31d1311b741b47d9b14d121f4c339168fcc9cd73b2594fef66b27412aa9f9dfb", - "layoutSHA256": "83759a261357f43dc42d9fde8cb09663d52bedcce2f49559cab7b6435bc2d7cc", + "inputSHA256": "874e908224e1a64c025fd27379e2679c01e7f9b087c7f2e6dba8b16ae3668b64", + "layoutSHA256": "108cdd7f0c8ae20c02097c9c834dc38c1bf955062426a667f523071782508c9c", "nodes": 12, "edges": 14, - "milliseconds": 126.78108299999985 + "milliseconds": 619.1758330000002 } ], "svgSHA256": [ - "40c0cc5519c26cd7f5ba801c7021e7ce78414737721b1b72dd212c2917dd884f", - "99b53fb54dc44210216ef3b3255792e8209e88eeab73a43d26bcda4e05abb600" + "44411e144ec7caab5efd45af04696e9ddc25f16247503baf8d5995c5922256db", + "85463c8669f14e15d491ba76389fb0c1a025666d2ff96545b39788e1158b3d51" ], - "composedHTMLSHA256": "3dd41d37efce5f92035fba680632d92a412b84a5119a8e6867509a9528552938", + "composedHTMLSHA256": "a99b29de7f254c3e0c93263a2ceb7cbf29c7898ca8caa96689a275f695ad886b", "dependencies": { "@fontsource/inter": "5.3.0", "@fontsource/kalam": "5.3.0", @@ -224,32 +224,32 @@ "web-worker": "1.5.0" }, "regionSHA256": {}, - "htmlSHA256": "428394a88e1634fdd7b145825bfa4611ba5d7e45eb8a78478196014991f5c74f", + "htmlSHA256": "664d8d29e487e2ba9961c60116a3d031447912ec6688c3292ee8db40d6638c0d", "drawing": "roughjs@4.6.6", "routing": "elkjs@0.12.1", "assetSHA256": { - "@fontsource/kalam/files/kalam-latin-700-normal.woff2": "252063af6ade8b9a744cde4ddad0fc21ea53b8ba711eed121a0c2e8610ea9c93", - "@fontsource/kalam/files/kalam-latin-400-normal.woff2": "954410601a823f37e219f7930b7446f86afa15621326a7078d56fb9c910135cb" + "@fontsource/kalam/files/kalam-latin-400-normal.woff2": "954410601a823f37e219f7930b7446f86afa15621326a7078d56fb9c910135cb", + "@fontsource/kalam/files/kalam-latin-700-normal.woff2": "252063af6ade8b9a744cde4ddad0fc21ea53b8ba711eed121a0c2e8610ea9c93" }, - "pngSHA256": "f36503304cf4e9ecb5b5898ebfdd2f3b4539e09ffcf3c802f3a4589044e5db71", + "pngSHA256": "6334c3ca1fb731aa88165b97a3b401825ddc08dfb0b15956f3a8ae07c6207e9c", "browser": "156.0.8078.4", "width": 2100, - "height": 1661, + "height": 1709, "scale": 1.5, "bounds": { "model": { "x": 20, "y": 110, "width": 1360, - "height": 976.984375 + "height": 1008.984375 } } }, "rasterComparison": { - "pngBytes": 496970, - "webpBytes": 224014, + "pngBytes": 527707, + "webpBytes": 237060, "decodedPixelsEqual": true, - "decodedPixelSHA256": "617345000cadfb663979b0cbfb3f16737ea1aea6e32504a3b2b6f98afab39af7", + "decodedPixelSHA256": "974f35fc9490ab646556379b063303ff7a032558a4ed42f8c4182f2cc395d835", "preferredRaster": "webp" } } diff --git a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.png b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.png index 297d942..a9c129e 100644 Binary files a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.png and b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.png differ diff --git a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.svg b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.svg index 4d69dd2..0b562db 100644 --- a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.svg +++ b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.svg @@ -3,7 +3,7 @@ SPDX-FileCopyrightText: 2026 hardenedlinux Linux Team and Contributors SPDX-FileCopyrightText: 2014 Indian Type Foundry (info@indiantypefoundry.com) SPDX-License-Identifier: LGPL-2.1-or-later AND OFL-1.1 --> -{"renderer":{"package":"@deterministic-engineering/render","version":"1.0.2","icons":{"capture":"a647d42aa11f4e5e85d0bbf66f483f57f3c4ba3a9536362ed0eaaaae10a89cee","decision":"3535642a5b613372c3fd374151ec90aafa19b64b2d33d10b19162cad07a35c7a","document":"0bf9674a401262da8a646305cab00006954721c07765b9962e0dee1c31d560f7","evidence":"0a91b169aaa644829a054cbb94194efffaf4298f2b6f8fa8c6ec2b7b413a1766","library":"df474fa36a74016b79236fff58a980a8c18c682d1866211776e349a0eb4b2979","model":"0cfd1f9ed3873f556ace725a7b6a251ebe75d7d976567699276f34df36b2443b","obligation":"e76f4d34a7190400446c89e4e7d187762b885808a64a00c99455599d902570c5","pending":"cca7589bc3b1dcdebacb867c6836c6fc166257f05823555a268354ff9bfac00c","question":"dbf231e1568dc37189d5674d73c4bfc58a17eb8ada579b3f03bf2813d33c56f4","reference":"3814c570f79ab294252c36530de464c9364814b797afb862d9c62e728a8660fc","selection":"82b4ab6faf195fea0a891c35268e61c186e93e7c6a9d7967a4f6a73dbf25ae7f"}},"evidence":[],"presentation":{"options":{"elk.direction":"DOWN","elk.layered.spacing.nodeNodeBetweenLayers":"48"},"edgeLabels":false},"drawing":{"mode":"sketch","options":{"seed":29,"roughness":1.3,"strokeWidth":1.2,"fillStyle":"hachure","hachureGap":9,"fillWeight":0.6}},"fonts":[{"family":"Kalam","weight":400,"source":"@fontsource/kalam/files/kalam-latin-400-normal.woff2"},{"family":"Kalam","weight":700,"source":"@fontsource/kalam/files/kalam-latin-700-normal.woff2"}],"palette":{"background":"#FAF7EE","surface":"#FFFDF7","ink":"#283E43","muted":"#63716F","border":"#ADBBB5","accent":"#287F79","secondary":"#946B42","tint":"#EDF4E9","secondaryTint":"#F6EDD8","onAccent":"#FFFFFF","supported":"#237C69","pending":"#9A6C25","conflict":"#A84C60"},"inputSHA256":"5bf4ce0a3d6553c8f96db27647b3439131c176772f1d7acb7a818d96575287c6","model":{"subjects":[{"id":"parent","type":"rectangle","level":1,"label":"Parent Library\nModels, rules and obligations"},{"id":"profile","type":"rectangle","level":1,"label":"Profile Module\nABI, macros and method bounds"},{"id":"scenario","type":"rectangle","level":1,"label":"Consumer Scenario\nReal source, callers and faults"},{"id":"contracts","type":"rectangle","level":1,"label":"Source contracts\nPre/postconditions, writes and owners"},{"id":"plans","type":"rectangle","level":1,"label":"Scheme method declarations\nTyped verification plans; no execution"},{"id":"methods","type":"rectangle","level":1,"label":"Development verification\nReal body + callers; bounded CBMC / native tests"},{"id":"math","type":"rectangle","level":1,"label":"Lean / Quint correspondence\nNumeric lemmas / state-order assumptions"},{"id":"oracle","type":"rectangle","level":1,"label":"Independent checks\nLiteral gold and actual source mutants\nOccupied refusal / self transfer"},{"id":"closure","type":"rectangle","level":1,"label":"Captured evidence inputs\nSource, harness, tools, bounds and configuration\nEight real-source cases; independent native owner controls\nCold dependency installation remains unqualified"},{"id":"ascent","type":"rectangle","level":1,"label":"ASCENT relations\nSupport, counter, pending and reuse premises"},{"id":"consumer","type":"rectangle","level":1,"label":"External consuming ecosystem\nReview and current-use authorization"},{"id":"change","type":"rectangle","level":1,"label":"Changed source or assumptions\nNew capture; retain old witnesses and frozen queries"}],"relations":[{"id":"(parent -> profile)[0]","src":"parent","dst":"profile","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(profile -> scenario)[0]","src":"profile","dst":"scenario","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(parent -> contracts)[0]","src":"parent","dst":"contracts","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(profile -> plans)[0]","src":"profile","dst":"plans","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(scenario -> methods)[0]","src":"scenario","dst":"methods","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(contracts -> methods)[0]","src":"contracts","dst":"methods","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(plans -> methods)[0]","src":"plans","dst":"methods","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(math -> oracle)[0]","src":"math","dst":"oracle","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(methods -> oracle)[0]","src":"methods","dst":"oracle","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(oracle -> closure)[0]","src":"oracle","dst":"closure","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(closure -> ascent)[0]","src":"closure","dst":"ascent","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(ascent -> consumer)[0]","src":"ascent","dst":"consumer","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(consumer -> change)[0]","src":"consumer","dst":"change","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(change -> scenario)[0]","src":"change","dst":"scenario","label":"","srcArrow":"none","dstArrow":"triangle"}]},"view":{"source":"docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.d2","title":"Source contracts: from Library obligation to scoped evidence","purpose":"workflow","kind":"library-workflow","question":{"subjectRefs":["parent","methods","ascent"],"ref":"ownership","text":"How does a consumer check actual C/C++ code without turning the Library into a Runtime?","focusRefs":["authority","declaration"]},"basis":{"captureRef":"design-candidate:90.139-source-bound-c-and-cpp-contract-verification","modelRefs":["docs/10-19-design/10-architecture/10.147-source-bound-c-and-cpp-contract-verification.org"],"obligationRefs":[],"evidenceRefs":[]}},"questions":[{"subjectRefs":["parent","methods","ascent"],"ref":"ownership","text":"How does a consumer check actual C/C++ code without turning the Library into a Runtime?","focusRefs":["authority","declaration"]}],"references":{"authority":"docs/10-19-design/10-architecture/10.147-source-bound-c-and-cpp-contract-verification.org","declaration":"docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.d2"},"sourceSHA256":{"bun.lock":"641fa6fb5dd7cc87c32d15ea62a71664efe83d06b0f0f3fe8373f58fb130b346","docs/10-19-design/10-architecture/10.147-source-bound-c-and-cpp-contract-verification.org":"9f39c4e219a44314a10c2c6d6ae679168f7cee33dcb0c091e79861db0199a3dd","docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.d2":"44c88c23c6383a9a8b8e7781fe7138abb57c96ed1ae4e6a403ccd911c3937894","package.json":"b0c1736c46211bf763696ec088c92281cea4de6dece9644d3b647f5d746dfb53","packages/render/examples/attribution.ts":"58f7914284a69c4ce42db61ec24c06cf9194232ed3402fc7ae12e3ded4187892","packages/render/examples/library-boundary.ts":"8a797e2f1700589373bcc173d3c7b80cfc933fd3b8fdc29b1b6cec87b1a609b5","packages/render/src/diagram.ts":"c0e831979970fc90c418820e4462d2097492811f10c7619dab1469b31194a32b","packages/render/src/export.ts":"52f5eda85f800d16f504556e3dad95ec6441f08bb753c674f5d10146f293967c","packages/render/src/figure.ts":"5e26825463ff0017dbd465ada1048a68994dee17a69bacc13d6806f416ca7972","packages/render/src/model-view.ts":"8a2c575c8c1a2f09770fb4cfdbe6718121a66c4fe8b32c97f7b2d88c9f7a57fc","packages/render/src/png.ts":"8d1da534a9fe8d8f27fccbf61b7e4ec0e8fd6754970c09c42105381b32b34d54","packages/render/src/scene-export.ts":"f5ba1250e1fe5e6c952ada3bc501979e4f9b8a8a0506a62a6e4cebdaf256a217","packages/render/src/webp.ts":"67dcfc1f1e333ae933f0f9d48b10640ba11b81fad394ff3361ca9b5f952223e0"},"rendered":{"observation":{"canvas":{"x":0,"y":0,"width":1400,"height":1138.984375},"subjects":[{"id":"parent","role":"default","x":556.4854736328125,"y":262.1882629394531,"width":202.60223388671875,"height":85.65078735351562},{"id":"profile","role":"default","x":578.1607666015625,"y":393.5756530761719,"width":218.4365234375,"height":85.38900756835938},{"id":"scenario","role":"default","x":854.9518432617188,"y":524.9935302734375,"width":203.16119384765625,"height":83.4539794921875},{"id":"contracts","role":"default","x":250.80178833007812,"y":524.4171752929688,"width":249.37857055664062,"height":84.13262939453125},{"id":"plans","role":"default","x":522.8282470703125,"y":524.605224609375,"width":256.45050048828125,"height":84.1192626953125},{"id":"methods","role":"default","x":488.3863830566406,"y":655.3339233398438,"width":325.6201477050781,"height":84.178955078125},{"id":"math","role":"default","x":836.8214111328125,"y":655.2754516601562,"width":281.3177490234375,"height":84.17138671875},{"id":"oracle","role":"default","x":807.8474731445312,"y":786.989501953125,"width":254.65985107421875,"height":115.3145751953125},{"id":"closure","role":"default","x":685.6268310546875,"y":949.295166015625,"width":375.088623046875,"height":148.1243896484375},{"id":"ascent","role":"default","x":795.49072265625,"y":131.5850830078125,"width":297.566162109375,"height":85.02334594726562},{"id":"consumer","role":"default","x":854.8197631835938,"y":262.61651611328125,"width":274.73370361328125,"height":85.08016967773438},{"id":"change","role":"default","x":820.156982421875,"y":393.6337585449219,"width":344.8798828125,"height":85.30899047851562}],"relations":["(parent -> profile)[0]","(profile -> scenario)[0]","(parent -> contracts)[0]","(profile -> plans)[0]","(scenario -> methods)[0]","(contracts -> methods)[0]","(plans -> methods)[0]","(math -> oracle)[0]","(methods -> oracle)[0]","(oracle -> closure)[0]","(closure -> ascent)[0]","(ascent -> consumer)[0]","(consumer -> change)[0]","(change -> scenario)[0]"],"headings":[{"role":"title","x":20,"y":20,"width":1360,"height":48},{"role":"question","x":20,"y":68,"width":1360,"height":34}]},"readability":{"minimumTextSize":12,"samples":30,"requiredMinimum":12},"bounds":{"model":{"x":20,"y":110,"width":1360,"height":1008.984375}}}}Source contracts: from Library obligation to scoped evidence?How does a consumer check actual C/C++ code without turning the Library into a Runtime?{"graph":{"id":"model-root","children":[{"id":"parent"},{"id":"profile"},{"id":"scenario"},{"id":"contracts"},{"id":"plans"},{"id":"methods"},{"id":"math"},{"id":"oracle"},{"id":"closure"},{"id":"ascent"},{"id":"consumer"},{"id":"change"}],"layoutOptions":{"elk.spacing.nodeNode":"24","elk.layered.spacing.nodeNodeBetweenLayers":"48","elk.direction":"DOWN"},"edges":[{"id":"(parent -> profile)[0]","sources":["parent"],"targets":["profile"]},{"id":"(profile -> scenario)[0]","sources":["profile"],"targets":["scenario"]},{"id":"(parent -> contracts)[0]","sources":["parent"],"targets":["contracts"]},{"id":"(profile -> plans)[0]","sources":["profile"],"targets":["plans"]},{"id":"(scenario -> methods)[0]","sources":["scenario"],"targets":["methods"]},{"id":"(contracts -> methods)[0]","sources":["contracts"],"targets":["methods"]},{"id":"(plans -> methods)[0]","sources":["plans"],"targets":["methods"]},{"id":"(math -> oracle)[0]","sources":["math"],"targets":["oracle"]},{"id":"(methods -> oracle)[0]","sources":["methods"],"targets":["oracle"]},{"id":"(oracle -> closure)[0]","sources":["oracle"],"targets":["closure"]},{"id":"(closure -> ascent)[0]","sources":["closure"],"targets":["ascent"]},{"id":"(ascent -> consumer)[0]","sources":["ascent"],"targets":["consumer"]},{"id":"(consumer -> change)[0]","sources":["consumer"],"targets":["change"]},{"id":"(change -> scenario)[0]","sources":["change"],"targets":["scenario"]}]},"marker":"arrow-3445a32acd5d"}Parent LibraryModels, rules and obligationsProfile ModuleABI, macros and method boundsConsumer ScenarioReal source, callers and faultsSource contractsPre/postconditions, writes and ownersScheme method declarationsTyped verification plans; no executionDevelopment verificationReal body + callers; bounded CBMC / native testsLean / Quint correspondenceNumeric lemmas / state-order assumptionsIndependent checksLiteral gold and actual source mutantsOccupied refusal / self transferCaptured evidence inputsSource, harness, tools, bounds and configurationEight real-source cases; independent native owner controlsCold dependency installation remains unqualifiedASCENT relationsSupport, counter, pending and reuse premisesExternal consuming ecosystemReview and current-use authorizationChanged source or assumptionsNew capture; retain old witnesses and frozen queries \ No newline at end of file diff --git a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.webp b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.webp index 5b45686..b0e7ba7 100644 Binary files a/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.webp and b/docs/90-99-views/90-architecture-views/90.139-source-bound-c-and-cpp-contract-verification.webp differ diff --git a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.d2 b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.d2 index 9cc7bdf..5ec4042 100644 --- a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.d2 +++ b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.d2 @@ -39,7 +39,9 @@ vars: {d2-config: {data: {figure: |json "config": "config.ss", "method-config": "library/source-contracts/config.ss", "plans": "library/source-contracts/methods.ss", - "native-case": "t/source-contract-owner-config-test.ss" + "native-case": "t/source-contract-owner-config-test.ss", + "test-entry": "Justfile", + "build-consumer": "t/project-formation-build-test.ss" }, "basis": { "captureRef": "design-candidate:90.140-flat-declarative-library-boundary", @@ -74,9 +76,9 @@ plans: "Source-contract declarations\nConfig: enable + typed settings\nFinal-sco rules: "ASCENT declarations\nObligations and evidence relations" build: "Root build.ss\ninit.exports std-make-spec only\nNative build and compiled metadata pass" sysml: "SysML declarations\nResponsibilities and relationships" -development: "Development boundary: t/*-test.ss\nActual tools, independent gold and real subjects" +development: "Development boundary: t/*-test.ss\nSDK env before gxtest initialization\nActual tools, independent gold and real subjects" external: "External consuming ecosystem\nMarlin / Aitia / other Runtime\nSessions, approval and recovery" -pending: "Open acceptance gates\nCandidate cohort / full install / CI\nNative recursive defaults and typed language projections\nCurrent whole-product acceptance pending" +pending: "Open acceptance gates\nCore cold rebuild exceeded 180 seconds\nFull dependency install / candidate cohort\nLinux CI dependency installation unqualified" example: "User Examples\nC / C++ values in one programs tree\nInternal inheritance stays in Library" example -> profiles: "recursive defaults; native admission" package -> selection diff --git a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.json b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.json index dd4c94f..b06c58d 100644 --- a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.json +++ b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.json @@ -5,11 +5,12 @@ "bun.lock": "641fa6fb5dd7cc87c32d15ea62a71664efe83d06b0f0f3fe8373f58fb130b346", "config.ss": "3e9865637939ade5b7024295db5a6119df325333e8d8303a16294ef583b18cd2", "docs/10-19-design/10-architecture/10.148-flat-declarative-library-boundary.org": "9c05b32cb0d8aa82cd1fa624a791aaeb805af23d247b66ed31385266405121d8", - "docs/10-19-design/10-architecture/10.149-unified-language-engineering-configuration.org": "a775a482eec08d7dc84187d2d63e4b020a3f54b0621b159e8ea0949366ffeac5", - "docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.d2": "ead1384c6b69bb494e0379f65579ed9199d648ac160e41f7446c5cec36501429", + "docs/10-19-design/10-architecture/10.149-unified-language-engineering-configuration.org": "da4be3befe16528ddf72d0e1dce0a4c510ed5d1e78867abee95c5fb8d14ac6f5", + "docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.d2": "031669952f79ea36c3e54aaa3271b25ccf7fb554ac87ebb10760efc0f6f04a9d", "examples/programs.ss": "5452aaca51b2df0aefd69b5e7e8ba57f4e016245323023256fcb03f84d49e43d", "gerbil.pkg": "413236e4c63a6a5dddac316be86998f32b27e45ecfd5d66f38fe96ec646d4c7b", "init.ss": "964584fb153d68ea2d03f3ca082d80cbcf631ddf61364fc6d18580b05237b688", + "Justfile": "6c29bbc212505fb22c959b2c108fa47e63eff076e846645f7cd6edb1ef32291c", "library/source-contract-profiles/interface.ss": "4ce4d3f31549582cd20e7ff4a17912516f88e5fcb05a56e76666eb7ff1312dac", "library/source-contracts/config.ss": "1641ede3f3e85e5e64e74c41a7f7a29e7322aa8dccc6034fdf54362807ae9779", "library/source-contracts/methods.ss": "ecbc50f99dbc8f63e063b6019196d2d7a967922a184ad0f3dd594e5e84ffcb55", @@ -23,6 +24,7 @@ "packages/render/src/png.ts": "8d1da534a9fe8d8f27fccbf61b7e4ec0e8fd6754970c09c42105381b32b34d54", "packages/render/src/scene-export.ts": "f5ba1250e1fe5e6c952ada3bc501979e4f9b8a8a0506a62a6e4cebdaf256a217", "packages/render/src/webp.ts": "67dcfc1f1e333ae933f0f9d48b10640ba11b81fad394ff3361ca9b5f952223e0", + "t/project-formation-build-test.ss": "fe91d78754ccb362058fdff6e49aba0c7e44c1488912985b44d544cc1e96331b", "t/source-contract-owner-config-test.ss": "4546d70c1447fc76c8ecff97efb9085787218514aa08bdd7fcb5e07f889f1220" }, "receipt": { @@ -33,10 +35,10 @@ "lossless": true, "effort": 4 }, - "inputBytes": 640032, - "outputBytes": 280408 + "inputBytes": 640565, + "outputBytes": 281262 }, - "sha256": "a65e229f986761d1c51d1e408560a99ca47a8cd8fef2d64bc66f77e79b42205a" + "sha256": "1c656ef38c0300ff33c26afa6b5aeb09388aebc894f8542314d566b1c3ae3f08" }, "preferredRaster": "webp", "pngCompression": { @@ -46,8 +48,8 @@ "compressionLevel": 9, "adaptiveFiltering": true }, - "inputBytes": 640032, - "outputBytes": 632815, + "inputBytes": 640565, + "outputBytes": 632708, "selected": "compressed" }, "regions": {} @@ -64,112 +66,112 @@ "x": 0, "y": 0, "width": 1400, - "height": 1298.984375 + "height": 1299 }, "subjects": [ { "id": "package", "role": "default", - "x": 584.8258666992188, - "y": 131.19033813476562, - "width": 217.24951171875, - "height": 85.65093994140625 + "x": 585.15771484375, + "y": 131.19061279296875, + "width": 217.25238037109375, + "height": 85.652099609375 }, { "id": "selection", "role": "default", - "x": 587.50146484375, - "y": 262.5780029296875, - "width": 215.47796630859375, - "height": 121.61477661132812 + "x": 587.8333740234375, + "y": 262.5800476074219, + "width": 215.48077392578125, + "height": 121.61639404296875 }, { "id": "domains", "role": "default", - "x": 339.1335144042969, - "y": 445.1955261230469, - "width": 230.80770874023438, - "height": 83.45413208007812 + "x": 339.4620361328125, + "y": 445.20001220703125, + "width": 230.810791015625, + "height": 83.45526123046875 }, { "id": "specialization", "role": "default", - "x": 408.1398620605469, - "y": 588.4171752929688, - "width": 262.5001525878906, - "height": 84.1328125 + "x": 408.46929931640625, + "y": 588.423583984375, + "width": 262.50360107421875, + "height": 84.1339111328125 }, { "id": "profiles", "role": "default", - "x": 818.1651000976562, - "y": 588.6004638671875, - "width": 285.45062255859375, - "height": 116.286865234375 + "x": 818.5, + "y": 588.6068115234375, + "width": 285.4544677734375, + "height": 116.2884521484375 }, { "id": "plans", "role": "default", - "x": 832.2224731445312, - "y": 751.3338012695312, - "width": 257.39154052734375, - "height": 148.05426025390625 + "x": 832.5575561523438, + "y": 751.3423461914062, + "width": 257.39508056640625, + "height": 148.0562744140625 }, { "id": "rules", "role": "default", - "x": 284.42803955078125, - "y": 793.94140625, - "width": 225.56118774414062, - "height": 83.87005615234375 + "x": 284.7558288574219, + "y": 793.9505615234375, + "width": 225.564208984375, + "height": 83.87115478515625 }, { "id": "build", "role": "default", - "x": 593.5250244140625, - "y": 425.99578857421875, - "width": 269.74957275390625, - "height": 115.31475830078125 + "x": 593.85693359375, + "y": 426, + "width": 269.753173828125, + "height": 115.31634521484375 }, { "id": "sysml", "role": "default", - "x": 307.33856201171875, - "y": 294.52581787109375, - "width": 218.69927978515625, - "height": 83.755126953125 + "x": 307.6666564941406, + "y": 294.5283203125, + "width": 218.70217895507812, + "height": 83.7562255859375 }, { "id": "development", "role": "default", - "x": 797.33203125, - "y": 957.258544921875, - "width": 311.999755859375, - "height": 85.0057373046875 + "x": 797.0253295898438, + "y": 946.6032104492188, + "width": 312.64532470703125, + "height": 120.94952392578125 }, { "id": "external", "role": "default", - "x": 269.3357238769531, - "y": 946.6077270507812, - "width": 275.6835632324219, - "height": 121.00811767578125 + "x": 269.6632995605469, + "y": 946.618896484375, + "width": 275.6872863769531, + "height": 121.009765625 }, { "id": "pending", "role": "default", - "x": 773.3323364257812, - "y": 1109.624755859375, - "width": 360.25848388671875, - "height": 151.124755859375 + "x": 809.6666870117188, + "y": 1109.63818359375, + "width": 287.15203857421875, + "height": 151.126708984375 }, { "id": "example", "role": "default", - "x": 885.8997802734375, - "y": 425.4309997558594, - "width": 243.9129638671875, - "height": 115.56326293945312 + "x": 886.235595703125, + "y": 425.4352111816406, + "width": 243.916259765625, + "height": 115.56478881835938 } ], "relations": [ @@ -211,24 +213,24 @@ }, "readability": { "minimumTextSize": 12, - "samples": 38, + "samples": 39, "requiredMinimum": 12 }, - "inputSHA256": "d756bccc4b33d41fca72f7ee2535fef0f8774682d1aaf238d929f3e986e155d7", + "inputSHA256": "52c04d0323c28449aa93d8973a1ff6b99899fe65dfc1df733be7af6865da8040", "scenes": [ { - "inputSHA256": "777ef5defec905c56b80b24e2a7c2331ee455dd9caea1302e8759dafb8900834", - "layoutSHA256": "e63a5885f888a01ebc12b9077f050fade5df98a1891c1587c771254cc212162a", + "inputSHA256": "8b96a10f10950bc45aefa49be93fd6998fb8461144a9f551493939232dc8dabc", + "layoutSHA256": "ddab369f30ec64346f9e5edcf177b95a8bb09909745c5e1f9005d2d364b5424c", "nodes": 13, "edges": 14, - "milliseconds": 729.3841250000005 + "milliseconds": 500.9772920000005 } ], "svgSHA256": [ - "b139564be8edad607f3943b11f167d79ee60e51fdffb09600d1b85feaf570701", - "f6ac725e9a3542525879ea675c949d4b56b4a67c8648b580284f14ebc7af457c" + "cb393bed093fbbe3bf252da4163c47a5465f037fa542cdaea252d59a27b9eca4", + "1fc9deebce76386549ee45720d9a9b7676a202bf2dd23a447c3e37baec2962b0" ], - "composedHTMLSHA256": "2a3ab28969f07c7956efa37852517253b4b0c220a9ababf1118045f763c76049", + "composedHTMLSHA256": "baa7847099279fed78b9bc9cb78db236e089c6cc176c77bdf6a434837a549ba3", "dependencies": { "@fontsource/inter": "5.3.0", "@fontsource/kalam": "5.3.0", @@ -242,14 +244,14 @@ "web-worker": "1.5.0" }, "regionSHA256": {}, - "htmlSHA256": "20e3453330a4393e6801fc862c3557a025515848fd512df3bae6661c7d0a76b3", + "htmlSHA256": "3d3553f2c4c27392c6bc800ce1b9d69beeb8b0eefde8372a2fd7b6481ff4b4ec", "drawing": "roughjs@4.6.6", "routing": "elkjs@0.12.1", "assetSHA256": { - "@fontsource/kalam/files/kalam-latin-700-normal.woff2": "252063af6ade8b9a744cde4ddad0fc21ea53b8ba711eed121a0c2e8610ea9c93", - "@fontsource/kalam/files/kalam-latin-400-normal.woff2": "954410601a823f37e219f7930b7446f86afa15621326a7078d56fb9c910135cb" + "@fontsource/kalam/files/kalam-latin-400-normal.woff2": "954410601a823f37e219f7930b7446f86afa15621326a7078d56fb9c910135cb", + "@fontsource/kalam/files/kalam-latin-700-normal.woff2": "252063af6ade8b9a744cde4ddad0fc21ea53b8ba711eed121a0c2e8610ea9c93" }, - "pngSHA256": "9fd31b8e30f5619234dee8ed571d7c3613f8cb31470fb5b8073dfa63e4a51ebf", + "pngSHA256": "480196883d48a6092940bbe687ceaa97635bfbbe9a912be31c570277bab69896", "browser": "156.0.8078.4", "width": 2100, "height": 1949, @@ -259,15 +261,15 @@ "x": 20, "y": 110, "width": 1360, - "height": 1168.984375 + "height": 1169 } } }, "rasterComparison": { - "pngBytes": 632815, - "webpBytes": 280408, + "pngBytes": 632708, + "webpBytes": 281262, "decodedPixelsEqual": true, - "decodedPixelSHA256": "e6b31a9a24cd72b8d8089b9db1d4c42e997052bb3b29c16101239dc06f40ee80", + "decodedPixelSHA256": "e60a8fcd823dca0e6ef9432deb8615357c5ae54bec9e2eba07e58fef6423e10b", "preferredRaster": "webp" } } diff --git a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.png b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.png index 1c703e9..fbf4f5e 100644 Binary files a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.png and b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.png differ diff --git a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.svg b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.svg index 5730c89..33e672b 100644 --- a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.svg +++ b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.svg @@ -3,7 +3,7 @@ SPDX-FileCopyrightText: 2026 hardenedlinux Linux Team and Contributors SPDX-FileCopyrightText: 2014 Indian Type Foundry (info@indiantypefoundry.com) SPDX-License-Identifier: LGPL-2.1-or-later AND OFL-1.1 --> -{"renderer":{"package":"@deterministic-engineering/render","version":"1.0.2","icons":{"capture":"a647d42aa11f4e5e85d0bbf66f483f57f3c4ba3a9536362ed0eaaaae10a89cee","decision":"3535642a5b613372c3fd374151ec90aafa19b64b2d33d10b19162cad07a35c7a","document":"0bf9674a401262da8a646305cab00006954721c07765b9962e0dee1c31d560f7","evidence":"0a91b169aaa644829a054cbb94194efffaf4298f2b6f8fa8c6ec2b7b413a1766","library":"df474fa36a74016b79236fff58a980a8c18c682d1866211776e349a0eb4b2979","model":"0cfd1f9ed3873f556ace725a7b6a251ebe75d7d976567699276f34df36b2443b","obligation":"e76f4d34a7190400446c89e4e7d187762b885808a64a00c99455599d902570c5","pending":"cca7589bc3b1dcdebacb867c6836c6fc166257f05823555a268354ff9bfac00c","question":"dbf231e1568dc37189d5674d73c4bfc58a17eb8ada579b3f03bf2813d33c56f4","reference":"3814c570f79ab294252c36530de464c9364814b797afb862d9c62e728a8660fc","selection":"82b4ab6faf195fea0a891c35268e61c186e93e7c6a9d7967a4f6a73dbf25ae7f"}},"evidence":[],"presentation":{"options":{"elk.direction":"DOWN","elk.layered.spacing.nodeNodeBetweenLayers":"48"},"edgeLabels":false},"drawing":{"mode":"sketch","options":{"seed":29,"roughness":1.3,"strokeWidth":1.2,"fillStyle":"hachure","hachureGap":9,"fillWeight":0.6}},"fonts":[{"family":"Kalam","weight":400,"source":"@fontsource/kalam/files/kalam-latin-400-normal.woff2"},{"family":"Kalam","weight":700,"source":"@fontsource/kalam/files/kalam-latin-700-normal.woff2"}],"palette":{"background":"#FAF7EE","surface":"#FFFDF7","ink":"#283E43","muted":"#63716F","border":"#ADBBB5","accent":"#287F79","secondary":"#946B42","tint":"#EDF4E9","secondaryTint":"#F6EDD8","onAccent":"#FFFFFF","supported":"#237C69","pending":"#9A6C25","conflict":"#A84C60"},"inputSHA256":"52c04d0323c28449aa93d8973a1ff6b99899fe65dfc1df733be7af6865da8040","model":{"subjects":[{"id":"package","type":"rectangle","level":1,"label":"gerbil.pkg\nOne AI Agentic Lab dependency"},{"id":"selection","type":"rectangle","level":1,"label":"Root init.ss\nFlat library/\u003cmodule-name>/\nNative tag Profiles and yuanxu!"},{"id":"domains","type":"rectangle","level":1,"label":"Parent domain Modules\nCapacity, lifetime and organization"},{"id":"specialization","type":"rectangle","level":1,"label":"Language-specialized Modules\nRust / Tokio / Rayon correspondence"},{"id":"profiles","type":"rectangle","level":1,"label":"Profile Modules\nprograms / languages / enable / settings\nNative config-defaults + sealed Config Type"},{"id":"plans","type":"rectangle","level":1,"label":"Source-contract declarations\nConfig: enable + typed settings\nFinal-scope plan / disabled refusal\nStep-derived external tool closure"},{"id":"rules","type":"rectangle","level":1,"label":"ASCENT declarations\nObligations and evidence relations"},{"id":"build","type":"rectangle","level":1,"label":"Root build.ss\ninit.exports std-make-spec only\nNative build and compiled metadata pass"},{"id":"sysml","type":"rectangle","level":1,"label":"SysML declarations\nResponsibilities and relationships"},{"id":"development","type":"rectangle","level":1,"label":"Development boundary: t/*-test.ss\nSDK env before gxtest initialization\nActual tools, independent gold and real subjects"},{"id":"external","type":"rectangle","level":1,"label":"External consuming ecosystem\nMarlin / Aitia / other Runtime\nSessions, approval and recovery"},{"id":"pending","type":"rectangle","level":1,"label":"Open acceptance gates\nCore cold rebuild exceeded 180 seconds\nFull dependency install / candidate cohort\nLinux CI dependency installation unqualified"},{"id":"example","type":"rectangle","level":1,"label":"User Examples\nC / C++ values in one programs tree\nInternal inheritance stays in Library"}],"relations":[{"id":"(example -> profiles)[0]","src":"example","dst":"profiles","label":"recursive defaults; native admission","srcArrow":"none","dstArrow":"triangle"},{"id":"(package -> selection)[0]","src":"package","dst":"selection","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(selection -> domains)[0]","src":"selection","dst":"domains","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(selection -> build)[0]","src":"selection","dst":"build","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(sysml -> domains)[0]","src":"sysml","dst":"domains","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(domains -> specialization)[0]","src":"domains","dst":"specialization","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(domains -> profiles)[0]","src":"domains","dst":"profiles","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(profiles -> plans)[0]","src":"profiles","dst":"plans","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(domains -> rules)[0]","src":"domains","dst":"rules","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(plans -> development)[0]","src":"plans","dst":"development","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(rules -> development)[0]","src":"rules","dst":"development","label":"","srcArrow":"none","dstArrow":"triangle"},{"id":"(plans -> external)[0]","src":"plans","dst":"external","label":"declarations","srcArrow":"none","dstArrow":"triangle"},{"id":"(rules -> external)[0]","src":"rules","dst":"external","label":"data contracts","srcArrow":"none","dstArrow":"triangle"},{"id":"(development -> pending)[0]","src":"development","dst":"pending","label":"","srcArrow":"none","dstArrow":"triangle"}]},"view":{"source":"docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.d2","title":"Declarative Library: ownership and selection","purpose":"architecture","kind":"library-architecture","question":{"subjectRefs":["selection","plans","external"],"ref":"ownership","text":"Which responsibilities belong to the Library, its development tools and consuming ecosystems?","focusRefs":["authority","declaration"]},"basis":{"captureRef":"design-candidate:90.140-flat-declarative-library-boundary","modelRefs":["docs/10-19-design/10-architecture/10.148-flat-declarative-library-boundary.org"],"obligationRefs":[],"evidenceRefs":[]}},"questions":[{"subjectRefs":["selection","plans","external"],"ref":"ownership","text":"Which responsibilities belong to the Library, its development tools and consuming ecosystems?","focusRefs":["authority","declaration"]}],"references":{"authority":"docs/10-19-design/10-architecture/10.148-flat-declarative-library-boundary.org","build":"build.ss","build-consumer":"t/project-formation-build-test.ss","config":"config.ss","config-contract":"docs/10-19-design/10-architecture/10.149-unified-language-engineering-configuration.org","declaration":"docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.d2","example":"examples/programs.ss","method-config":"library/source-contracts/config.ss","native-case":"t/source-contract-owner-config-test.ss","package":"gerbil.pkg","plans":"library/source-contracts/methods.ss","profiles":"library/source-contract-profiles/interface.ss","program-config":"config.ss","selection":"init.ss","test-entry":"Justfile"},"sourceSHA256":{"build.ss":"7ecd0d052e15ef7ccdcb595421f18f29a82534bb3c89f0af80cc1532ff683ddc","bun.lock":"641fa6fb5dd7cc87c32d15ea62a71664efe83d06b0f0f3fe8373f58fb130b346","config.ss":"3e9865637939ade5b7024295db5a6119df325333e8d8303a16294ef583b18cd2","docs/10-19-design/10-architecture/10.148-flat-declarative-library-boundary.org":"9c05b32cb0d8aa82cd1fa624a791aaeb805af23d247b66ed31385266405121d8","docs/10-19-design/10-architecture/10.149-unified-language-engineering-configuration.org":"da4be3befe16528ddf72d0e1dce0a4c510ed5d1e78867abee95c5fb8d14ac6f5","docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.d2":"031669952f79ea36c3e54aaa3271b25ccf7fb554ac87ebb10760efc0f6f04a9d","examples/programs.ss":"5452aaca51b2df0aefd69b5e7e8ba57f4e016245323023256fcb03f84d49e43d","gerbil.pkg":"413236e4c63a6a5dddac316be86998f32b27e45ecfd5d66f38fe96ec646d4c7b","init.ss":"964584fb153d68ea2d03f3ca082d80cbcf631ddf61364fc6d18580b05237b688","Justfile":"6c29bbc212505fb22c959b2c108fa47e63eff076e846645f7cd6edb1ef32291c","library/source-contract-profiles/interface.ss":"4ce4d3f31549582cd20e7ff4a17912516f88e5fcb05a56e76666eb7ff1312dac","library/source-contracts/config.ss":"1641ede3f3e85e5e64e74c41a7f7a29e7322aa8dccc6034fdf54362807ae9779","library/source-contracts/methods.ss":"ecbc50f99dbc8f63e063b6019196d2d7a967922a184ad0f3dd594e5e84ffcb55","package.json":"b0c1736c46211bf763696ec088c92281cea4de6dece9644d3b647f5d746dfb53","packages/render/examples/attribution.ts":"58f7914284a69c4ce42db61ec24c06cf9194232ed3402fc7ae12e3ded4187892","packages/render/examples/library-boundary.ts":"8a797e2f1700589373bcc173d3c7b80cfc933fd3b8fdc29b1b6cec87b1a609b5","packages/render/src/diagram.ts":"c0e831979970fc90c418820e4462d2097492811f10c7619dab1469b31194a32b","packages/render/src/export.ts":"52f5eda85f800d16f504556e3dad95ec6441f08bb753c674f5d10146f293967c","packages/render/src/figure.ts":"5e26825463ff0017dbd465ada1048a68994dee17a69bacc13d6806f416ca7972","packages/render/src/model-view.ts":"8a2c575c8c1a2f09770fb4cfdbe6718121a66c4fe8b32c97f7b2d88c9f7a57fc","packages/render/src/png.ts":"8d1da534a9fe8d8f27fccbf61b7e4ec0e8fd6754970c09c42105381b32b34d54","packages/render/src/scene-export.ts":"f5ba1250e1fe5e6c952ada3bc501979e4f9b8a8a0506a62a6e4cebdaf256a217","packages/render/src/webp.ts":"67dcfc1f1e333ae933f0f9d48b10640ba11b81fad394ff3361ca9b5f952223e0","t/project-formation-build-test.ss":"fe91d78754ccb362058fdff6e49aba0c7e44c1488912985b44d544cc1e96331b","t/source-contract-owner-config-test.ss":"4546d70c1447fc76c8ecff97efb9085787218514aa08bdd7fcb5e07f889f1220"},"rendered":{"observation":{"canvas":{"x":0,"y":0,"width":1400,"height":1299},"subjects":[{"id":"package","role":"default","x":585.15771484375,"y":131.19061279296875,"width":217.25238037109375,"height":85.652099609375},{"id":"selection","role":"default","x":587.8333740234375,"y":262.5800476074219,"width":215.48077392578125,"height":121.61639404296875},{"id":"domains","role":"default","x":339.4620361328125,"y":445.20001220703125,"width":230.810791015625,"height":83.45526123046875},{"id":"specialization","role":"default","x":408.46929931640625,"y":588.423583984375,"width":262.50360107421875,"height":84.1339111328125},{"id":"profiles","role":"default","x":818.5,"y":588.6068115234375,"width":285.4544677734375,"height":116.2884521484375},{"id":"plans","role":"default","x":832.5575561523438,"y":751.3423461914062,"width":257.39508056640625,"height":148.0562744140625},{"id":"rules","role":"default","x":284.7558288574219,"y":793.9505615234375,"width":225.564208984375,"height":83.87115478515625},{"id":"build","role":"default","x":593.85693359375,"y":426,"width":269.753173828125,"height":115.31634521484375},{"id":"sysml","role":"default","x":307.6666564941406,"y":294.5283203125,"width":218.70217895507812,"height":83.7562255859375},{"id":"development","role":"default","x":797.0253295898438,"y":946.6032104492188,"width":312.64532470703125,"height":120.94952392578125},{"id":"external","role":"default","x":269.6632995605469,"y":946.618896484375,"width":275.6872863769531,"height":121.009765625},{"id":"pending","role":"default","x":809.6666870117188,"y":1109.63818359375,"width":287.15203857421875,"height":151.126708984375},{"id":"example","role":"default","x":886.235595703125,"y":425.4352111816406,"width":243.916259765625,"height":115.56478881835938}],"relations":["(example -> profiles)[0]","(package -> selection)[0]","(selection -> domains)[0]","(selection -> build)[0]","(sysml -> domains)[0]","(domains -> specialization)[0]","(domains -> profiles)[0]","(profiles -> plans)[0]","(domains -> rules)[0]","(plans -> development)[0]","(rules -> development)[0]","(plans -> external)[0]","(rules -> external)[0]","(development -> pending)[0]"],"headings":[{"role":"title","x":20,"y":20,"width":1360,"height":48},{"role":"question","x":20,"y":68,"width":1360,"height":34}]},"readability":{"minimumTextSize":12,"samples":39,"requiredMinimum":12},"bounds":{"model":{"x":20,"y":110,"width":1360,"height":1169}}}}Declarative Library: ownership and selection?Which responsibilities belong to the Library, its development tools and consuming ecosystems?{"graph":{"id":"model-root","children":[{"id":"package"},{"id":"selection"},{"id":"domains"},{"id":"specialization"},{"id":"profiles"},{"id":"plans"},{"id":"rules"},{"id":"build"},{"id":"sysml"},{"id":"development"},{"id":"external"},{"id":"pending"},{"id":"example"}],"layoutOptions":{"elk.spacing.nodeNode":"24","elk.layered.spacing.nodeNodeBetweenLayers":"48","elk.direction":"DOWN"},"edges":[{"id":"(example -> profiles)[0]","sources":["example"],"targets":["profiles"]},{"id":"(package -> selection)[0]","sources":["package"],"targets":["selection"]},{"id":"(selection -> domains)[0]","sources":["selection"],"targets":["domains"]},{"id":"(selection -> build)[0]","sources":["selection"],"targets":["build"]},{"id":"(sysml -> domains)[0]","sources":["sysml"],"targets":["domains"]},{"id":"(domains -> specialization)[0]","sources":["domains"],"targets":["specialization"]},{"id":"(domains -> profiles)[0]","sources":["domains"],"targets":["profiles"]},{"id":"(profiles -> plans)[0]","sources":["profiles"],"targets":["plans"]},{"id":"(domains -> rules)[0]","sources":["domains"],"targets":["rules"]},{"id":"(plans -> development)[0]","sources":["plans"],"targets":["development"]},{"id":"(rules -> development)[0]","sources":["rules"],"targets":["development"]},{"id":"(plans -> external)[0]","sources":["plans"],"targets":["external"]},{"id":"(rules -> external)[0]","sources":["rules"],"targets":["external"]},{"id":"(development -> pending)[0]","sources":["development"],"targets":["pending"]}]},"marker":"arrow-54b359e5c4fe"}gerbil.pkgOne AI Agentic Lab dependencyRoot init.ssFlat library/<module-name>/Native tag Profiles and yuanxu!Parent domain ModulesCapacity, lifetime and organizationLanguage-specialized ModulesRust / Tokio / Rayon correspondenceProfile Modulesprograms / languages / enable / settingsNative config-defaults + sealed Config TypeSource-contract declarationsConfig: enable + typed settingsFinal-scope plan / disabled refusalStep-derived external tool closureASCENT declarationsObligations and evidence relationsRoot build.ssinit.exports std-make-spec onlyNative build and compiled metadata passSysML declarationsResponsibilities and relationshipsDevelopment boundary: t/*-test.ssSDK env before gxtest initializationActual tools, independent gold and real subjectsExternal consuming ecosystemMarlin / Aitia / other RuntimeSessions, approval and recoveryOpen acceptance gatesCore cold rebuild exceeded 180 secondsFull dependency install / candidate cohortLinux CI dependency installation unqualifiedUser ExamplesC / C++ values in one programs treeInternal inheritance stays in Library \ No newline at end of file diff --git a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.webp b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.webp index 31b3ff3..23b0d72 100644 Binary files a/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.webp and b/docs/90-99-views/90-architecture-views/90.140-flat-declarative-library-boundary.webp differ diff --git a/t/project-formation-build-test.ss b/t/project-formation-build-test.ss index ae408c6..f7e340b 100644 --- a/t/project-formation-build-test.ss +++ b/t/project-formation-build-test.ss @@ -2,19 +2,28 @@ ;;; ;;; SPDX-License-Identifier: LGPL-2.1-or-later -;;; Build through the package-root init using the inherited Core public API. -(import :std/test :clan/poo/object - (only-in "../init.ss" deterministic-engineering.init.exports)) +;;; Consume the compiled package entry; the native root build checks its source. +(import :std/test + :clan/poo/object + (only-in :deterministic-engineering/init + deterministic-engineering.init.exports)) (export project-formation-build-test) -(def selected-roots '("profiles/library-formation")) +(def selected-roots '("config")) (def project-formation-build-test (test-suite "Package-root build projection" (test-case "package build retains the declared Profile and specification" - (def spec ((.get deterministic-engineering.init.exports std-make-spec) selected-roots)) - (check-equal? (and (member '(gxc: "profiles/library-formation") spec) #t) #t) - (check-equal? (eq? spec - ((.get deterministic-engineering.init.exports std-make-spec) selected-roots)) #t)) + (def project (.get deterministic-engineering.init.exports std-make-spec)) + (def spec (project selected-roots)) + (check-equal? + (and (member '(gxc: "library/library-formation-profiles/objects") spec) #t) + #t) + ;; Config is also selected by the Profile dependency graph; retain one + ;; canonical native target rather than a second ordinary source row. + (check-equal? + (length (filter (lambda (target) (equal? target '(gxc: "config"))) spec)) + 1) + (check-equal? (eq? spec (project selected-roots)) #t)) (test-case "the same init epoch cannot switch retained ordinary roots" (check-exception ((.get deterministic-engineering.init.exports std-make-spec) - '("profiles/library-formation" "profiles/gateway")) error?)))) + '("config" "library/library-formation-profiles/objects")) error?))))