Fix short-intent discovery and publish verified browser provider guidance
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a13690-1c84-77a2-aeee-7f517ec60f5d
This commit is contained in:
parent
9042dec5ed
commit
50077c9bea
22 changed files with 736 additions and 87 deletions
|
|
@ -36,13 +36,14 @@ Generated by `reuse-surface catalog`. Do not edit manually.
|
|||
### Headless Browser Automation
|
||||
|
||||
- **ID:** `capability.infotech.headless-browser`
|
||||
- **Vector:** D3 / A2 / C2 / R2
|
||||
- **Vector:** D3 / A5 / C2 / R2
|
||||
- **Owner:** reuse-surface
|
||||
- **Path:** `registry/capabilities/capability.infotech.headless-browser.md`
|
||||
- **Summary:** Headless browser automation with Playwright and Chromium for UI testing, screenshots and page extraction; recommended default based on existing whynot-design, coulomb-social, core-hub and frontend-patterns implementations. A rapp-playwright-provided service will be available shortly (announced 2026-10-13; planned, not yet verified available).
|
||||
- **Summary:** Headless browser automation, screenshots and keyboard trials through rapp-playwright 0.1.0 (Playwright 1.64.0, Chromium 156.0.8078.4). Published A5 local container; managed Railiance admission is pending. Download the Python 3.10+ standalone client from https://forgejo.coulomb.social/coulomb/rapp-playwright/raw/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/client/rapp_playwright.py and run `python3 rapp_playwright.py --url http://127.0.0.1:18083 preflight`, then `python3 rapp_playwright.py --url http://127.0.0.1:18083 trial --out trial-01` with a fresh output directory. This endpoint was verified locally on 2026-10-13 and is ephemeral; it installs no browser for the caller. If unreachable, follow the local container setup in the capability card or adapt its A2 source examples; this is an availability gap on the existing capability. Contract: https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/consumer-contract.md.
|
||||
|
||||
**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.
|
||||
- The forthcoming rapp-playwright service has no verified endpoint or launch receipt in this record yet.
|
||||
- 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.
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@
|
|||
<section><h2>infotech</h2>
|
||||
<article class="card">
|
||||
<h3>Headless Browser Automation</h3>
|
||||
<p class="meta"><code>capability.infotech.headless-browser</code> · D3 / A2 / C2 / R2</p>
|
||||
<p>Headless browser automation with Playwright and Chromium for UI testing, screenshots and page extraction; recommended default based on existing whynot-design, coulomb-social, core-hub and frontend-patterns implementations. A rapp-playwright-provided service will be available shortly (announced 2026-10-13; planned, not yet verified available).</p>
|
||||
<p class="meta"><code>capability.infotech.headless-browser</code> · D3 / A5 / C2 / R2</p>
|
||||
<p>Headless browser automation, screenshots and keyboard trials through rapp-playwright 0.1.0 (Playwright 1.64.0, Chromium 156.0.8078.4). Published A5 local container; managed Railiance admission is pending. Download the Python 3.10+ standalone client from https://forgejo.coulomb.social/coulomb/rapp-playwright/raw/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/client/rapp_playwright.py and run `python3 rapp_playwright.py --url http://127.0.0.1:18083 preflight`, then `python3 rapp_playwright.py --url http://127.0.0.1:18083 trial --out trial-01` with a fresh output directory. This endpoint was verified locally on 2026-10-13 and is ephemeral; it installs no browser for the caller. If unreachable, follow the local container setup in the capability card or adapt its A2 source examples; this is an availability gap on the existing capability. Contract: https://forgejo.coulomb.social/coulomb/rapp-playwright/src/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/docs/consumer-contract.md.</p>
|
||||
<p class="path">registry/capabilities/capability.infotech.headless-browser.md</p>
|
||||
</article></section>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
{
|
||||
"id": "capability.infotech.headless-browser",
|
||||
"name": "Headless Browser Automation",
|
||||
"summary": "Headless browser automation with Playwright and Chromium for UI testing, screenshots and page extraction; recommended default based on existing whynot-design, coulomb-social, core-hub and frontend-patterns implementations. A rapp-playwright-provided service will be available shortly (announced 2026-10-13; planned, not yet verified available).",
|
||||
"vector": "D3 / A2 / C2 / R2",
|
||||
"summary": "Headless browser automation, screenshots and keyboard trials through rapp-playwright 0.1.0 (Playwright 1.64.0, Chromium 156.0.8078.4). Published A5 local container; managed Railiance admission is pending. Download the Python 3.10+ standalone client from https://forgejo.coulomb.social/coulomb/rapp-playwright/raw/commit/8831a05aeba5ce588f3b395ade676dde2a151c5d/client/rapp_playwright.py and run `python3 rapp_playwright.py --url http://127.0.0.1:18083 preflight`, then `python3 rapp_playwright.py --url http://127.0.0.1:18083 trial --out trial-01` with a fresh output directory. This endpoint was verified locally on 2026-10-13 and is ephemeral; it installs no browser for the caller. If unreachable, follow the local container setup in the capability card or adapt its A2 source examples; this is an availability gap on the existing capability. 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",
|
||||
|
|
@ -29,7 +29,10 @@
|
|||
"informational",
|
||||
"source adaptation",
|
||||
"JavaScript library",
|
||||
"Python library"
|
||||
"Python library",
|
||||
"cli",
|
||||
"service API",
|
||||
"container"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
84
docs/evidence/2026-10-13-browser-discovery.md
Normal file
84
docs/evidence/2026-10-13-browser-discovery.md
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
# Browser discovery review — 2026-10-13
|
||||
|
||||
REUSE-WP-0024 resolves the registry-owned portion of REUSE-IN-0001 on the
|
||||
existing `capability.infotech.headless-browser` record. Provider implementation
|
||||
and managed lifecycle remain with rapp-playwright and railiance-platform;
|
||||
CONTENT-WP-0000-T04 remains the consumer's acceptance task.
|
||||
|
||||
## Published provider evidence
|
||||
|
||||
Fetched the raw client, consumer contract, independent-consumer report and
|
||||
release manifest at provider commit
|
||||
`8831a05aeba5ce588f3b395ade676dde2a151c5d`. All four matched `git show` at that
|
||||
revision byte for byte. The single-file Python client SHA-256 is
|
||||
`9967a0831ed04e27fde419098af707722d5c81c993e4c294b3677ffb75729c12`.
|
||||
Pinned public links are retained in the
|
||||
[capability card](../../registry/capabilities/capability.infotech.headless-browser.md).
|
||||
|
||||
The published image is
|
||||
`forgejo.coulomb.social/coulomb/rapp-playwright@sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441`
|
||||
for linux/amd64. Provider publication evidence includes immutable registry
|
||||
verification and railiance01 pull. This review did not redeploy the provider.
|
||||
|
||||
## Fresh client-only local trial
|
||||
|
||||
Executed the downloaded client, without installing Playwright or Chromium:
|
||||
|
||||
```sh
|
||||
python3 /tmp/reuse-browser-review/rapp_playwright.py --url http://127.0.0.1:18083 preflight
|
||||
python3 /tmp/reuse-browser-review/rapp_playwright.py --url http://127.0.0.1:18083 trial --out /tmp/reuse-browser-review/trial-01
|
||||
```
|
||||
|
||||
Both exited 0. Run `6c710b36-319b-45b8-b062-ac2065f5e81b` completed at
|
||||
**18:42:58 UTC** with **14 passed steps**: visibility, counter checks, Tab,
|
||||
focused-button assertion, Enter and screenshot in two viewports. The provider
|
||||
reported service 0.1.0, Playwright 1.64.0, Chromium 156.0.8078.4,
|
||||
`workstation-release-check`, and the published digest above. Preflight permitted
|
||||
no external origins; only the synthetic fixture was exercised.
|
||||
|
||||
Independently parsed all four PNG headers and recomputed hashes against the
|
||||
client receipt. Desktop screenshots are 1280×800 and narrow screenshots are
|
||||
390×844. This validates dimensions and integrity, not visual-baseline quality.
|
||||
|
||||
- [Preflight](2026-10-13-browser-discovery/preflight.json)
|
||||
- [Receipt](2026-10-13-browser-discovery/receipt.json)
|
||||
- [Independent artifact checks](2026-10-13-browser-discovery/artifact-checks.json)
|
||||
- [Desktop fixture](2026-10-13-browser-discovery/desktop-final.png)
|
||||
- [Narrow fixture](2026-10-13-browser-discovery/narrow-final.png)
|
||||
|
||||
Private run handles are excluded. The endpoint is ephemeral and was available
|
||||
on this workstation at trial time; it is not a managed service or a promise of
|
||||
future availability. The source examples remain a fallback when a provider is
|
||||
unavailable. No consumer app, remote target or managed browser was tested.
|
||||
|
||||
## Assessment and matching
|
||||
|
||||
Promoted availability **A2 → A5** under the standard's deployable-container
|
||||
definition. **A6 managed platform capability remains pending**. D3/C2/R2 stay
|
||||
conservative; fixture execution does not prove broader target compatibility or
|
||||
platform operation. Decision recorded in State Hub as
|
||||
`b8ef28c1-9164-4678-8a61-1652e0f07407`.
|
||||
|
||||
Before this fix, `plan-check --intent "headless browser" --no-llm` returned
|
||||
`new`, with an unrelated context engine first at 0.0476 and the browser third.
|
||||
After scoring names independently from summaries/tags, the same query returns
|
||||
`reuse`, with the browser first at **0.6667** and unrelated matches at **0.2 or
|
||||
less**. Long command/evidence summaries no longer dilute direct name matches.
|
||||
The output includes the standalone client link, preflight/trial commands,
|
||||
ephemeral endpoint warning, managed-admission condition and availability-gap
|
||||
fallback. Reuse advice now describes relevance rather than asserting readiness.
|
||||
|
||||
Regressions cover short-name relevance despite long summaries and higher-maturity
|
||||
unrelated services, summary-only matching, equal-relevance maturity ties, and
|
||||
hosted CLI output carrying conditional provider instructions. Stats tests now
|
||||
use a fixed temporary registry rather than assuming the live repo always has
|
||||
two capabilities.
|
||||
|
||||
## Validation
|
||||
|
||||
- `.venv/bin/python -m pytest -q`: **212 passed**. One existing Starlette
|
||||
TestClient/httpx deprecation warning remains.
|
||||
- `validate --relations --fail-on-warnings`: **3 entries valid**.
|
||||
- `catalog`, `graph --check`, and `federation compose`: generated successfully;
|
||||
**66 federated capabilities**, preserving one browser capability.
|
||||
- `git diff --check`: clean.
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
[
|
||||
{
|
||||
"name": "desktop-6-keyboard-result.png",
|
||||
"bytes": 26622,
|
||||
"sha256": "b15998824256b86c74f2bbb75f061061be65db0b4f3bb5444529ac69a723cdad",
|
||||
"width": 1280,
|
||||
"height": 800
|
||||
},
|
||||
{
|
||||
"name": "desktop-final.png",
|
||||
"bytes": 26622,
|
||||
"sha256": "b15998824256b86c74f2bbb75f061061be65db0b4f3bb5444529ac69a723cdad",
|
||||
"width": 1280,
|
||||
"height": 800
|
||||
},
|
||||
{
|
||||
"name": "narrow-6-keyboard-result.png",
|
||||
"bytes": 24280,
|
||||
"sha256": "49d27cb169b8e180ce93969c6d2b8619a7684cf035bb9dcae9cd91d8bd9952e8",
|
||||
"width": 390,
|
||||
"height": 844
|
||||
},
|
||||
{
|
||||
"name": "narrow-final.png",
|
||||
"bytes": 24280,
|
||||
"sha256": "49d27cb169b8e180ce93969c6d2b8619a7684cf035bb9dcae9cd91d8bd9952e8",
|
||||
"width": 390,
|
||||
"height": 844
|
||||
}
|
||||
]
|
||||
BIN
docs/evidence/2026-10-13-browser-discovery/desktop-final.png
Normal file
BIN
docs/evidence/2026-10-13-browser-discovery/desktop-final.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
BIN
docs/evidence/2026-10-13-browser-discovery/narrow-final.png
Normal file
BIN
docs/evidence/2026-10-13-browser-discovery/narrow-final.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
22
docs/evidence/2026-10-13-browser-discovery/preflight.json
Normal file
22
docs/evidence/2026-10-13-browser-discovery/preflight.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"available": true,
|
||||
"error": null,
|
||||
"checked_at": "2026-10-13T18:42:18.136Z",
|
||||
"browser_version": "156.0.8078.4",
|
||||
"api_version": "1",
|
||||
"service_version": "0.1.0",
|
||||
"playwright_version": "1.64.0",
|
||||
"execution_location": "workstation-release-check",
|
||||
"release": "sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441",
|
||||
"allowed_origins": [],
|
||||
"fixture": true,
|
||||
"active": 0,
|
||||
"queued": 0,
|
||||
"limits": {
|
||||
"concurrency": 1,
|
||||
"max_queue": 4,
|
||||
"max_timeout_ms": 120000,
|
||||
"retention_ms": 3600000,
|
||||
"max_runs": 64
|
||||
}
|
||||
}
|
||||
184
docs/evidence/2026-10-13-browser-discovery/receipt.json
Normal file
184
docs/evidence/2026-10-13-browser-discovery/receipt.json
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
{
|
||||
"id": "6c710b36-319b-45b8-b062-ac2065f5e81b",
|
||||
"api_version": "1",
|
||||
"status": "passed",
|
||||
"error": null,
|
||||
"label": "independent-browser-trial",
|
||||
"target": "fixture",
|
||||
"viewports": [
|
||||
{
|
||||
"name": "desktop",
|
||||
"width": 1280,
|
||||
"height": 800
|
||||
},
|
||||
{
|
||||
"name": "narrow",
|
||||
"width": 390,
|
||||
"height": 844
|
||||
}
|
||||
],
|
||||
"timeout_ms": 60000,
|
||||
"created_at": "2026-10-13T18:42:41.545Z",
|
||||
"expires_at": "2026-10-13T19:42:41.545Z",
|
||||
"service_version": "0.1.0",
|
||||
"playwright_version": "1.64.0",
|
||||
"release": "sha256:8d6fd5a8172cf906bb503642ed620761945c5138b86f6396c36f65cbe6def441",
|
||||
"execution_location": "workstation-release-check",
|
||||
"browser_version": "156.0.8078.4",
|
||||
"completed_steps": 14,
|
||||
"steps": [
|
||||
{
|
||||
"viewport": "desktop",
|
||||
"index": 0,
|
||||
"action": "visible",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:52.067Z",
|
||||
"selector": "h1"
|
||||
},
|
||||
{
|
||||
"viewport": "desktop",
|
||||
"index": 1,
|
||||
"action": "text",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:52.461Z",
|
||||
"selector": "#count"
|
||||
},
|
||||
{
|
||||
"viewport": "desktop",
|
||||
"index": 2,
|
||||
"action": "press",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:52.576Z",
|
||||
"key": "Tab"
|
||||
},
|
||||
{
|
||||
"viewport": "desktop",
|
||||
"index": 3,
|
||||
"action": "focused",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:52.660Z",
|
||||
"selector": "#increment"
|
||||
},
|
||||
{
|
||||
"viewport": "desktop",
|
||||
"index": 4,
|
||||
"action": "press",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:52.674Z",
|
||||
"key": "Enter"
|
||||
},
|
||||
{
|
||||
"viewport": "desktop",
|
||||
"index": 5,
|
||||
"action": "text",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:52.754Z",
|
||||
"selector": "#count"
|
||||
},
|
||||
{
|
||||
"viewport": "desktop",
|
||||
"index": 6,
|
||||
"action": "screenshot",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:52.764Z"
|
||||
},
|
||||
{
|
||||
"viewport": "narrow",
|
||||
"index": 0,
|
||||
"action": "visible",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:55.566Z",
|
||||
"selector": "h1"
|
||||
},
|
||||
{
|
||||
"viewport": "narrow",
|
||||
"index": 1,
|
||||
"action": "text",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:55.959Z",
|
||||
"selector": "#count"
|
||||
},
|
||||
{
|
||||
"viewport": "narrow",
|
||||
"index": 2,
|
||||
"action": "press",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:56.177Z",
|
||||
"key": "Tab"
|
||||
},
|
||||
{
|
||||
"viewport": "narrow",
|
||||
"index": 3,
|
||||
"action": "focused",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:56.253Z",
|
||||
"selector": "#increment"
|
||||
},
|
||||
{
|
||||
"viewport": "narrow",
|
||||
"index": 4,
|
||||
"action": "press",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:56.265Z",
|
||||
"key": "Enter"
|
||||
},
|
||||
{
|
||||
"viewport": "narrow",
|
||||
"index": 5,
|
||||
"action": "text",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:56.275Z",
|
||||
"selector": "#count"
|
||||
},
|
||||
{
|
||||
"viewport": "narrow",
|
||||
"index": 6,
|
||||
"action": "screenshot",
|
||||
"status": "passed",
|
||||
"at": "2026-10-13T18:42:56.359Z"
|
||||
}
|
||||
],
|
||||
"artifacts": [
|
||||
{
|
||||
"name": "desktop-6-keyboard-result.png",
|
||||
"bytes": 26622
|
||||
},
|
||||
{
|
||||
"name": "desktop-final.png",
|
||||
"bytes": 26622
|
||||
},
|
||||
{
|
||||
"name": "narrow-6-keyboard-result.png",
|
||||
"bytes": 24280
|
||||
},
|
||||
{
|
||||
"name": "narrow-final.png",
|
||||
"bytes": 24280
|
||||
}
|
||||
],
|
||||
"started_at": "2026-10-13T18:42:41.550Z",
|
||||
"blocked_requests": 13,
|
||||
"finished_at": "2026-10-13T18:42:58.107Z",
|
||||
"downloads": [
|
||||
{
|
||||
"name": "desktop-6-keyboard-result.png",
|
||||
"bytes": 26622,
|
||||
"sha256": "b15998824256b86c74f2bbb75f061061be65db0b4f3bb5444529ac69a723cdad"
|
||||
},
|
||||
{
|
||||
"name": "desktop-final.png",
|
||||
"bytes": 26622,
|
||||
"sha256": "b15998824256b86c74f2bbb75f061061be65db0b4f3bb5444529ac69a723cdad"
|
||||
},
|
||||
{
|
||||
"name": "narrow-6-keyboard-result.png",
|
||||
"bytes": 24280,
|
||||
"sha256": "49d27cb169b8e180ce93969c6d2b8619a7684cf035bb9dcae9cd91d8bd9952e8"
|
||||
},
|
||||
{
|
||||
"name": "narrow-final.png",
|
||||
"bytes": 24280,
|
||||
"sha256": "49d27cb169b8e180ce93969c6d2b8619a7684cf035bb9dcae9cd91d8bd9952e8"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
graph LR
|
||||
capability_infotech_headless_browser["capability.infotech.headless-browser<br/>D3 / A2 / C2 / R2"]
|
||||
capability_infotech_headless_browser["capability.infotech.headless-browser<br/>D3 / A5 / C2 / R2"]
|
||||
capability_registry_register["capability.registry.register<br/>D3 / A4 / C2 / R3"]
|
||||
capability_registry_validate["capability.registry.validate<br/>D4 / A3 / C3 / R3"]
|
||||
capability_registry_register -->|supports| capability_feature_control_evaluate
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
<p class="legend">Generated from entry <code>relations</code> fields. Regenerate with <code>reuse-surface graph</code>.</p>
|
||||
<pre class="mermaid" id="graph"></pre>
|
||||
<script>
|
||||
document.getElementById('graph').textContent = "graph LR\n capability_infotech_headless_browser[\"capability.infotech.headless-browser<br/>D3 / A2 / C2 / R2\"]\n capability_registry_register[\"capability.registry.register<br/>D3 / A4 / C2 / R3\"]\n capability_registry_validate[\"capability.registry.validate<br/>D4 / A3 / C3 / R3\"]\n capability_registry_register -->|supports| capability_feature_control_evaluate\n capability_registry_register -->|supports| capability_identity_vocabulary_canonicalize\n capability_registry_register -->|related_to| capability_registry_validate\n capability_registry_validate -->|depends_on| capability_registry_register\n capability_registry_validate -->|related_to| capability_registry_register\n";
|
||||
document.getElementById('graph').textContent = "graph LR\n capability_infotech_headless_browser[\"capability.infotech.headless-browser<br/>D3 / A5 / C2 / R2\"]\n capability_registry_register[\"capability.registry.register<br/>D3 / A4 / C2 / R3\"]\n capability_registry_validate[\"capability.registry.validate<br/>D4 / A3 / C3 / R3\"]\n capability_registry_register -->|supports| capability_feature_control_evaluate\n capability_registry_register -->|supports| capability_identity_vocabulary_canonicalize\n capability_registry_register -->|related_to| capability_registry_validate\n capability_registry_validate -->|depends_on| capability_registry_register\n capability_registry_validate -->|related_to| capability_registry_register\n";
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue