diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/README.md b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/README.md new file mode 100644 index 0000000..1d72007 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/README.md @@ -0,0 +1,43 @@ +# WP-80 development entrypoint evidence + +This packet supports T33/T37 and completed browser-discovery checkpoint T45. +The short runbook is [Working development entrypoints](../../../netkingdom-development.md). + +## Completed discovery correction + +Reuse-surface commit `ed3c900efbe96b931747dee336bf30e92744764f` updates only +`registry/capabilities/capability.infotech.headless-browser.md` and its existing +index summary. The record now points to the actual supervised managed trial. +No capability ID or maturity level changed (D3/A5/C2/R2); no new catalog, browser +client or deployment was introduced. + +The owner validator passed all three capability entries with +`--fail-on-warnings`. The local browser query returned the updated card, and +`hosted-browser-discovery.json` records HTTP 200 and exactly one matching card +with the corrected summary. The owner publication receipt records exact primary +projection and normal remote publication. Its unrelated brief/work-record +changes were preserved. The two postimage files retain exact published sources. + +## Partial flow evidence + +- `playwright-current-preflight.json`: available service, exact versions, + release and limits. Actual human/agent runs remain in + [the delivery packet](../wp80-build-mode-r1/README.md). +- `git-baseline.json`: existing SSH read, 0.629 seconds, and previous ordinary + write/publication sample. This alone does not close T44. +- `forgejo-cli-result.json`: current owner transport refused retrieval with + OpenBao 403 before the Tea/API probe ran. Raw output was discarded. This is a + retained failure, not authenticated API acceptance. +- `forgejo-route-plan.json` and `forgejo-login-plan.json`: routing metadata + identifies Platform custody and the founder-required interactive KeyCape + login prerequisite. No credential values are included. +- `check_forgejo_cli.py`: isolated verification using installed Tea, not a new + Forgejo client. Isolation-only mode passed without an API request. The + credentialed path remains unverified because the owner transport refused. +- `measurements.json`: bounded samples, command counts and explicit unknowns. + No cold-onboarding or comparative performance claim is made. + +T33/T37 remain in progress until the actual Forgejo paths are accepted. +T42 still waits on decision `ad88edeb-7c7c-486f-a695-1a7abae5b20c`; no source +changes here activate its native proposal. Human sign-in T43 and complete agent +Git/API T44 remain open. Repository privatization stays with ORGREF-WP-0002. diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/capabilities.postimage.yaml b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/capabilities.postimage.yaml new file mode 100644 index 0000000..4856d8c --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/capabilities.postimage.yaml @@ -0,0 +1,75 @@ +version: 1 +updated: '2026-10-18' +domain: helix_forge +capabilities: +- id: capability.infotech.headless-browser + name: Headless Browser Automation + summary: 'Headless browser automation, screenshots and keyboard trials through rapp-playwright + 0.1.0 (Playwright 1.64.0, Chromium 156.0.8078.4). Human and coding-agent managed + trials passed on 2026-10-18 through the existing supervised workstation connection. + Use the documented kubectl port-forward to 127.0.0.1:18081, then the pinned standalone + Python client preflight/trial commands. No local browser installation. Independent + per-caller managed admission remains pending; availability stays A5. Contract: + https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/consumer-contract.md.' + vector: D3 / A5 / C2 / R2 + domain: infotech + status: reviewed + owner: reuse-surface + path: registry/capabilities/capability.infotech.headless-browser.md + tags: + - headless + - browser + - automation + - playwright + - chromium + - testing + - screenshots + - extraction + - firefox + - webkit + - selenium + - puppeteer + consumption_modes: + - informational + - source adaptation + - JavaScript library + - Python library + - cli + - service API + - container +- id: capability.registry.register + name: Capability registry and federation + summary: Owner Markdown entries, indexes, federation hub and planning queries. + domain: helix_forge + status: draft + owner: reuse-surface + tags: + - registry + - governance + - meta + - security + - netkingdom + - framework-reuse + vector: D3 / A3 / C2 / R3 + path: registry/capabilities/capability.registry.register.md + consumption_modes: + - library + - CLI +- id: capability.registry.validate + name: Capability registry validation + summary: Schema, index consistency and relation checks. + domain: helix_forge + status: draft + owner: reuse-surface + tags: + - registry + - validation + - cli + - security + - netkingdom + - framework-reuse + vector: D4 / A3 / C3 / R3 + path: registry/capabilities/capability.registry.validate.md + consumption_modes: + - library + - CLI diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/check_forgejo_cli.py b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/check_forgejo_cli.py new file mode 100644 index 0000000..2fe316b --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/check_forgejo_cli.py @@ -0,0 +1,79 @@ +"""Verify the installed Tea client in a disposable configuration, without tokens in output.""" +import argparse +import csv +import io +import json +import os +from pathlib import Path +import subprocess +import tempfile +import time + +parser = argparse.ArgumentParser() +parser.add_argument('--isolation-only', action='store_true') +args = parser.parse_args() +tea = '/home/worsch/bin/tea' +report = {'native_changes': False, 'client': 'installed Tea 0.9.2', + 'profile': 'existing routed workstation development credential; no independent agent identity claim', + 'original_tea_configuration_used': False, 'credential_values_emitted': False} +secret = os.environ.pop('API_TOKEN', '') +with tempfile.TemporaryDirectory(prefix='wp80-tea-proof-') as temporary: + os.chmod(temporary, 0o700) + environment = dict(os.environ) + for key in ['GITEA_SERVER_TOKEN', 'GITEA_SERVER_PASSWORD', 'GITEA_SERVER_USER', 'GITEA_SERVER_URL']: + environment.pop(key, None) + # Tea documents this child-only configuration location in its own help. + environment['XDG_CONFIG_HOME'] = temporary + + def call(arguments): + start = time.monotonic() + result = subprocess.run([tea, *arguments], cwd=temporary, env=environment, + capture_output=True, text=True, timeout=30) + return result, round(time.monotonic() - start, 3) + + listing, _ = call(['logins', 'list', '-o', 'csv']) + rows = list(csv.DictReader(io.StringIO(listing.stdout))) + if listing.returncode or rows: + raise SystemExit('Tea configuration isolation failed; no login was written') + report['configuration_isolation_verified'] = True + if args.isolation_only: + report['mode'] = 'configuration-isolation-only; no credential or API request' + else: + if not secret: + raise SystemExit('Use the owner-routed --exec transport; API_TOKEN missing') + environment['GITEA_SERVER_TOKEN'] = secret + login, seconds = call(['logins', 'add', '--name', 'wp80-current', '--url', 'https://forgejo.coulomb.social']) + environment.pop('GITEA_SERVER_TOKEN', None) + secret = '' + report['login_exit_code'] = login.returncode + report['login_seconds'] = seconds + if login.returncode == 0: + for path in Path(temporary).rglob('*'): + if path.is_file(): + path.chmod(0o600) + listing, _ = call(['logins', 'list', '-o', 'csv']) + rows = list(csv.DictReader(io.StringIO(listing.stdout))) + if listing.returncode or len(rows) != 1 or rows[0].get('URL') != 'https://forgejo.coulomb.social': + raise SystemExit('Unexpected current-host configuration; raw output discarded') + user = rows[0].get('User', '') + if not user or len(user) > 64 or not all(c.isalnum() or c in '._-' for c in user): + raise SystemExit('Unexpected identity metadata; raw output discarded') + report['api_user'] = user + who, seconds = call(['whoami']) + report['whoami_exit_code'] = who.returncode + report['whoami_seconds'] = seconds + report['returned_identity_matches'] = user in who.stdout + repo, seconds = call(['repos', '--login', 'wp80-current', '--fields', 'owner,name,permission', + '--output', 'csv', 'coulomb/the-custodian']) + report['repository_read_exit_code'] = repo.returncode + report['repository_read_seconds'] = seconds + report['expected_repository_returned'] = 'the-custodian' in repo.stdout and 'coulomb' in repo.stdout + report['passed'] = (who.returncode == repo.returncode == 0 and + report['returned_identity_matches'] and report['expected_repository_returned']) + else: + report['passed'] = False + report['reason'] = 'Current-host token login failed; raw child output discarded' +report['temporary_configuration_removed'] = True +print(json.dumps(report, indent=2)) +if not args.isolation_only and not report.get('passed'): + raise SystemExit(1) diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/forgejo-cli-result.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/forgejo-cli-result.json new file mode 100644 index 0000000..54d08e1 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/forgejo-cli-result.json @@ -0,0 +1,14 @@ +{ + "passed": false, + "reason": "Owner-routed transport did not produce the verification report", + "closed_error_markers": [ + "permission denied", + "403", + "fetch failed", + "OpenBao", + "denied" + ], + "raw_transport_output_discarded": true, + "transport_exit_code": 5, + "transport": "Existing warden access --exec owner route; field API_TOKEN, no raw-value fetch" +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/forgejo-login-plan.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/forgejo-login-plan.json new file mode 100644 index 0000000..1a6d502 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/forgejo-login-plan.json @@ -0,0 +1,23 @@ +{ + "need": "oidc login forgejo admin", + "verdict": "founder_required", + "organization_posture": "build", + "lane_id": "key-cape-oidc-login", + "commands": [ + "warden access key-cape-oidc-login --exec -- ", + "# owner login is contained by warden; do not invoke it separately" + ], + "founder_act": { + "kind": "oidc_login", + "summary": "Interactive OIDC/MFA login via key-cape", + "details": { + "lane_id": "key-cape-oidc-login", + "auth_method": "browser OIDC via key-cape / Keycloak at auth/netkingdom", + "fetch_command": "warden access key-cape-oidc-login --exec -- ", + "desk_hint": "warden desk --from-plan (act=oidc_login); execute only through: warden access key-cape-oidc-login --exec -- " + } + }, + "reasons": [ + "login lane requires interactive founder/operator identity act" + ] +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/forgejo-route-plan.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/forgejo-route-plan.json new file mode 100644 index 0000000..d0d4114 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/forgejo-route-plan.json @@ -0,0 +1,16 @@ +{ + "need": "forgejo admin api token", + "verdict": "autonomous", + "organization_posture": "build", + "lane_id": "forgejo-admin-api-token", + "commands": [ + "warden access forgejo-admin-api-token --exec -- # high-risk: no raw stdout", + "warden access forgejo-admin-api-token --out FILE", + "warden access forgejo-admin-api-token --wrap", + "# owner fetch (as you): bao kv get -field=API_TOKEN platform/workloads/forgejo/forgejo-admin" + ], + "founder_act": null, + "reasons": [ + "lane is usable under current catalog without founder mechanics" + ] +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/git-baseline.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/git-baseline.json new file mode 100644 index 0000000..e517708 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/git-baseline.json @@ -0,0 +1,10 @@ +{ + "operation": "existing developer Git SSH read", + "command": "git -C /home/worsch/the-custodian ls-remote origin refs/heads/main", + "exit_code": 0, + "seconds": 0.629, + "revision": "17635cb0a76e5595ec06421ab7419ae889f6d731", + "profile": "existing authenticated workstation developer SSH path", + "independent_current_keycape_checks": false, + "write_proof": "Normal prior source publication17635cb0; no extra trial branch, commit or mutation needed." +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/headless-browser.postimage.md b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/headless-browser.postimage.md new file mode 100644 index 0000000..5ab4096 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/headless-browser.postimage.md @@ -0,0 +1,337 @@ +--- +id: capability.infotech.headless-browser +name: Headless Browser Automation +summary: >- + Headless browser automation, screenshots and keyboard trials through rapp-playwright 0.1.0 (Playwright 1.64.0, Chromium 156.0.8078.4). Human and coding-agent managed trials passed on 2026-10-18 through the existing supervised workstation connection. Use the documented kubectl port-forward to 127.0.0.1:18081, then the pinned standalone Python client preflight/trial commands. No local browser installation. Independent per-caller managed admission remains pending; availability stays A5. Contract: https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/consumer-contract.md. +owner: reuse-surface +status: reviewed +domain: infotech +tags: [headless, browser, automation, playwright, chromium, testing, screenshots, extraction, firefox, webkit, selenium, puppeteer] +maturity: + discovery: + current: D3 + target: D4 + confidence: medium + rationale: > + Inspected four implemented Playwright consumers and separated optional + dependencies and plans from usage. No comprehensive alternatives benchmark. + availability: + current: A5 + target: A6 + confidence: medium + rationale: > + rapp-playwright 0.1.0 is a published immutable container with a versioned + HTTP contract and standalone Python client, independently trialled locally. + A5 describes deployable container availability, not managed operation (A6). + The supervised managed build profile has real human/agent receipts; independent + per-caller admission remains pending. Existing A2 source adaptation remains usable; + no endpoint uptime or caller browser installation is implied. +external_evidence: + completeness: + level: C2 + confidence: medium + basis: scope_vs_intent_and_consumer_expectations + satisfied_expectations: + - Identifies implemented consumers, browser engines and source entry points. + - Gives a scoped default recommendation and a practical trial procedure. + - Published provider client and container have independent fixture screenshots and keyboard receipts. + - Actual managed human and coding-agent supported-command trials passed on 2026-10-18 under the stated supervised build profile. + broken_expectations: + - Independent per-caller managed admission is still pending; the supervised build connection must be established first. + - Consumer application acceptance remains the consuming repo's responsibility. + out_of_scope_expectations: + - Exhaustive estate dependency inventory or comparative browser benchmark. + - Browser service implementation or operation by reuse-surface. + - Mandatory estate-wide technology policy. + reliability: + level: R2 + confidence: medium + basis: consumer_quality_signals + known_reliability_risks: + - Browser binaries and system libraries must match the selected Playwright version. + - Existing examples contain application-specific fixtures and assumptions. + - Provider fixture receipts do not prove arbitrary target compatibility or independent per-caller identity. + - Local provider endpoints are ephemeral; check preflight for each trial. + evidence: + satisfied_signals: + - frontend-patterns navigation-history records a completed Chromium/Firefox experiment. + - rapp-playwright independent final-release trial passed 14 steps across desktop and narrow viewports. + - Independent provider evidence includes wrong-token, failed assertion and unavailable-service checks. +discovery: + intent: > + Help a worker select and reuse existing headless browser tooling instead of + independently introducing another automation stack. + includes: + - Playwright automation with headless Chromium as the default starting point. + - JavaScript UI tests, screenshots and page extraction examples. + - Python visual-check example and Firefox experiment evidence. + - Published rapp-playwright container, Python client and bounded HTTP fixture trials. + excludes: + - Browser hosting or workstation provisioning by reuse-surface. + - Credential provisioning and permission to automate external targets. + - Claims that a dependency declaration or a workplan proves executed browser usage. + assumptions: + - Source-adaptation consumers install matching browsers; provider clients need only Python 3.10+. + - Provider consumers establish an available endpoint and run preflight before a trial. + use_cases: + - Find which working repos already use a headless browser and where to start reusing it. + - Run a local UI assertion and screenshot in a target repo before adopting the tooling. +availability: + current_level: A5 + target_level: A6 + current_artifacts: + - forgejo.coulomb.social/coulomb/rapp-playwright@sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441 + - https://forgejo.coulomb.social/coulomb/rapp-playwright/raw/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/client/rapp_playwright.py + - https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/releases/0.1.0.json + - ../whynot-design/playwright.config.mjs + - ../whynot-design/tests/visual/ui-kit.spec.mjs + - ../coulomb-social/scripts/test-usecase-browser.mjs + - ../core-hub/scripts/check_console_visual.py + - ../frontend-patterns/research/experiments/navigation-history/experiment.mjs + target_artifacts: + - >- + Managed Railiance deployment after platform admission, with consumer + independent per-caller access and complete recovery/rollback acceptance; the + supervised build pilot already has actual human/agent receipts. + consumption_modes: [informational, source adaptation, JavaScript library, Python library, cli, service API, container] +relations: + depends_on: [] + supports: [] + related_to: [] +evidence: + documentation: + - https://playwright.dev/docs/browsers + - ../frontend-patterns/research/experiments/navigation-history/README.md + - ../test-driver/SCOPE.md + - ../testdrive-jsui/pyproject.toml + - https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/consumer-contract.md + - https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/evidence/2026-10-13-publication.md + - intakes/REUSE-IN-0001-headless-browser-runnable-answer.md + tests: + - https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/evidence/2026-10-13-independent-local-consumer.md + - docs/evidence/2026-10-13-browser-discovery.md + - ../whynot-design/tests/visual/ui-kit.spec.mjs + - ../coulomb-social/scripts/test-usecase-browser.mjs + - ../core-hub/scripts/check_console_visual.py + - ../frontend-patterns/research/experiments/navigation-history/result.json + consumer_feedback: + - >- + 2026-10-13 content-explorer, REUSE-IN-0001: published source examples did not + provide a verified runnable path for screenshots and keyboard interaction. + The false-new plan-check verdict is a registry discovery issue, not evidence + that a new browser stack is needed. Browser delivery belongs to the provider. +consumer_guidance: + recommended_for: + - Use Playwright with headless Chromium for a new repo's general UI automation trial. + - Reuse whynot-design for JavaScript visual tests and core-hub for Python visual checks. + - Reuse coulomb-social for JavaScript browser scripts and frontend-patterns for multi-engine experiments. + - >- + For bounded screenshot and keyboard jobs, use the published rapp-playwright + Python client against an available local provider and run preflight first. + Use the immutable container to reproduce the provider; managed Railiance + access requires admission and a working tunnel before consumption. + not_recommended_for: + - Treating this recommendation as an approved mandatory estate standard. + - Selecting test-driver as an implemented JavaScript-capable browser engine. + - Introducing Selenium or Puppeteer merely because their names match a discovery query. + known_limitations: + - This is a dated source inspection; run the target-repo trial before claiming adoption success. + - Firefox is evidenced in frontend-patterns; WebKit is supported upstream but unverified in this inspection. + - Selenium is an optional testdrive-jsui dependency, not verified execution; Puppeteer has no verified example here. + - Local provider availability is verified but ephemeral; managed admission and platform operation remain pending. + - Provider fixture success does not establish consumer target reachability or application acceptance. +promotion_history: + - date: "2026-10-13" + dimension: availability + from: A2 + to: A5 + rationale: >- + Published immutable rapp-playwright 0.1.0 container, versioned client/contract + and independent local release receipts satisfy deployable-container availability. + This is not an A6 managed-platform claim. D3, C2 and R2 remain conservative + assessments pending broader target and operational evidence. + author: codex +--- + +# Headless Browser Automation + +## Recommendation + +Start with **Playwright controlling headless Chromium** for general browser +automation, UI tests, screenshots and JavaScript-rendered page extraction. +This follows implemented usage in four working repos. Playwright is the automation +library; Chromium is the browser engine. Use `@playwright/test` for a JavaScript +test suite, the `playwright` library for standalone JavaScript scripts, or Python +`playwright` when the consumer is Python. + +This is a reuse recommendation reviewed against source on **2026-10-13**, not a +mandatory estate standard or a benchmark verdict against Selenium/Puppeteer. +reuse-surface maintains this discovery record; the example repos maintain their +implementations and the upstream Playwright project maintains the library. + +## Service provider and delivery status + +**rapp-playwright 0.1.0 is published and verified as a local container provider.** +The current vector is **D3 / A5 / C2 / R2**. A5 means a deployable container under +[the maturity standard](../../specs/CapabilityMaturityStandard.md); managed +platform operation is A6 and remains **pending Railiance admission**. Source +examples remain available at A2. No browser is installed on the caller's machine +by discovery or by running the Python client. + +`rapp-playwright` owns the browser service; `railiance-platform` owns managed +lifecycle admission. `reuse-surface` owns this record, discovery, consumption +guidance and evidence assessment. The +[content-explorer intake](../../intakes/REUSE-IN-0001-headless-browser-runnable-answer.md) +concerns registry relevance and availability clarity; CONTENT-WP-0000-T04 +acceptance remains with the consumer. + +### Verified client path + +Only Python 3.10+ is needed by the consumer. Download the single revision-pinned +client into a working directory; a sibling checkout is not required: + +```sh +curl -fL --output rapp_playwright.py https://forgejo.coulomb.social/coulomb/rapp-playwright/raw/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/client/rapp_playwright.py +python3 rapp_playwright.py --url http://127.0.0.1:18083 preflight +python3 rapp_playwright.py --url http://127.0.0.1:18083 trial --out trial-01 +``` + +Use a fresh output directory for each run. Port **18083** was verified on this +workstation on **2026-10-13**; it is an ephemeral local provider, not a permanent +or remotely reachable endpoint. Preflight must report `available: true`, API 1, +service 0.1.0, Playwright **1.64.0**, Chromium **156.0.8078.4**, and the expected +release/location. Connection failure means the provider or tunnel is unavailable, +not that another browser capability is needed. Use the local setup below or the +source-adaptation fallback. Repeat `--url` on later status/download commands. + +The fixture trial checks Tab focus, Enter activation and the counter assertion +across **1280×800** and **390×844** viewports, then downloads screenshots and a +receipt. It does not inspect or accept the consumer's own UI. `run.json` is a +private run handle and must not be published. For `trial`/`run`, exit 0 means +passed, 2 means UI assertion failed, and 3 means infrastructure/setup or another +unsuccessful result; `status` exit 0 only means retrieval succeeded. + +### Reproduce the local provider + +The published release targets **linux/amd64**. With Docker and image pull access, +start the immutable container in one terminal, then point the client at port +**18081** in another: + +```sh +docker run --rm --name rapp-playwright-local --read-only \ + --tmpfs /tmp:rw,size=512m --shm-size=256m --memory=1g --cpus=1 \ + --cap-drop ALL --security-opt no-new-privileges \ + --mount type=volume,src=rapp-playwright-local-data,dst=/data \ + -p 127.0.0.1:18081:8080 -e HOST=0.0.0.0 \ + -e EXECUTION_LOCATION=workstation-container \ + -e RELEASE_ID=sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441 \ + forgejo.coulomb.social/coulomb/rapp-playwright@sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441 +python3 rapp_playwright.py --url http://127.0.0.1:18081 preflight +python3 rapp_playwright.py --url http://127.0.0.1:18081 trial --out trial-local-01 +``` + +This is the provider's documented local setup with the published digest pinned; +it was not redeployed by this registry review. Existing independent final-release +receipts and the fresh discovery trial use the same digest. The default fixture +requires no external target grant. The provider supports trusted/synthetic pages, +not hostile-page or mutually untrusted tenant execution. + +### Supervised managed development path — verified 2026-10-18 + +The existing private deployment was used by one actual human and one coding +agent, each completing 14 keyboard/responsive steps with downloaded screenshots. +This build profile uses an existing authenticated workstation connection; +independent per-caller identity, transport and final managed admission remain open. +Establish that existing connection, then use the same supported provider client: + +```sh +kubectl -n playwright port-forward deployment/playwright 18081:8080 --address 127.0.0.1 +# In another terminal, while the tunnel remains running: +python3 rapp_playwright.py preflight +python3 rapp_playwright.py trial --out trial-managed-01 +``` + +Both managed trials passed against the deployed release digest already listed +above. The client is byte-identical to the pinned published commit. +[Human receipt](https://forgejo.coulomb.social/coulomb/the-custodian/src/commit/17635cb0a76e5595ec06421ab7419ae889f6d731/docs/changes/netkingdom-target-2026-10-18/wp80-build-mode-r1/playwright-human/receipt.json), +[agent receipt](https://forgejo.coulomb.social/coulomb/the-custodian/src/commit/17635cb0a76e5595ec06421ab7419ae889f6d731/docs/changes/netkingdom-target-2026-10-18/wp80-build-mode-r1/playwright-agent/receipt.json), +and [profile/commands](https://forgejo.coulomb.social/coulomb/the-custodian/src/commit/17635cb0a76e5595ec06421ab7419ae889f6d731/docs/changes/netkingdom-target-2026-10-18/wp80-build-mode-r1/README.md) +state the exact scope. Use a fresh output directory; keep the run capability +private. Do not distribute a kubeconfig or treat this receipt as a broader identity +acceptance. Stop the port-forward with Ctrl-C when finished. A remote browser's +localhost belongs to the provider. Consumer applications need a +provider-reachable, explicitly allowed origin; the browser API tunnel does not +forward a workstation app. See the provider contract before running a target +scenario. + +### Pinned delivery evidence + +All provider links below are pinned to published commit +`8831a05aeba5ce588f3b395ade676dde2a151c5d`: + +- [Consumer contract](https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/consumer-contract.md). +- [Release manifest](https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/releases/0.1.0.json) + and [publication/pull evidence](https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/evidence/2026-10-13-publication.md). +- [Independent consumer evidence](https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/evidence/2026-10-13-independent-local-consumer.md), + including final-release screenshots, keyboard assertions, wrong-token rejection, + UI failure and unavailable-service results. These are retained provider-side + reports; this review separately verified the fixture path. +- [Fresh registry review and trial](../../docs/evidence/2026-10-13-browser-discovery.md). + +## Existing implementations + +Paths in frontmatter are relative to the reuse-surface repository root. The links +below work with sibling checkouts. The cited files were clean at these revisions. + +| Repo and inspected revision | What is implemented | Reuse starting point | +| --- | --- | --- | +| whynot-design — `a79a4d803e9aed13f66d072bf409b6f86000f01f` | Playwright Test, explicitly headless Chromium, screenshot comparisons | [Configuration](../../../whynot-design/playwright.config.mjs), [visual tests](../../../whynot-design/tests/visual/ui-kit.spec.mjs), [dependency/scripts](../../../whynot-design/package.json) | +| coulomb-social — `5c32757b987ab1610cdb46a808d56c75f569f581` | JavaScript Playwright scripts launching headless Chromium for browser tests and extraction | [Use-case test](../../../coulomb-social/scripts/test-usecase-browser.mjs), [script dependency](../../../coulomb-social/scripts/package.json) | +| core-hub — `a69ad325271485afe284a6db85673dfa30d9d4ad` | Python synchronous Playwright visual checks launching Chromium with the default headless mode | [Visual-check script](../../../core-hub/scripts/check_console_visual.py), [development dependency](../../../core-hub/pyproject.toml) | +| frontend-patterns — `047a6a2d314ff5a9d2a87d5bc987d7d84835f682` | Playwright experiments using Chromium and Firefox, with retained execution receipts | [Runner](../../../frontend-patterns/research/experiments/navigation-history/experiment.mjs), [setup and limitations](../../../frontend-patterns/research/experiments/navigation-history/README.md), [result](../../../frontend-patterns/research/experiments/navigation-history/result.json) | + +These are source/retained-receipt observations, not newly executed test results. +The frontend-patterns example uses an explicit Chromium binary override; do not +copy its workstation paths as a portable browser installation recipe. + +## Alternatives and misleading matches + +- **Selenium:** [testdrive-jsui's optional development dependencies](../../../testdrive-jsui/pyproject.toml) + declare it at `701341d7fa520f860245e28eb16d44b767fd116b`. A declaration alone + does not establish an implemented or passing browser workflow. +- **test-driver:** [SCOPE.md](../../../test-driver/SCOPE.md) at + `c3ad06e598057862cf500cbd46c7c8b6f83885ed` explicitly excludes a browser engine, + JavaScript execution, screenshots and DOM timing. Historical Playwright plans + are not an available implementation. +- **Puppeteer:** no verified implementation was found in this inspection. This + is not a claim that every working repo has been exhaustively searched. +- **Firefox/WebKit:** Playwright supports both upstream. Firefox has retained + experiment evidence here; WebKit has no verified local example in this record. + +## Source-adaptation fallback for the consuming worker + +1. Query this checkout with `python3 -m reuse_surface.cli query --keyword browser` + from the reuse-surface root, then open this entry. If the CLI is installed, + `reuse-surface query --keyword browser` is equivalent. + `plan-check --intent "headless browser" --no-llm` ranks this entry first. + Its reuse verdict describes relevance; provider preflight determines current + runtime availability. Use source adaptation when the provider path is unsuitable. +2. Pick the example matching the target repo's language and task. Inspect its + fixture/server assumptions before adapting the smallest useful test or script. +3. Use the target repo's package manager and lockfile. Select a compatible + Playwright version and install its matching Chromium binary. For an installed + Node dependency, use `npx playwright install chromium`; for an installed Python + dependency, use `python -m playwright install chromium` in its environment. + Follow the upstream [browser/system-dependency instructions](https://playwright.dev/docs/browsers) + if system libraries are missing. No common estate version is established here. +4. Against a local fixture or the target repo's local development server, launch + headless Chromium, load one page, assert one meaningful rendered element or + interaction, save a screenshot if relevant, and close the browser. Exercise + a JavaScript-driven change if JavaScript rendering is the reason for adoption. +5. Report the consumer repo, reference example, package/browser versions, exact + command, assertion outcome, artifact paths and any setup failure. The trial + remains unverified until this evidence exists; installation alone is not success. + +The hosted service reads published repository indexes. A local edit does not +by itself make this entry available at `reuse.coulomb.social`; use the local query +above for an unpublished trial and verify the hosted entry after publication. diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/hosted-browser-discovery.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/hosted-browser-discovery.json new file mode 100644 index 0000000..99d9f1c --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/hosted-browser-discovery.json @@ -0,0 +1,18 @@ +{ + "http_status": 200, + "top_fields": [ + "version", + "updated", + "domain", + "collision_policy", + "sources", + "capabilities", + "composed_at", + "stale" + ], + "matching_cards": 1, + "summaries": [ + "Headless browser automation, screenshots and keyboard trials through rapp-playwright 0.1.0 (Playwright 1.64.0, Chromium 156.0.8078.4). Human and coding-agent managed trials passed on 2026-10-18 through the existing supervised workstation connection. Use the documented kubectl port-forward to 127.0.0.1:18081, then the pinned standalone Python client preflight/trial commands. No local browser installation. Independent per-caller managed admission remains pending; availability stays A5. Contract: https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/consumer-contract.md." + ], + "mentions_current_supervised_profile": true +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/measurements.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/measurements.json new file mode 100644 index 0000000..5f2c9eb --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/measurements.json @@ -0,0 +1,61 @@ +{ + "scope": "Bounded WP-80 build-flow samples; not full security acceptance", + "playwright": { + "scope": "Playwright working build profile only", + "measurements": [ + { + "consumer": "human", + "run_id": "d81a5166-83d9-4382-a6e8-a90cfc3f0a51", + "completed_steps": 14, + "run_duration_seconds": 3.801, + "keyboard_and_responsive": true + }, + { + "consumer": "agent", + "run_id": "893a8bcb-9b7f-48f1-8a51-c116de3f3097", + "completed_steps": 14, + "run_duration_seconds": 3.938, + "keyboard_and_responsive": true + } + ], + "consumer_commands_after_connection": 2, + "connection_commands": 1, + "manual_connection_setup_required": true, + "local_browser_install_required": false, + "baseline_comparison": "No comparable prior end-to-end baseline measured; no percentage improvement claimed.", + "forgejo_measurement": "pending T37", + "reuse": "Existing rapp-playwright client and Kubernetes port-forward, zero new clients or deployments." + }, + "git": { + "operation": "existing developer Git SSH read", + "command": "git -C /home/worsch/the-custodian ls-remote origin refs/heads/main", + "exit_code": 0, + "seconds": 0.629, + "revision": "17635cb0a76e5595ec06421ab7419ae889f6d731", + "profile": "existing authenticated workstation developer SSH path", + "independent_current_keycape_checks": false, + "write_proof": "Normal prior source publication17635cb0; no extra trial branch, commit or mutation needed." + }, + "scanner": { + "evidence": "docs/changes/netkingdom-target-2026-10-18/receive-scanner-batch-r1/scan-activation.json", + "evidence_sha256": "af72791078842255de4cfb561acd51ef89520279076508058223af1a3bfdc0f5", + "seconds": 58.18, + "objects": 278, + "unchanged_deadline_seconds": 90, + "scope": "Retained exact clean delta proof; not general scanner latency" + }, + "manual_touches": { + "documented_connection_commands": 1, + "documented_client_commands_after_connection": 2, + "human_receipt": "Founder actually ran the trial using the already established connection; no cold onboarding time measured", + "git": "Existing authenticated workstation path; no new login during the read sample", + "forgejo_sign_in": "Not activated; human interaction count and duration unmeasured", + "forgejo_api": "Owner transport denied before API command; successful duration unmeasured" + }, + "remaining": [ + "Actual human NetKingdom sign-in/account continuity", + "Complete agent Git and authenticated API acceptance", + "Actual Forgejo setup/manual-touch and duration samples" + ], + "baseline": "No comparable cold-onboarding or end-to-end baseline; no percent improvement claimed" +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/playwright-current-preflight.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/playwright-current-preflight.json new file mode 100644 index 0000000..22e2c48 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/playwright-current-preflight.json @@ -0,0 +1,24 @@ +{ + "available": true, + "error": null, + "checked_at": "2026-10-18T17:41:39.749Z", + "browser_version": "156.0.8078.4", + "api_version": "1", + "service_version": "0.1.0", + "playwright_version": "1.64.0", + "execution_location": "railiance01/playwright", + "release": "forgejo.coulomb.social/coulomb/rapp-playwright@sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441", + "allowed_origins": [ + "https://onco.cc" + ], + "fixture": true, + "active": 0, + "queued": 0, + "limits": { + "concurrency": 1, + "max_queue": 4, + "max_timeout_ms": 120000, + "retention_ms": 3600000, + "max_runs": 64 + } +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/prepublication-verification.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/prepublication-verification.json new file mode 100644 index 0000000..ed53490 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/prepublication-verification.json @@ -0,0 +1,16 @@ +{ + "verified": true, + "original_task_bindings_preserved": 44, + "new_task": "CUST-WP-0080-T45", + "new_task_uuid": "34641b3d-bfe6-5fc3-bfa9-b2d9f93fe339", + "changed_existing_statuses": [ + "T33: todo -> progress", + "T37: todo -> progress" + ], + "unrelated_worktree_and_index_preserved": 8, + "owner_published_postimages_match": true, + "canonical_playwright_client_pin_matches": true, + "local_markdown_links_checked": 6, + "native_changes_executed": false, + "authenticated_api_verified": false +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-publication/projection.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-publication/projection.json new file mode 100644 index 0000000..7b50b70 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-publication/projection.json @@ -0,0 +1,94 @@ +{ + "ok": true, + "status": "applied", + "repo_slug": "reuse-surface", + "commit": "ed3c900efbe96b931747dee336bf30e92744764f", + "requests": 2, + "elapsed_ms": 5972.5, + "git": { + "upstream": "origin/main", + "behind": 0, + "ahead": 0 + }, + "identifiers": { + "schema": "repo-manager.identifier-assignment.v1", + "ok": true, + "executed": true, + "repo": "reuse-surface", + "namespace": "helixforge", + "assignments": [], + "historical_invalid_identifiers": [], + "historical_identity_collisions": [], + "files_changed": [] + }, + "receipt": { + "schema": "state-hub.repository-projection-reconcile.v1", + "instance_role": "primary", + "instance_label": "railiance01", + "expected_commit": "ed3c900efbe96b931747dee336bf30e92744764f", + "derived_commit": "ed3c900efbe96b931747dee336bf30e92744764f", + "outcome": { + "schema": "state-hub.projection-reset.v1", + "repo_slug": "reuse-surface", + "commit": "ed3c900efbe96b931747dee336bf30e92744764f", + "status": "applied", + "counts": { + "created": 0, + "updated": 27, + "retired": 0, + "refused": 0, + "released": 0, + "created_tasks": 0, + "updated_tasks": 1, + "cancelled_tasks": 0, + "created_edges": 0, + "removed_edges": 0, + "unresolved_edges": 0, + "external_edges": 0 + }, + "created": [], + "updated": [ + "ADHOC-2026-10-13", + "REUSE-WP-0001", + "REUSE-WP-0002", + "REUSE-WP-0003", + "REUSE-WP-0004", + "REUSE-WP-0005", + "REUSE-WP-0006", + "REUSE-WP-0007", + "REUSE-WP-0008", + "REUSE-WP-0009", + "REUSE-WP-0010", + "REUSE-WP-0011", + "REUSE-WP-0012", + "REUSE-WP-0013", + "REUSE-WP-0014", + "REUSE-WP-0015", + "REUSE-WP-0016", + "REUSE-WP-0017", + "REUSE-WP-0018", + "REUSE-WP-0019", + "REUSE-WP-0020", + "REUSE-WP-0021", + "REUSE-WP-0022", + "REUSE-WP-0023", + "REUSE-WP-0024", + "REUSE-WP-0025", + "REUSE-WP-ADHOC-2026-10-16" + ], + "retired": [], + "released": [], + "created_tasks": [], + "updated_tasks": [ + "REUSE-WP-ADHOC-2026-10-16-T01" + ], + "cancelled_tasks": [], + "created_edges": [], + "removed_edges": [], + "unresolved_edges": [], + "external_edges": [], + "refused": [], + "notes": [] + } + } +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-publication/publication-commit.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-publication/publication-commit.json new file mode 100644 index 0000000..ba5a622 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-publication/publication-commit.json @@ -0,0 +1,17 @@ +{ + "exit_code": 0, + "commit": "ed3c900efbe96b931747dee336bf30e92744764f", + "base": "01af18964b170eaa87f8560ce9285518e8dc6d7e", + "files": [ + { + "path": "registry/capabilities/capability.infotech.headless-browser.md", + "sha256": "3d3c12616fd1aa94f7ac3f393387e801323647baee6fcf041b9bfc548be63fb7" + }, + { + "path": "registry/indexes/capabilities.yaml", + "sha256": "2d810013a88b6dcf292ab20acb1599f573f669a5df96f523c1c5fd7f9c32863c" + } + ], + "stdout": "[main ed3c900] Point browser discovery to the verified supervised managed development flow\n 2 files changed, 30 insertions(+), 30 deletions(-)\n", + "stderr": "" +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-publication/publication-inputs.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-publication/publication-inputs.json new file mode 100644 index 0000000..0871385 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-publication/publication-inputs.json @@ -0,0 +1,15 @@ +{ + "owner": "reuse-surface", + "base_revision": "01af18964b170eaa87f8560ce9285518e8dc6d7e", + "message": "Point browser discovery to the verified supervised managed development flow", + "files": [ + { + "path": "registry/capabilities/capability.infotech.headless-browser.md", + "sha256": "3d3c12616fd1aa94f7ac3f393387e801323647baee6fcf041b9bfc548be63fb7" + }, + { + "path": "registry/indexes/capabilities.yaml", + "sha256": "2d810013a88b6dcf292ab20acb1599f573f669a5df96f523c1c5fd7f9c32863c" + } + ] +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-validation.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-validation.json new file mode 100644 index 0000000..474f116 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/reuse-validation.json @@ -0,0 +1,14 @@ +{ + "command": [ + "/home/worsch/reuse-surface/.venv/bin/python", + "-m", + "reuse_surface.cli", + "validate", + "--root", + "/home/worsch/reuse-surface", + "--fail-on-warnings" + ], + "exit_code": 0, + "stdout": "ok: validated 3 capability entries\n", + "stderr": "" +} diff --git a/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/tea-isolation-result.json b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/tea-isolation-result.json new file mode 100644 index 0000000..d07a503 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/tea-isolation-result.json @@ -0,0 +1,10 @@ +{ + "native_changes": false, + "client": "installed Tea 0.9.2", + "profile": "existing routed workstation development credential; no independent agent identity claim", + "original_tea_configuration_used": false, + "credential_values_emitted": false, + "configuration_isolation_verified": true, + "mode": "configuration-isolation-only; no credential or API request", + "temporary_configuration_removed": true +} diff --git a/docs/netkingdom-development.md b/docs/netkingdom-development.md new file mode 100644 index 0000000..ee47a31 --- /dev/null +++ b/docs/netkingdom-development.md @@ -0,0 +1,118 @@ +# Working development entrypoints + +Verified 18 October 2026 for CUST-WP-0080. Use the existing owner implementations +below; the table distinguishes working paths from remaining acceptance. + +| Flow | Verified result | Still required | +| --- | --- | --- | +| Playwright, human and coding agent | Both real fixture trials passed, with keyboard interaction and desktop/mobile screenshots | Independent per-caller identity is deferred to WP-82 | +| Forgejo Git | Existing workstation SSH read and ordinary source publication work | T44 must accept the complete agent Git/API flow | +| Forgejo authenticated API | Owner-routed check stopped at OpenBao 403 before Tea ran | Supported caller login, then the actual API check | +| Forgejo through NetKingdom | Candidate preparation and local interoperability proofs passed | T42 approval/reviews/activation, then T43 actual human sign-in | + +## Playwright + +Use the provider-owned [consumer contract](https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/consumer-contract.md) +and standalone Python client. No local Playwright or browser installation is +needed. The verified client is `client/rapp_playwright.py` at commit +`8831a05aeba5ce588f3b395ade676dde2a151c5d`, SHA-256 +`9967a0831ed04e27fde419098af707722d5c81c993e4c294b3677ffb75729c12`. + +With the existing supervised workstation Kubernetes connection to railiance01, +start the documented loopback connection if one is not already running: + +```sh +kubectl -n playwright port-forward deployment/playwright 18081:8080 --address 127.0.0.1 +``` + +Leave it running. In another terminal: + +```sh +python3 /home/worsch/rapp-playwright/client/rapp_playwright.py preflight +python3 /home/worsch/rapp-playwright/client/rapp_playwright.py trial --out /tmp/wp80-playwright-new-trial +``` + +Choose a **new output directory** on every trial. Preflight should report +`available: true` and execution location `railiance01/playwright`; the trial +should report `status: passed`, four downloaded PNGs and their SHA-256 hashes. +The private `run.json` is a capability handle and must stay out of Git and chat. + +The [actual human and agent receipts](changes/netkingdom-target-2026-10-18/wp80-build-mode-r1/README.md) +prove this supervised profile. The provider contract governs supported scenarios +and target origins; the remote browser's localhost is the provider's localhost. + +Discovery uses the existing `capability.infotech.headless-browser` record in +reuse-surface. Its [published owner card](https://forgejo.coulomb.social/coulomb/reuse-surface/src/commit/ed3c900efbe96b931747dee336bf30e92744764f/registry/capabilities/capability.infotech.headless-browser.md) +now points to this working managed entrypoint. The local query and hosted +federation both returned it. Availability remains A5: the supervised pilot does +not establish independent managed admission for every caller. + +## Forgejo Git and API + +Use the existing repository remote and normal source publication process: + +```sh +git -C /home/worsch/the-custodian ls-remote origin refs/heads/main +``` + +The measured read succeeded in 0.629 seconds at revision +`17635cb0a76e5595ec06421ab7419ae889f6d731`. That revision's ordinary commit, +scanner, publication and primary projection receipts provide the existing write +sample. Use the repository's normal commit and `statehub fix-consistency` path. + +Discover the API credential owner first: + +```sh +warden route find 'Forgejo API access with existing tea coding-agent client' --json +warden plan 'forgejo admin api token' --json +``` + +The reviewed probe uses installed Tea 0.9.2 and a disposable isolated +configuration. It reads the authenticated identity and `coulomb/the-custodian`, +prints metadata only and removes its temporary configuration. Run through the +existing owner transport after its caller prerequisites are satisfied: + +```sh +warden access forgejo-admin-api-token --exec --field API_TOKEN -- python3 /home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/check_forgejo_cli.py +``` + +**Current result: not passed.** The owner transport returned OpenBao 403 before +the probe received a credential or invoked the API. The installed Tea default +points at a retired Gitea host; that credential was not used against the current +forge. No authenticated API result has been accepted. + +`warden plan 'oidc login forgejo admin' --json` identifies the existing +founder-required KeyCape OIDC/MFA login lane. That human login is still a +prerequisite to resolve through the owner path. The recorded route plans and +closed failure markers are in the [entrypoint evidence](changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/README.md). + +## Forgejo NetKingdom sign-in and repository privacy + +The [prepared rollout](changes/netkingdom-target-2026-10-18/forgejo-good-case-preparation-r1/README.md) +is revision 2, pending actual founder disposition and independent owner reviews. +It proposes using the existing KeyCape issuer and upstream Forgejo OIDC/PKCE +support, with local account linking. It has not been activated. The human +sign-in/account-continuity test follows activation. + +Making repositories private is owned by ORGREF-WP-0002 in +`prj-forgejo-org-refactor`. WP-80 establishes working development access first. +The closure workplan separately proves service readers, rehearses visibility +changes and obtains approval for production waves. The proposed login rollout +changes no repository visibility. + +## Implementation ownership + +| Need | Existing implementation to reuse | +| --- | --- | +| Browser execution and job protocol | rapp-playwright service and standalone Python client | +| Capability discovery | reuse-surface capability card and existing federation | +| Git and API | Existing Git/SSH path, Tea CLI and warden-routed Platform custody | +| Identity and client registration | KeyCape issuer and NetKingdom's maintained registration helper | +| Forgejo configuration | Apps Helm declarations and upstream Forgejo auth-source command | +| Source-to-Hub publication | Existing file-scoped publication, fix-consistency and repo-manager projection | +| Repository visibility | ORGREF-WP-0002 and its consumer-readiness/closure evidence | + +Custodian records acceptance and integration evidence. Missing producer features +belong in the existing owner's work record. Security acceptance remains in +[WP-82](../workplans/CUST-WP-0082-netkingdom-security-hardening.md), including the +target of current KeyCape checks on every API/Git/SSH operation. diff --git a/workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md b/workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md index fdb56ab..6540742 100644 --- a/workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md +++ b/workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md @@ -24,7 +24,7 @@ decision `9663d4ca-3793-4ad7-9dc1-954001d43596`. | --- | --- | --- | | 1. Playwright for a human and coding agent | **Delivered in the supervised build profile** | Both actual supported-command trials passed on railiance01, each with 14 steps, keyboard interaction and desktop/mobile screenshots. T25/T26. | | 2. Everyday Forgejo development | **Next; not yet accepted** | Current 11.0.3 release identified; API and Git respond, but NetKingdom sign-in is absent. T41 prepared and tested the candidate; T42 awaits the founder and independent owner reviews before activation; T43/T44 verify human sign-in and agent Git/API use. T23 collects acceptance. | -| 3. Repeatable entry points and close-out | **In progress** | Supported commands, measured steps/manual touches, exact source/Hub readback and final functional audit. T33/T37/T38/T04. | +| 3. Repeatable entry points and close-out | **In progress** | Browser discovery is published and visible in the hosted registry (T45). The short runbook and bounded measurements are available; actual Forgejo sign-in/API acceptance and final audit remain. T33/T37/T38/T04. | | Earlier delivered engineering | **8 checkpoints** | Seven bounded source reviews T07-T13 plus the native scanner/publication repair T20. These retain their original scope. | | Security hardening | **Deferred, not fixed** | 19 complete checkpoints and 6 remaining acceptance scopes transferred to live CUST-WP-0082. All 16 full architecture gates remain unaccepted. | @@ -462,7 +462,7 @@ Transferred, not implemented: the original security acceptance and implementatio ```task id: CUST-WP-0080-T33 -status: todo +status: progress priority: high depends_on: [CUST-WP-0080-T12] state_hub_task_id: "4547ac4c-8893-54fe-ae6e-362682bb7920" @@ -470,6 +470,8 @@ state_hub_task_id: "4547ac4c-8893-54fe-ae6e-362682bb7920" Completion test: verify canonical Playwright and Forgejo owner commands, links, actual profile/availability and expected outputs, then publish a short delivery runbook linking their source-owned clients and existing reuse-surface capability records. Do not copy clients or create another catalog. Broader all-70 capability/version/package-family reconciliation remains CUST-WP-0082-T22. +Delivered the [working development runbook](../docs/netkingdom-development.md). Existing browser discovery now names the verified managed profile (T45); Git read/publication and current API route evidence are retained. Still open: actual Forgejo sign-in/API acceptance and successful final commands after T42-T44. The routed API attempt stopped at OpenBao 403 before Tea ran; no authenticated API success is claimed. + ## T34 - Accept the first unassisted security-flow run ```task @@ -507,13 +509,15 @@ Transferred, not implemented: the original security acceptance and implementatio ```task id: CUST-WP-0080-T37 -status: todo +status: progress priority: high state_hub_task_id: "d533ca34-a691-5f8e-8cc2-5f408b679538" ``` Completion test: record supported-command steps, manual touches and observed run time for the human/agent Playwright flow and everyday Forgejo flow. Retain the measured native scanner/publication repair as one bounded sample. Do not invent an unmeasured baseline or generalize to security latency/resource acceptance; that original full profile remains CUST-WP-0082-T23. +Partial [measurements](../docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/measurements.json): actual human/agent Playwright server runs 3.801/3.938 seconds, documented connection/preflight/trial counts, SSH Git read 0.629 seconds, retained 278-object scanner sample 58.18 seconds under unchanged 90-second budget. Human Forgejo onboarding and successful authenticated API timing remain unmeasured pending T42-T44. + ## T38 - Record the founder sequencing and exact hardening handoff ```task @@ -599,6 +603,19 @@ state_hub_task_id: "8c9c4dda-5047-5d37-9037-4f7e5eac53d8" Use an existing supported coding-agent access path and its stated build profile. Verify an ordinary Git read/write and authenticated API read, with exact source/result evidence and cleanup for any disposable object. Discover credential ownership through warden route; distribute no administrator kubeconfig or secret through coordination. The public version endpoint alone is insufficient. Publish the canonical owner commands and actual profile limits for T33/T37; independent current KeyCape checks per operation remain WP-82 work. +Baseline: existing SSH read and ordinary source publication work. The installed Tea default targets retired Gitea and was not reused. The current owner-routed API attempt returned OpenBao 403 before the isolated Tea probe received a credential; no API operation ran. The route plan identifies founder-required KeyCape OIDC/MFA caller login. [Evidence and current commands](../docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/README.md). This retained failure does not close T44. + +## T45 - Publish the verified browser entrypoint in existing discovery + +```task +id: CUST-WP-0080-T45 +status: done +priority: high +state_hub_task_id: "34641b3d-bfe6-5fc3-bfa9-b2d9f93fe339" +``` + +Completed bounded discovery correction: reuse-surface commit ed3c900efbe96b931747dee336bf30e92744764f updates the existing browser capability card and index to the actual supervised managed commands. Owner validation passed all three entries; local query and hosted federation returned the corrected card. D3/A5/C2/R2, capability identity and implementation ownership are unchanged. No new client, catalog or deployment. [Publication and readback evidence](../docs/changes/netkingdom-target-2026-10-18/wp80-development-entrypoints-r1/README.md). Full T33 command acceptance still depends on actual Forgejo use. + ## Original security acceptance mapping retained for WP-82 | Architecture gate | Custodian evidence checkpoints |