Canvas challenge consistency
canvas.challenges
Ready · No signal has been run.
Results
Research focus
Selected evidence from this run. Cross-run stability and comparison verdicts require a session comparison.
Full evidence
| Property | Value |
|---|---|
| No results yet. No signal has been run. | |
JSON
Selected signal results for external comparison. Field statuses, controls and exact values are retained.
No run export is available.
Source
Source is not connected yet.
// Test source pending.Reference
Reference is not connected yet.
Definition
Distinct A/B drawings on fresh and reused contexts, geometry-only outputs and opaque controls retain every measured raster.
Find it in the repository
- Collector source
core/signals/canvas/challenges.ts- Export
measurementModule· Signal object- Field definitions
core/definitions/canvas/challenges.ts- Capture membership
- Product capture ·
common/capture/product.ts - Page registration
app/signals/registry.ts- Field projection
core/results/measurement.ts
Execution contract
- Signal
canvas.challenges- Collector
canvas.challenges- API / surface
- core/signals/canvas/challenges.ts
- Timeout
- 750 ms
- Companion signals
- None
- Fixture inputs
- Declared requests (listed below)
Exact request inputs
[
{
"key": "canvas.challenges.opaque-0",
"inputs": {
"opaque-0": {
"dimensions": [
2,
2
],
"color": [
17,
34,
51,
255
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
}
}
},
"controls": {
"opaque-0": [
{
"relationshipId": "canvas.opaque-control",
"class": "required",
"preconditions": [
"sRGB opaque integer fill",
"readback executed"
]
}
]
}
},
{
"key": "canvas.challenges.opaque-1",
"inputs": {
"opaque-1": {
"dimensions": [
2,
2
],
"color": [
17,
34,
51,
255
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
}
}
},
"controls": {
"opaque-1": [
{
"relationshipId": "canvas.opaque-control",
"class": "required",
"preconditions": [
"sRGB opaque integer fill",
"readback executed"
]
}
]
}
},
{
"key": "canvas.challenges.fresh-a-0",
"inputs": {
"fresh-A-0": {
"challenge": "A",
"parameters": {
"background": "rgb(240,230,210)",
"stops": [
"#17426a",
"#e28329"
],
"shadow": "rgba(20,40,60,0.5)",
"points": [
[
1,
2
],
[
14,
4
],
[
6,
14
]
],
"composite": "multiply",
"text": "Á",
"font": "8px serif"
},
"dimensions": [
16,
16
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
},
"reset": "bitmap-size",
"text": true,
"mode": "fresh"
}
},
"controls": {}
},
{
"key": "canvas.challenges.export-mime",
"inputs": {
"export-mime": {
"requested": "image/png",
"dimensions": [
16,
16
]
}
},
"controls": {}
},
{
"key": "canvas.challenges.fresh-b-1",
"inputs": {
"fresh-B-1": {
"challenge": "B",
"parameters": {
"background": "rgb(205,225,245)",
"stops": [
"#49245c",
"#36a482"
],
"shadow": "rgba(60,20,40,0.5)",
"points": [
[
2,
1
],
[
13,
13
],
[
3,
11
]
],
"composite": "screen",
"text": "Ω",
"font": "9px monospace"
},
"dimensions": [
16,
16
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
},
"reset": "bitmap-size",
"text": true,
"mode": "fresh"
}
},
"controls": {}
},
{
"key": "canvas.challenges.fresh-a-2",
"inputs": {
"fresh-A-2": {
"challenge": "A",
"parameters": {
"background": "rgb(240,230,210)",
"stops": [
"#17426a",
"#e28329"
],
"shadow": "rgba(20,40,60,0.5)",
"points": [
[
1,
2
],
[
14,
4
],
[
6,
14
]
],
"composite": "multiply",
"text": "Á",
"font": "8px serif"
},
"dimensions": [
16,
16
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
},
"reset": "bitmap-size",
"text": true,
"mode": "fresh"
}
},
"controls": {}
},
{
"key": "canvas.challenges.fresh-b-3",
"inputs": {
"fresh-B-3": {
"challenge": "B",
"parameters": {
"background": "rgb(205,225,245)",
"stops": [
"#49245c",
"#36a482"
],
"shadow": "rgba(60,20,40,0.5)",
"points": [
[
2,
1
],
[
13,
13
],
[
3,
11
]
],
"composite": "screen",
"text": "Ω",
"font": "9px monospace"
},
"dimensions": [
16,
16
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
},
"reset": "bitmap-size",
"text": true,
"mode": "fresh"
}
},
"controls": {}
},
{
"key": "canvas.challenges.reused-a-4",
"inputs": {
"reused-A-4": {
"challenge": "A",
"parameters": {
"background": "rgb(240,230,210)",
"stops": [
"#17426a",
"#e28329"
],
"shadow": "rgba(20,40,60,0.5)",
"points": [
[
1,
2
],
[
14,
4
],
[
6,
14
]
],
"composite": "multiply",
"text": "Á",
"font": "8px serif"
},
"dimensions": [
16,
16
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
},
"reset": "bitmap-size",
"text": true,
"mode": "reused"
}
},
"controls": {}
},
{
"key": "canvas.challenges.reused-b-5",
"inputs": {
"reused-B-5": {
"challenge": "B",
"parameters": {
"background": "rgb(205,225,245)",
"stops": [
"#49245c",
"#36a482"
],
"shadow": "rgba(60,20,40,0.5)",
"points": [
[
2,
1
],
[
13,
13
],
[
3,
11
]
],
"composite": "screen",
"text": "Ω",
"font": "9px monospace"
},
"dimensions": [
16,
16
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
},
"reset": "bitmap-size",
"text": true,
"mode": "reused"
}
},
"controls": {}
},
{
"key": "canvas.challenges.geometry-a",
"inputs": {
"geometry-A": {
"challenge": "A",
"parameters": {
"background": "rgb(240,230,210)",
"stops": [
"#17426a",
"#e28329"
],
"shadow": "rgba(20,40,60,0.5)",
"points": [
[
1,
2
],
[
14,
4
],
[
6,
14
]
],
"composite": "multiply",
"text": "Á",
"font": "8px serif"
},
"dimensions": [
16,
16
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
},
"text": false,
"mode": "fresh"
}
},
"controls": {}
},
{
"key": "canvas.challenges.geometry-b",
"inputs": {
"geometry-B": {
"challenge": "B",
"parameters": {
"background": "rgb(205,225,245)",
"stops": [
"#49245c",
"#36a482"
],
"shadow": "rgba(60,20,40,0.5)",
"points": [
[
2,
1
],
[
13,
13
],
[
3,
11
]
],
"composite": "screen",
"text": "Ω",
"font": "9px monospace"
},
"dimensions": [
16,
16
],
"attributes": {
"alpha": false,
"colorSpace": "srgb",
"willReadFrequently": true
},
"text": false,
"mode": "fresh"
}
},
"controls": {}
}
]One collector runs per invocation. Results and JSON select this signal’s fields; any companions execute in the same collector.
Generated source manifest lists runtime files, fixture URLs and content digests for this build. The Source tab provides a copyable console sample.
Run and edit locally
From the repository root, start the Astro app, then open /signals/canvas.challenges. Edit the collector source and reload the page to load its new build.
pnpm run dev:webIn a browser module served by this repository’s Vite graph:
import { createCollector } from "/core/collect"
import { measurementModule } from "/core/signals/canvas/challenges"
const signal = measurementModule
const collector = createCollector()
const suite = { signals: [signal] }
const result = await collector.collect(suite)Reuse the collector owner for repeated calls so collection can enforce cleanup. This returns the collector’s raw result; app/signals/projection.ts selects the retained fields shown on this page.
rg -n 'measurementModule' core app tests
pnpm run check
pnpm run test tests/unit/app/focused-projection.test.ts| Property | Value |
|---|