diff --git a/.custodian-brief.md b/.custodian-brief.md index e9124c5..18fa950 100644 --- a/.custodian-brief.md +++ b/.custodian-brief.md @@ -2,17 +2,11 @@ # Custodian Brief — rapp-playwright **Domain:** infotech -**Last synced:** 2026-10-13 17:25 UTC +**Last synced:** 2026-10-13 18:24 UTC **State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)* ## Active Workstreams -### Implement the reproducible browser service and Railiance package -Progress: 3/4 done | workplan_id: `8e662d81-cdcb-5d8c-9222-1faaa92fc307` - -**Open tasks:** -- ! Package compatible Playwright and Chromium `227bec3f` - ### Activate the service, prove agent consumption and update discovery Progress: 1/3 done | workplan_id: `f9280c40-201e-59b5-a6f0-1aace8e0e2e2` diff --git a/README.md b/README.md index 9e328a9..a9682db 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ A bounded Playwright/Chromium job service for responsive screenshots and keyboard journeys, with a standalone Python client and a private Railiance workload package. -**Implemented and verified locally. Managed activation awaits platform admission.** +**Implemented, verified locally and published. Managed activation awaits platform admission.** The independent agent trial and pinned OnCo home-page pilot passed. The service uses Playwright 1.64.0 and Chromium 156.0.8078.4; consumers need Python 3.10+ and no browser installation. @@ -46,3 +46,7 @@ Use an immutable published digest for managed installation. Registered in State Hub under `infotech / stack`. `railiance-platform` owns the platform lifecycle; this repo owns service implementation. Discovery stays with reuse-surface's existing `capability.infotech.headless-browser` record. + +[Release 0.1.0](releases/0.1.0.json) pins the tested and published image. +[Publication evidence](docs/evidence/2026-10-13-publication.md) includes registry +manifest verification and a successful pull on railiance01. diff --git a/SCOPE.md b/SCOPE.md index 0b21d67..4fcd1e4 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -2,7 +2,7 @@ As of 2026-10-13, the service, standalone Python client, browser trial and Railiance package are implemented and verified locally. **Managed Railiance -availability is not established.** Image publication failed and platform admission +availability is not established.** Release 0.1.0 is published and verified by a cluster pull; platform admission has not been confirmed. The founder selected `railiance-platform` as lifecycle owner; service implementation remains here. @@ -41,13 +41,14 @@ artifacts expire; sanitized evidence under `docs/evidence/` is retained. | Workplan | State and remaining evidence | | --- | --- | | WP-0002 | Finished: consumption contract, lifecycle and trial/pilot design | -| WP-0003 | Local implementation complete; T01 waits on OCI publication. Forgejo blob PUT returned HTTP 499/500 and remote manifest inspection returned `manifest unknown`. | -| WP-0004 | T02 provider trial/pilot done. T01 waits on publication and platform admission/access; T03 waits on reuse-surface's maintained/published discovery update. | +| WP-0003 | Finished: tested image published at its exact digest and pulled on railiance01; ingress upload deadline fixed. | +| WP-0004 | T02 provider trial/pilot done. T01 waits on platform admission/access; T03 waits on reuse-surface's maintained/published discovery update. | -The `playwright` namespace is absent. No cluster workload was created. Server +The `playwright` namespace is absent. No browser workload was created. Server admission, private consumer binding, live target reachability, managed independent trial, restart/cancellation and cross-version rollback remain unverified. -A local build digest is not a published release. Package validation/rendering +[Release 0.1.0](releases/0.1.0.json) is now published; see the +[publication fix and pull evidence](docs/evidence/2026-10-13-publication.md). Package validation/rendering and Kubernetes client dry-run passed; they do not imply server admission. Existing capability `capability.infotech.headless-browser` was still D3/A2/C2/R2 diff --git a/docs/evidence/2026-10-13-publication-diagnosis.json b/docs/evidence/2026-10-13-publication-diagnosis.json new file mode 100644 index 0000000..28e9604 --- /dev/null +++ b/docs/evidence/2026-10-13-publication-diagnosis.json @@ -0,0 +1,162 @@ +{ + "observed_at": "2026-10-13T18:01:35.319316+00:00", + "forgejo_image": "code.forgejo.org/forgejo/forgejo:11.0.3-rootless", + "traefik_version": "3.6.7", + "prior_explicit_read_timeout": false, + "failed_blob_puts": [ + { + "timestamp": "2026/10/13 16:50:28", + "status": 500, + "duration_ms": 60000.5 + }, + { + "timestamp": "2026/10/13 16:50:28", + "status": 500, + "duration_ms": 59998.7 + }, + { + "timestamp": "2026/10/13 16:50:28", + "status": 500, + "duration_ms": 7.6 + }, + { + "timestamp": "2026/10/13 16:50:28", + "status": 500, + "duration_ms": 59999.2 + }, + { + "timestamp": "2026/10/13 16:50:28", + "status": 500, + "duration_ms": 59998.0 + }, + { + "timestamp": "2026/10/13 16:50:28", + "status": 500, + "duration_ms": 59976.1 + }, + { + "timestamp": "2026/10/13 17:15:26", + "status": 500, + "duration_ms": 59999.7 + }, + { + "timestamp": "2026/10/13 17:15:26", + "status": 500, + "duration_ms": 60001.1 + }, + { + "timestamp": "2026/10/13 17:15:26", + "status": 500, + "duration_ms": 59999.5 + }, + { + "timestamp": "2026/10/13 17:15:26", + "status": 500, + "duration_ms": 59999.4 + }, + { + "timestamp": "2026/10/13 17:15:26", + "status": 500, + "duration_ms": 59924.0 + }, + { + "timestamp": "2026/10/13 17:17:21", + "status": 500, + "duration_ms": 59998.1 + }, + { + "timestamp": "2026/10/13 17:17:21", + "status": 500, + "duration_ms": 60001.2 + }, + { + "timestamp": "2026/10/13 17:17:21", + "status": 500, + "duration_ms": 60000.6 + }, + { + "timestamp": "2026/10/13 17:17:21", + "status": 500, + "duration_ms": 59999.5 + }, + { + "timestamp": "2026/10/13 17:17:21", + "status": 500, + "duration_ms": 59999.6 + }, + { + "timestamp": "2026/10/13 17:17:21", + "status": 500, + "duration_ms": 7.1 + }, + { + "timestamp": "2026/10/13 17:17:21", + "status": 500, + "duration_ms": 4.3 + }, + { + "timestamp": "2026/10/13 17:17:22", + "status": 500, + "duration_ms": 3.8 + }, + { + "timestamp": "2026/10/13 17:17:22", + "status": 500, + "duration_ms": 2.9 + }, + { + "timestamp": "2026/10/13 17:17:22", + "status": 500, + "duration_ms": 2.3 + }, + { + "timestamp": "2026/10/13 17:17:22", + "status": 500, + "duration_ms": 3.2 + }, + { + "timestamp": "2026/10/13 17:17:22", + "status": 500, + "duration_ms": 10.0 + }, + { + "timestamp": "2026/10/13 17:17:22", + "status": 500, + "duration_ms": 3.1 + }, + { + "timestamp": "2026/10/13 17:49:19", + "status": 500, + "duration_ms": 60000.2 + }, + { + "timestamp": "2026/10/13 17:49:19", + "status": 500, + "duration_ms": 59998.2 + }, + { + "timestamp": "2026/10/13 17:49:19", + "status": 500, + "duration_ms": 59999.9 + }, + { + "timestamp": "2026/10/13 17:49:19", + "status": 500, + "duration_ms": 60000.0 + }, + { + "timestamp": "2026/10/13 17:49:19", + "status": 500, + "duration_ms": 59999.4 + } + ], + "unexpected_eof_count": 20, + "offset_mismatch_count": 9, + "disk_available_gib": 129.9, + "forgejo_restarts": 0, + "cpu_requested_m": 3460, + "cpu_allocatable_m": 4000, + "rendered_change": "one additional argument: --entryPoints.websecure.transport.respondingTimeouts.readTimeout=600s", + "server_dry_run": "passed", + "client_diff": "new HelmChartConfig only" +} diff --git a/docs/evidence/2026-10-13-publication-timeout-rollout.json b/docs/evidence/2026-10-13-publication-timeout-rollout.json new file mode 100644 index 0000000..97af3b4 --- /dev/null +++ b/docs/evidence/2026-10-13-publication-timeout-rollout.json @@ -0,0 +1,28 @@ +{ + "observed_at": "2026-10-13T18:12:13.559452+00:00", + "configuration_commit": "bad08fd712bded4aefe011d2cdad1f50ade8c43e", + "authority": "ADMINISTER @ realm:kubernetes/railiance01", + "activation": "APPROVED", + "source": "founder publication-fix instruction and explicit approval of shared timeout change", + "deployment_generation": 2, + "observed_generation": 2, + "ready_replicas": 1, + "image": "rancher/mirrored-library-traefik:3.6.7", + "timeout_arguments": [ + "--entryPoints.websecure.transport.respondingTimeouts.readTimeout=600s" + ], + "https_checks": [ + { + "url": "https://forgejo.coulomb.social/api/v1/version", + "status": 200 + }, + { + "url": "https://reuse.coulomb.social/health", + "status": 200 + }, + { + "url": "https://forgejo.coulomb.social/v2/", + "status": 401 + } + ] +} diff --git a/docs/evidence/2026-10-13-publication-upload-timings.json b/docs/evidence/2026-10-13-publication-upload-timings.json new file mode 100644 index 0000000..91157a5 --- /dev/null +++ b/docs/evidence/2026-10-13-publication-upload-timings.json @@ -0,0 +1,53 @@ +{ + "observed_at": "2026-10-13T18:15:32.252082+00:00", + "uploads": [ + { + "timestamp": "2026/10/13 18:13:40", + "kind": "blob", + "status": 201, + "duration_ms": 85466.9 + }, + { + "timestamp": "2026/10/13 18:14:02", + "kind": "blob", + "status": 201, + "duration_ms": 106917.7 + }, + { + "timestamp": "2026/10/13 18:14:06", + "kind": "blob", + "status": 201, + "duration_ms": 111375.0 + }, + { + "timestamp": "2026/10/13 18:15:07", + "kind": "blob", + "status": 201, + "duration_ms": 172691.8 + }, + { + "timestamp": "2026/10/13 18:15:17", + "kind": "blob", + "status": 201, + "duration_ms": 182603.3 + }, + { + "timestamp": "2026/10/13 18:15:17", + "kind": "manifest", + "status": 201, + "duration_ms": 39.3 + }, + { + "timestamp": "2026/10/13 18:15:17", + "kind": "manifest", + "status": 201, + "duration_ms": 108.9 + }, + { + "timestamp": "2026/10/13 18:15:17", + "kind": "manifest", + "status": 201, + "duration_ms": 30.6 + } + ] +} diff --git a/docs/evidence/2026-10-13-publication.md b/docs/evidence/2026-10-13-publication.md new file mode 100644 index 0000000..8a286a4 --- /dev/null +++ b/docs/evidence/2026-10-13-publication.md @@ -0,0 +1,63 @@ +# Forgejo image publication fixed — 2026-10-13 + +Release **0.1.0** is published and pullable on railiance01. Its immutable reference: + +```text +forgejo.coulomb.social/coulomb/rapp-playwright@sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441 +``` + +The fetched OCI index bytes hash to exactly that digest, matching the image +previously tested by the independent agent. The linux/amd64 manifest is +`sha256:20d8310d44cd807579aca06df01090a7bb27892ce387519f9957e4dd67f64cc7`; +cluster pull resolved the expected config +`sha256:5bda1139fda091648b1e984f6be8119291ad5616263b206d62ac7986ba2762b3`. +This publication did not rebuild or alter the browser image and did not deploy +the browser workload. + +## Cause and fix + +The previous HTTP 499/500 responses were caused by the shared Traefik ingress +cutting off large request bodies at its default 60-second read deadline. Forgejo +reported `unexpected EOF`; retries of those interrupted sessions could report +`offset mismatch between file and model`. Authentication and smaller blobs +succeeded. Forgejo had no restarts and approximately 130GiB disk available. + +The approved fix declares a **bounded 600-second read timeout** on the shared +`websecure` entry point through a k3s `HelmChartConfig`. This setting covers HTTPS +request bodies for all services on that entry point. Other timeouts, TLS and +registry authentication remain unchanged. Source is owned by railiance-cluster: +`install/traefik/railiance01-helmchartconfig.yaml`, initial published commit +`bad08fd712bded4aefe011d2cdad1f50ade8c43e`, workplan RCLUSTER-WP-0016. +The estate close-down checklist row 23 tracks review of the longer shared budget. + +Rendering the installed chart with its actual base values produced exactly one +additional argument. Server dry-run and diff passed, capacity was checked, and +the k3s Helm controller rolled Traefik to generation 2, Ready, on the same 3.6.7 +image. Forgejo version and reuse health returned HTTP 200; registry `/v2/` still +returned HTTP 401 without authentication. Rollback is a reviewed source change +back to 60s and reapplication through the same controller. + +References: [Traefik entry-point timeout](https://doc.traefik.io/traefik/v3.6/reference/install-configuration/entrypoints/) +and [k3s managed customization](https://docs.k3s.io/networking/networking-services). + +## Executed verification + +- `docker push forgejo.coulomb.social/coulomb/rapp-playwright:0.1.0` succeeded. + Five large layers completed with HTTP 201 in 85.5, 106.9, 111.4, 172.7 and + 182.6 seconds. Manifests published at 2026-10-13T18:15:17Z. +- `docker buildx imagetools inspect ...:0.1.0` returned the exact expected index. + The raw fetched index's SHA-256 was independently computed and matched. +- `ssh railiance01 'sudo k3s crictl pull '` succeeded, and + `crictl inspecti` confirmed the expected image config identity. + +Retained [diagnosis](2026-10-13-publication-diagnosis.json), +[rollout and HTTPS checks](2026-10-13-publication-timeout-rollout.json), +[successful upload timings](2026-10-13-publication-upload-timings.json), +[remote index](2026-10-13-published-image-index.json), +[cluster pull](2026-10-13-published-image-pull.json), and +[release record](../../releases/0.1.0.json). + +WP-0003-T01 is now done and WP-0003 is finished. Managed workload admission, +consumer binding, deployment and live browser recovery/rollback remain in +WP-0004-T01. The publication fix does not claim those outcomes or close discovery +and consumer-acceptance work. diff --git a/docs/evidence/2026-10-13-published-image-index.json b/docs/evidence/2026-10-13-published-image-index.json new file mode 100644 index 0000000..e832dfe --- /dev/null +++ b/docs/evidence/2026-10-13-published-image-index.json @@ -0,0 +1,28 @@ +{ + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:20d8310d44cd807579aca06df01090a7bb27892ce387519f9957e4dd67f64cc7", + "size": 3344, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:3267896f3b778dedce0b2c92ea1c67b64a6e168417aa422c4750dcbcb0d165f5", + "size": 566, + "annotations": { + "vnd.docker.reference.digest": "sha256:20d8310d44cd807579aca06df01090a7bb27892ce387519f9957e4dd67f64cc7", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ] +} \ No newline at end of file diff --git a/docs/evidence/2026-10-13-published-image-pull.json b/docs/evidence/2026-10-13-published-image-pull.json new file mode 100644 index 0000000..69ce806 --- /dev/null +++ b/docs/evidence/2026-10-13-published-image-pull.json @@ -0,0 +1,12 @@ +{ + "observed_at": "2026-10-13T18:17:15.031531+00:00", + "node": "railiance01", + "pull_command": "sudo k3s crictl pull forgejo.coulomb.social/coulomb/rapp-playwright@sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441", + "pull_exit_code": 0, + "image_id": "sha256:5bda1139fda091648b1e984f6be8119291ad5616263b206d62ac7986ba2762b3", + "repo_digests": [ + "forgejo.coulomb.social/coulomb/rapp-playwright@sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441" + ], + "size_bytes": "990518395", + "workload_deployed": false +} diff --git a/docs/operations.md b/docs/operations.md index 092bd5c..cc8c254 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -69,3 +69,10 @@ explicit migration/rollback decision. Upgrade Playwright and its base image together, update the lockfile, repeat the unit/browser/client tests and consumer pilot, then publish a new immutable image. The Python client checks protocol v1 and does not install Playwright. + +## Published release + +Release [0.1.0](../releases/0.1.0.json) is published and pull-verified. Use its +immutable reference for rendering; registry publication is no longer blocked. +The cluster-owned ingress now allows a bounded 600-second HTTPS request body; +see [cause, rollout and verification](evidence/2026-10-13-publication.md). diff --git a/history/2026-10-13-1918-intent-scope-assessment.md b/history/2026-10-13-1918-intent-scope-assessment.md index 7857efd..9540c3b 100644 --- a/history/2026-10-13-1918-intent-scope-assessment.md +++ b/history/2026-10-13-1918-intent-scope-assessment.md @@ -74,3 +74,12 @@ Open delivery gaps stay in existing live workplan tasks with owner messages and resume instructions; no workplan was falsely finished. Work stops after publishing this assessment as requested, with registry delivery/admission/discovery requiring external owner action before further managed-service progress. + +## Later resolution — 2026-10-13 20:18 Europe/Berlin + +Gap 1 is resolved: the ingress read deadline was raised from 60s to bounded +600s through the approved cluster-owned configuration. The exact tested image +published successfully, its remote manifest bytes match the expected SHA-256, +and railiance01 pulled it. WP-0003 is finished. See the +[publication report](../docs/evidence/2026-10-13-publication.md). Gaps 2–4 remain; +this addendum preserves the earlier assessment as a dated observation. diff --git a/releases/0.1.0.json b/releases/0.1.0.json new file mode 100644 index 0000000..92897b8 --- /dev/null +++ b/releases/0.1.0.json @@ -0,0 +1,13 @@ +{ + "version": "0.1.0", + "image": "forgejo.coulomb.social/coulomb/rapp-playwright@sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441", + "tag": "forgejo.coulomb.social/coulomb/rapp-playwright:0.1.0", + "published_at": "2026-10-13T18:15:17Z", + "verified_at": "2026-10-13T18:15:58.625521+00:00", + "platform": "linux/amd64", + "manifest": "sha256:20d8310d44cd807579aca06df01090a7bb27892ce387519f9957e4dd67f64cc7", + "playwright_version": "1.64.0", + "chromium_version": "156.0.8078.4", + "implementation_commit": "ccf46d8c598b6e82022beeed9048f785dc2bbd74", + "verification": "Remote OCI index bytes SHA-256 matches the independently tested local image index. Cluster pull verification is recorded separately." +} diff --git a/workplans/RAPP-PLAYWRIGHT-WP-0003-service-package.md b/workplans/RAPP-PLAYWRIGHT-WP-0003-service-package.md index 1ea0710..fcae7de 100644 --- a/workplans/RAPP-PLAYWRIGHT-WP-0003-service-package.md +++ b/workplans/RAPP-PLAYWRIGHT-WP-0003-service-package.md @@ -5,7 +5,7 @@ title: "Implement the reproducible browser service and Railiance package" domain: infotech repo: rapp-playwright topic_slug: stack -status: active +status: finished flavor: implementation owner: codex depends_on: [RAPP-PLAYWRIGHT-WP-0002] @@ -25,8 +25,7 @@ unverified until WP-0004. ```task id: RAPP-PLAYWRIGHT-WP-0003-T01 -status: wait -blocked_on: message-from:railiance-platform +status: done priority: high state_hub_task_id: "227bec3f-1de8-5d8d-9dfd-b4eb5a836ae6" ``` @@ -99,7 +98,7 @@ managed declaration, immutable rendering and client-side Kubernetes validation. See [verification and retained logs](../docs/evidence/2026-10-13-implementation.md) and [independent final-image trial](../docs/evidence/2026-10-13-independent-local-consumer.md). -T01 remains **wait**. The final image builds and launches, but its required OCI +At the initial implementation checkpoint T01 remained **wait**. The final image builds and launches, but its required OCI publication failed at Forgejo blob PUT with HTTP 499/500. Remote digest inspection returns `manifest unknown`. Candidate local index is `sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441`. @@ -107,3 +106,17 @@ Platform handoff `e77247e5-ce25-4711-a64f-af81a9f7cbb1` carries this blocker. Resume by resolving registry delivery with its owner, pushing the tested image, and reading back the immutable remote digest. Do not mark this plan finished or advertise an installable release before that proof. + +### Publication fix completed — 2026-10-13 + +The founder requested resolving publication. Forgejo logs show unexpected EOF at +60 seconds; Traefik used its default request-read deadline. The approved fix is +cluster source commit `bad08fd712bded4aefe011d2cdad1f50ade8c43e`, raising the shared +HTTPS read budget to a bounded 600 seconds through a k3s HelmChartConfig. +Generation 2 is Ready with the exact argument and HTTPS/authentication probes +pass. The original tested image published successfully at 18:15:17Z. Remote OCI index +bytes hash to the exact tested digest, and railiance01 pulled the image and +confirmed its config identity. T01 is done and this plan is finished. See the +[publication report](../docs/evidence/2026-10-13-publication.md). Cluster execution +is tracked by RCLUSTER-WP-0016. Remaining managed activation and discovery work +already have live records in WP-0004; no such work is closed by publication. diff --git a/workplans/RAPP-PLAYWRIGHT-WP-0004-consumer-verification.md b/workplans/RAPP-PLAYWRIGHT-WP-0004-consumer-verification.md index 020a98b..4d3b349 100644 --- a/workplans/RAPP-PLAYWRIGHT-WP-0004-consumer-verification.md +++ b/workplans/RAPP-PLAYWRIGHT-WP-0004-consumer-verification.md @@ -92,10 +92,12 @@ and [pilot](../docs/content-explorer-pilot.md). Content-explorer was notified vi `621635c9-0a72-4a88-9fd6-2ee1fbddc68f`; it decides its own T04 acceptance and further route coverage. Local proof does not imply managed endpoint proof. -T01 remains **wait** on WP-0003 image publication and railiance-platform admission +T01 remains **wait** on railiance-platform admission (`c82d75f3-3191-410d-a8c8-fd647bf7f3ef`, follow-up `e77247e5-ce25-4711-a64f-af81a9f7cbb1`). Founder selected that lifecycle owner. -The namespace is absent; no workload was deployed. Current capacity and reviewed +WP-0003 publication is now complete: exact immutable digest readback and +railiance01 pull passed; see [publication evidence](../docs/evidence/2026-10-13-publication.md). +The namespace is absent; no browser workload was deployed. Current capacity and reviewed package exist. Resume with owner admission/access, bootstrap/server dry-run/diff, immutable rollout, independent managed trial and live cancellation/restart/rollback. diff --git a/workplans/README.md b/workplans/README.md index 8e4591d..a9982c5 100644 --- a/workplans/README.md +++ b/workplans/README.md @@ -4,7 +4,7 @@ | --- | --- | --- | | [WP-0001](RAPP-PLAYWRIGHT-WP-0001-statehub-bootstrap.md) | Demand and State Hub bootstrap | Finished | | [WP-0002](RAPP-PLAYWRIGHT-WP-0002-consumer-contract.md) | Agent contract and trial | Finished | -| [WP-0003](RAPP-PLAYWRIGHT-WP-0003-service-package.md) | Service, client and Railiance package | Implemented locally; image publication waits on Forgejo | +| [WP-0003](RAPP-PLAYWRIGHT-WP-0003-service-package.md) | Service, client and Railiance package | Finished: implemented, tested, published and pulled by digest | | [WP-0004](RAPP-PLAYWRIGHT-WP-0004-consumer-verification.md) | Activate, prove consumption and update discovery | Independent local trial/pilot done; managed activation and registry update blocked | The founder authorized implementation after the original bootstrap. Platform