@photivra/engine 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -1
- package/CITATION.cff +1 -1
- package/NOTICE +29 -0
- package/README.md +6 -6
- package/THIRD_PARTY.md +10 -0
- package/dist/composition/image-formation-plan.d.ts.map +1 -1
- package/dist/composition/image-formation-plan.js +17 -8
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +6 -0
- package/dist/optics/complex-pupil-psf.d.ts.map +1 -1
- package/dist/optics/complex-pupil-psf.js +10 -7
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +78 -0
- package/dist/output/native-capture-sdr.d.ts.map +1 -0
- package/dist/output/native-capture-sdr.js +171 -0
- package/dist/output/native-capture-sdr.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +47 -0
- package/dist/output/print-contrast-reference.d.ts.map +1 -0
- package/dist/output/print-contrast-reference.js +95 -0
- package/dist/output/print-contrast-reference.js.map +1 -0
- package/dist/output/print-detail.d.ts +7 -0
- package/dist/output/print-detail.d.ts.map +1 -1
- package/dist/output/print-detail.js +20 -11
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +92 -0
- package/dist/output/print-region-statistics.d.ts.map +1 -0
- package/dist/output/print-region-statistics.js +300 -0
- package/dist/output/print-region-statistics.js.map +1 -0
- package/dist/sensor/environment-photo-signal.d.ts +8 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +1 -1
- package/dist/sensor/environment-photo-signal.js +16 -6
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/docs/API_REFERENCE.md +52 -1
- package/docs/API_STYLE.md +1 -1
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/AUTOMATION_COORDINATION.md +1 -1
- package/docs/CAPTURE_COLOR.md +1 -1
- package/docs/CAPTURE_CORRECTED_SDR.md +1 -1
- package/docs/CAPTURE_EXPORT_METADATA.md +1 -1
- package/docs/CAPTURE_SDR.md +3 -1
- package/docs/DEVELOPERS.md +6 -4
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +1 -1
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +23 -4
- package/docs/EXPORT_ACCEPTANCE.md +1 -1
- package/docs/GENERIC_TIER_PRESETS.md +1 -1
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +1 -1
- package/docs/IMAGE_FORMATION.md +1 -1
- package/docs/LINEAR_CAPTURE_ENCODING.md +1 -1
- package/docs/MOTION_AND_SIGNAL.md +1 -1
- package/docs/NATIVE_CAPTURE_SDR.md +70 -0
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +37 -0
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +34 -0
- package/docs/NUMERICAL_CORRECTNESS.md +1 -1
- package/docs/PERFORMANCE_BASELINE.md +1 -1
- package/docs/PHOTOGRAPHIC_EXPORT.md +1 -1
- package/docs/PHYSICS_FOUNDATION.md +1 -1
- package/docs/POC_API.md +1 -1
- package/docs/POC_PROJECTION_REUSE.md +1 -1
- package/docs/PRINT_195_196_REVIEW.md +93 -0
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +45 -0
- package/docs/PRINT_CONTRAST_REFERENCE.md +43 -0
- package/docs/PRINT_DETAIL_ASSESSMENT.md +1 -1
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +36 -0
- package/docs/PRINT_DETAIL_VALIDATION.md +1 -1
- package/docs/PRINT_PLANNING.md +3 -1
- package/docs/PRINT_REGION_STATISTICS.md +38 -0
- package/docs/PROCESSED_OUTPUT.md +1 -1
- package/docs/PRODUCTION_COMPOSITION.md +1 -1
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +1 -1
- package/docs/PROVENANCE.md +1 -1
- package/docs/PSF_FOUNDATION.md +11 -1
- package/docs/RAW_FRAME_ENVELOPE.md +1 -1
- package/docs/RAW_FRAME_RECONSTRUCTION.md +1 -1
- package/docs/RELEASE_1_2_0.md +51 -0
- package/docs/RELEASE_1_3_0.md +15 -0
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +1 -1
- package/docs/SCENE_SENSOR_QUADRATURE.md +1 -1
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +1 -1
- package/docs/SCIENTIFIC_ASSURANCE.md +1 -1
- package/docs/SCIENTIFIC_CONFORMANCE.md +1 -1
- package/docs/SDR_RENDERING.md +1 -1
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +1 -1
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +1 -1
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +1 -1
- package/docs/SENSOR_PSF_QUADRATURE.md +1 -1
- package/docs/SENSOR_RAW_FRAME.md +1 -1
- package/docs/SENSOR_RAW_PRODUCER.md +1 -1
- package/docs/SIGNAL_CONFORMANCE.md +1 -1
- package/docs/SIMULATED_CAPTURE.md +1 -1
- package/docs/STABILIZATION.md +1 -1
- package/docs/TEMPORAL_PHOTO_RAW.md +1 -1
- package/docs/TIER_ACCEPTANCE.md +1 -1
- package/docs/TIER_PRESET_ACCEPTANCE.md +1 -1
- package/docs/USAGE.md +3 -1
- package/docs/V1_COMPOSITION_MAP.md +1 -1
- package/docs/V1_HELPER_REUSE_REVIEW.md +1 -1
- package/docs/V1_PERFORMANCE_DISPOSITION.md +1 -1
- package/docs/api/camera-equivalent-focal-length.md +1 -1
- package/docs/api/camera-field-of-view.md +1 -1
- package/docs/api/camera-projected-object-size.md +1 -1
- package/docs/api/capture-capture-export-metadata.md +1 -1
- package/docs/api/capture-environment-raw-producer.md +1 -1
- package/docs/api/capture-focus-control.md +1 -1
- package/docs/api/capture-linear-encoding.md +1 -1
- package/docs/api/capture-photographic-export.md +1 -1
- package/docs/api/capture-raw-frame-reconstruction.md +1 -1
- package/docs/api/capture-release-sequence.md +1 -1
- package/docs/api/capture-sensor-raw-frame.md +1 -1
- package/docs/api/capture-sensor-raw-producer.md +1 -1
- package/docs/api/capture-simulated-capture.md +1 -1
- package/docs/api/color-capture-color.md +1 -1
- package/docs/api/color-white-balance.md +1 -1
- package/docs/api/composition-image-formation-plan.md +1 -1
- package/docs/api/composition-plan-consumer.md +1 -1
- package/docs/api/core-calculation-result.md +1 -1
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +1 -1
- package/docs/api/core-scientific-assurance.md +1 -1
- package/docs/api/core-spectral-composition.md +1 -1
- package/docs/api/core-spectral.md +1 -1
- package/docs/api/core-validation.md +1 -1
- package/docs/api/core-version.md +2 -2
- package/docs/api/equipment-exposure-capabilities.md +1 -1
- package/docs/api/equipment-generic-tier-assets.md +1 -1
- package/docs/api/equipment-generic-tier-presets.md +1 -1
- package/docs/api/equipment-iso-capabilities.md +1 -1
- package/docs/api/equipment-metering-capabilities.md +1 -1
- package/docs/api/equipment-release-capabilities.md +1 -1
- package/docs/api/exports.json +152 -2
- package/docs/api/exposure-exposure-duration-control.md +1 -1
- package/docs/api/exposure-exposure-mode-resolver.md +1 -1
- package/docs/api/exposure-exposure.md +1 -1
- package/docs/api/exposure-flash.md +1 -1
- package/docs/api/exposure-metering-scene-radiance.md +1 -1
- package/docs/api/exposure-metering-target.md +1 -1
- package/docs/api/exposure-metering-temporal.md +1 -1
- package/docs/api/exposure-metering.md +1 -1
- package/docs/api/exposure-program-line.md +1 -1
- package/docs/api/motion-camera-rotation.md +1 -1
- package/docs/api/motion-capture-rotation-inverse-mapping.md +1 -1
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +1 -1
- package/docs/api/motion-capture-rotation-trajectory.md +1 -1
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +1 -1
- package/docs/api/motion-extended-object-projection.md +1 -1
- package/docs/api/motion-projected-motion.md +1 -1
- package/docs/api/optics-aperture.md +1 -1
- package/docs/api/optics-circle-of-confusion.md +1 -1
- package/docs/api/optics-complex-pupil-psf.md +7 -1
- package/docs/api/optics-depth-of-field.md +1 -1
- package/docs/api/optics-diffraction.md +1 -1
- package/docs/api/optics-focus-breathing.md +1 -1
- package/docs/api/optics-focus-state.md +1 -1
- package/docs/api/optics-front-of-lens-filter.md +1 -1
- package/docs/api/optics-illumination-vignetting.md +1 -1
- package/docs/api/optics-lateral-chromatic-aberration.md +1 -1
- package/docs/api/optics-lens-psf-profile.md +1 -1
- package/docs/api/optics-polygon-diffraction.md +1 -1
- package/docs/api/optics-profile-contract.md +1 -1
- package/docs/api/optics-psf-foundation.md +1 -1
- package/docs/api/optics-radial-distortion.md +1 -1
- package/docs/api/optics-scene-to-sensor-irradiance.md +1 -1
- package/docs/api/optics-scene-to-sensor-quadrature.md +1 -1
- package/docs/api/optics-sensor-environment-query.md +1 -1
- package/docs/api/optics-sensor-psf-quadrature.md +1 -1
- package/docs/api/optics-stray-light.md +1 -1
- package/docs/api/optics-thin-lens.md +1 -1
- package/docs/api/output-capture-corrected-sdr.md +1 -1
- package/docs/api/output-capture-geometry.md +1 -1
- package/docs/api/output-capture-sdr.md +1 -1
- package/docs/api/output-crop.md +1 -1
- package/docs/api/output-geometric-transforms.md +1 -1
- package/docs/api/output-lens-corrections.md +1 -1
- package/docs/api/output-native-capture-sdr.md +150 -0
- package/docs/api/output-print-contrast-reference.md +82 -0
- package/docs/api/output-print-detail.md +1 -1
- package/docs/api/output-print-plan.md +1 -1
- package/docs/api/output-print-region-statistics.md +165 -0
- package/docs/api/output-sdr-rendering.md +1 -1
- package/docs/api/output-subject-framing-crop.md +1 -1
- package/docs/api/schema-camera.md +1 -1
- package/docs/api/schema-illumination-spectral.md +1 -1
- package/docs/api/schema-illumination-temporal.md +1 -1
- package/docs/api/schema-illumination.md +1 -1
- package/docs/api/schema-scene-radiance-temporal.md +1 -1
- package/docs/api/schema-scene-radiance.md +1 -1
- package/docs/api/schema-scene.md +1 -1
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +1 -1
- package/docs/api/sensor-architecture.md +1 -1
- package/docs/api/sensor-camera-saturation-capacity.md +1 -1
- package/docs/api/sensor-capture-color-sampling-binding.md +1 -1
- package/docs/api/sensor-capture-mode-timing.md +1 -1
- package/docs/api/sensor-capture-mode.md +1 -1
- package/docs/api/sensor-color-sampling.md +1 -1
- package/docs/api/sensor-constant-rate-temporal-integration.md +1 -1
- package/docs/api/sensor-dark-current.md +1 -1
- package/docs/api/sensor-environment-photo-signal.md +6 -3
- package/docs/api/sensor-eqe-electron-rate.md +1 -1
- package/docs/api/sensor-eqe-local-exposure.md +1 -1
- package/docs/api/sensor-eqe-temporal-exposure.md +1 -1
- package/docs/api/sensor-exposure-window.md +1 -1
- package/docs/api/sensor-iso-signal-chain.md +1 -1
- package/docs/api/sensor-local-exposure-binding.md +1 -1
- package/docs/api/sensor-optical-stack.md +1 -1
- package/docs/api/sensor-photon-energy.md +1 -1
- package/docs/api/sensor-physical-charge-capacity.md +1 -1
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +1 -1
- package/docs/api/sensor-raw-readout.md +1 -1
- package/docs/api/sensor-raw-reconstruction.md +1 -1
- package/docs/api/sensor-readout-exposure-linkage.md +1 -1
- package/docs/api/sensor-readout-timing.md +1 -1
- package/docs/api/sensor-response-application-compatibility.md +1 -1
- package/docs/api/sensor-response-operating-range.md +1 -1
- package/docs/api/sensor-responsivity-photocurrent.md +1 -1
- package/docs/api/sensor-sampling-aperture.md +1 -1
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +1 -1
- package/docs/api/sensor-sensor-geometry.md +1 -1
- package/docs/api/sensor-signal-noise.md +1 -1
- package/docs/api/sensor-spatial-sample-reduction.md +1 -1
- package/docs/api/sensor-spatial-sampling-quadrature.md +1 -1
- package/docs/api/sensor-spatio-spectral-reduction.md +1 -1
- package/docs/api/sensor-spectral-coverage.md +1 -1
- package/docs/api/sensor-spectral-quadrature.md +1 -1
- package/docs/api/sensor-spectral-response.md +1 -1
- package/docs/api/sensor-temporal-photo-signal.md +1 -1
- package/docs/api/simulation-poc-simulation.md +1 -1
- package/docs/api/stabilization-camera-shake.md +1 -1
- package/docs/api/stabilization-system.md +1 -1
- package/docs/licenses/castleCSF-MIT.txt +21 -0
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +4 -0
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +3 -0
- package/docs/validation/print-196-candidate-capabilities.json +28 -0
- package/docs/validation/print-196-candidate-evidence.json +356 -0
- package/docs/validation/print-196-engine-acceptance.json +81 -0
- package/docs/validation/print-detail-capabilities.json +4 -1
- package/docs/validation/print-detail-jpeg-evidence.json +116 -0
- package/package.json +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Engine #196 acceptance audit
|
|
2
|
+
|
|
3
|
+
This audit follows merged [PR #217](https://github.com/Photivra/photivra/pull/217), commit `c58d9eb9dcba807f020df45be1ed5ec4f6c081e4`. Owner approval of that contribution's scientific/source and DCO gate is recorded in its squash commit and PR. The old candidate ledgers retain their historical pending-review observations; they are not current approval records. The additional patterned-source reference below requires its own substantive human review and contribution-specific DCO certification.
|
|
4
|
+
|
|
5
|
+
## Engine contract and full product scope
|
|
6
|
+
|
|
7
|
+
[Engine #196](https://github.com/Photivra/photivra/issues/196) requires documented, independently supported bounded assessment, with other dimensions explicitly qualified or unassessed. It does not require a universal quality score, automatic natural-image visibility verdict, named-device calibration or printer ICC/substrate simulation. The engine APIs preserve those exclusions. Their scientific meaning remains conditional on a declared source, registration, model and stage; successful parsing never authenticates a supplied artifact.
|
|
8
|
+
|
|
9
|
+
The issue also requires the full new-UI print feature. Its app acquisition, proof workflow, accessibility and actual-device gates remain required under [app #307](https://github.com/Photivra/photivra-apps/issues/307) and its linked owners. They consume the published engine contract. They cannot be prerequisites for publishing that same prerequisite contract. Engine acceptance does not close those tickets, certify a private renderer, or make the complete new-UI release ready. The earlier candidate's combined `fullAssessmentAcceptance: blocked` remains true for that complete product scope; it must not be mistaken for proof that every engine requirement lacks evidence.
|
|
10
|
+
|
|
11
|
+
## Requirement-to-evidence audit
|
|
12
|
+
|
|
13
|
+
| Engine requirement | Authoritative evidence | Qualified scope / retained limit |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| Model, supported domain, independent protocol and reuse review before implementation | `PRINT_DETAIL_ASSESSMENT.md`, `PRINT_DETAIL_VALIDATION.md`, `PRINT_REGION_STATISTICS.md`, `PRINT_CONTRAST_REFERENCE.md`, retained MIT license/NOTICE/THIRD_PARTY, #217 owner review | Bounded coherent scalar and linear-statistic models; separate population contrast reference; no general photograph classifier |
|
|
16
|
+
| Reuse optics, sampling and processing; no second diffraction/defocus/motion stack | `print-detail-psf-backend.test.ts`, `print-detail-depth-backend.test.ts`, `print-depth-pupil-convergence.test.ts`, `print-detail-motion-backend.test.ts`; shared public functions | Finite local kernels, declared pupil grid and support, supported temporal nodes; no blur-diameter-to-PSF conversion or named-lens calibration |
|
|
17
|
+
| Exact source stage, region, field, subject/focus, print/viewing geometry and contrast assumptions | `print-detail.test.ts`, `print-region-statistics.test.ts`, model/input contracts | Explicit selected ROI, orientation/crop and relative-linear domain; absolute print luminance is not inferred; unqualified correction/warp blocked |
|
|
18
|
+
| Directional versus isotropic blur and equal-PPI/different-detail sources | `print-detail.test.ts`, `print-detail-psf-backend.test.ts`, new `print-detail-native-capture.test.ts` | Owned periodic sources and named public backend; no universal MTF or real-camera claim |
|
|
19
|
+
| Actual capture backend, target truth and independently predicted source response | New `print-detail-native-capture.test.ts` and `native-detail-reference.json`; existing `print-region-capture-backend.test.ts` | Complete 4×4 native provider→optics→EQE→photo/dark/noise→ADC execution, two axes/phases and four aperture node counts; declared angular source, point optics, no private renderer/device calibration |
|
|
20
|
+
| Selected subject, intentional background defocus, visible depth/occlusion | `print-detail-depth-backend.test.ts`, `print-region-visibility-backend.test.ts` | Known metric nearest-surface provider; finite PSF support restricted to one visible plane; point-optics changing visibility; depth-edge PSF and unqualified viewpoint/corrections unsupported |
|
|
21
|
+
| Directional subject/camera motion | `print-detail-motion-backend.test.ts`, `print-region-visibility-backend.test.ts` | Independently predicted finite/continuous exposure on declared trajectories; no single homography across depths or endpoint chord substituted for a PSF |
|
|
22
|
+
| Noise, clipping and processing halos tested separately | `print-region-statistics.test.ts`, `print-region-noise-backend.test.ts`, `print-region-readout-backend.test.ts`, new native-capture test | Same-realization paired differences versus independent-repeat temporal variance; known range overshoot/undershoot; explicit electronic clipping stages; no automatic halo attribution or physical sensor calibration |
|
|
23
|
+
| Post-encode assessment bound to exact representation | `print-detail-jpeg-integration.test.ts`, committed JPEG/decoder manifests and independent references | Actual archived JPEG bytes, independent decoded neutral samples and exact capture/ROI identity; pre-encode does not certify post-encode; no automatic compression-quality verdict |
|
|
24
|
+
| Physical enlargement distinct from resampling; same-scale proof binding | `print-proof-reference.test.ts`, separate pypdf inspection and committed PDF; native-capture enlargement check | Actual PDF operators, original DCT streams, retained crop, physical-unit reference and nominal ruler; actual printer and product proof workflow remain app gates |
|
|
25
|
+
| Contrast/perception only through an evidence-backed model | `print-contrast-reference.test.ts`, 80-digit independent reference, pinned castleCSF revision and exact MIT terms | Declared static D65 Gabor population-model estimate only; measured rectangular ROI is not a matched Gabor; natural-image visibility, individual observer, physical print stimulus and uncertainty remain unassessed |
|
|
26
|
+
| Aliasing, halos, compression and color independently inspectable; no overall score | Public result contracts and unsupported/unknown-state tests | These dimensions are unassessed unless an explicit bounded protocol supplies a numerical quantity; no combined quality uplift, pass/fail or interpolation claim |
|
|
27
|
+
| Identity/version compatibility and independent public usefulness | Source/ROI/hash tests; historical JPEG replay; root-only browser/package/docs/packed consumers | Explicit engine/model/protocol identity; no private scene, device dataset, runtime dependency or changed historical creator identity |
|
|
28
|
+
|
|
29
|
+
## Patterned-source native capture qualification
|
|
30
|
+
|
|
31
|
+
The additional reference extends the existing owned flat-band scene variant; it adds no chart family or target per print size. A declared angular neutral sinusoid has modulation 0.5 and one cycle across the native 4×4 raster. At the stipulated ideal image distance, the two angular periods are `36 × 0.0198` and `24 × 0.0198` in look-ray slope. The source definition consumes engine-generated outgoing rays. It does not calculate a replacement camera projection. All sites use the explicit existing 800×600 µm geometric aperture, 540–560 nm band, equal effective QE 0.4, f/4 transmission 0.85 and 8 ms exposure.
|
|
32
|
+
|
|
33
|
+
An independently authored 80-digit Decimal cosine series predicts every native photo expectation, fundamental modulation and continuous rectangular-aperture response for both axes, phases 0 and 0.37, and 1/2/4/8 midpoint aperture nodes. The midpoint-rule absolute modulation error bound is `0.5 (2 pi apertureWidth / imageExtent)^2 / (24 nodeCount^2)`, declared from the second-derivative bound before evaluating runtime output. Expected photoelectron units reuse the independently derived SI reference from `generate_capture_reference.py`. Neither generator imports the engine or reads observed samples. Tests pin both source artifact hashes and require every expected provider callback.
|
|
34
|
+
|
|
35
|
+
The named `simulateEnvironmentSensorRawFrame()` path executes the complete native raster, including source optics/EQE, actual seeded noise and ADC. The reference first qualifies expected photo transfer, then separately binds and assesses the actual noisy, quantized relative scalar representation. Same-realization pre/post-ADC differences must satisfy half-code rounding bounds. A photo expectation is never relabeled as measured noisy captured-system MTF. Complete scalar artifacts are hashed, and physical enlargement changes print geometry without changing captured measurements.
|
|
36
|
+
|
|
37
|
+
This is conditional modeled neutral signal, not measured cd/m², a photographic observer experiment, CFA color calibration, private renderer qualification or actual hardware evidence. Existing transport/radiometry verification flags remain false. The reference's point-optics domain is explicit. The older finite-pupil pilot's one-frequency convergence limits remain unchanged.
|
|
38
|
+
|
|
39
|
+
The [new evidence record](validation/print-196-engine-acceptance.json) pins these additional artifacts and records local test/package observations separately from scientific approval. The generator was replayed against its pinned SHA-256; normal CI uses the committed reference without requiring Python.
|
|
40
|
+
|
|
41
|
+
## Acceptance decision and remaining gates
|
|
42
|
+
|
|
43
|
+
The requirement audit is review material, not self-issued scientific certification. The existing #217 contribution was approved and merged. The new generator, artifact, tests and this ownership audit must receive substantive human scientific/source review and DCO certification, with green exact-head checks, before engine #196 is accepted. Acceptance must explicitly retain the supported domains above and the complete new-UI obligations; it must not be described as natural-image or device calibration.
|
|
44
|
+
|
|
45
|
+
After engine acceptance, the requested engine release still requires final-main checks, version/distribution availability checks, configured publishing protections and explicit tagging/publication approval. No tag or package is created by this work. Full new-UI release readiness remains blocked until its acquisition, source/target headroom, physical proof, accessibility and device gates have qualified evidence in the app owners. This audit neither defers nor removes them.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Static neutral Print contrast reference — model 0.1.0
|
|
2
|
+
|
|
3
|
+
`calculatePrintContrastReference()` evaluates a restricted static, foveal, neutral D65 Gabor reference from castleCSF. This is an **estimated population-model reference**, separate from measured regional detail and sampling sufficiency. It does not classify a photograph, promise invisibility, establish personal acuity or produce an overall Print verdict. Actual stimulus matching remains unassessed.
|
|
4
|
+
|
|
5
|
+
## Model and source review
|
|
6
|
+
|
|
7
|
+
The numerical source is [castleCSF revision f4b0b722af83001d7af979281e06ca642d36e4e8](https://github.com/gfxdisp/castleCSF/tree/f4b0b722af83001d7af979281e06ca642d36e4e8), including `CSF_castleCSF.m`, `CSF_stelaCSF_lum_peak.m`, `CSF_castleCSF_chrom.m` and `CSF_base.m`. These code files contain the model equations, numerical parameters, neutral D65 background and mechanism projections. The repository license is MIT, copyright 2023 Graphics and Displays group, University of Cambridge. Retain the [exact license](licenses/castleCSF-MIT.txt), copyright in source and `NOTICE`, and the inventory in `THIRD_PARTY.md`. The scalar TypeScript adapter and independent high-precision evaluator are newly authored; the numerical model material is third-party material, not asserted to be Photivra-owned calibration.
|
|
8
|
+
|
|
9
|
+
The [primary paper, Ashraf et al. (2024)](https://pmc.ncbi.nlm.nih.gov/articles/PMC10996938/) describes sensitivity as a function of stimulus conditions and reports population-model validation. Its fixed-size static achromatic Gabor reference is relevant to this restricted stimulus. We do not reproduce the paper, tables, figures or observational datasets. No CSV from the combined historical datasets is included; their reuse/collection history is not inferred from the code license. Source/license review of this new numerical material remains a substantive human release gate.
|
|
10
|
+
|
|
11
|
+
## Explicit conditions and quantities
|
|
12
|
+
|
|
13
|
+
Every input must explicitly identify the stimulus and published binocular/natural-pupil reference assumption. The implemented numerical envelope is mean luminance **1–1000 cd/m²**, carrier frequency **0.25–16 cycles/degree**, Gaussian envelope sigma **exactly 1.5 degrees**, temporal frequency **zero** and eccentricity **zero**. These are model-evaluation limits, not a calibration certificate covering every observer or combination. Positive values outside this envelope yield `unsupported`, not extrapolation. Michelson modulation is a supplied fraction in `[0,1]`; luminance is not inferred from capture exposure, a display percentage, paper whiteness or image RGB.
|
|
14
|
+
|
|
15
|
+
The luminance input is the uniform D65 background/carrier mean used by the upstream model. The supplied modulation is the neutral sinusoidal carrier fractional amplitude before its Gaussian envelope. It is not a finite image ROI average, arbitrary image extrema ratio, Fourier residual or noise RMS. A Gaussian window changes the spatial stimulus; rectangular-grating equivalence is not established by the scalar adapter. The primary paper discusses aperture-equivalence assumptions and their limitations. Its individual datasets use different envelopes at some frequencies, so the adapter’s numerical envelope must not be presented as a uniformly measured empirical calibration grid.
|
|
16
|
+
|
|
17
|
+
Equal fractional modulation of the upstream neutral D65 LMS background is selected. Retain the achromatic sustained/transient responses and both opponent-mechanism projections; the neutral background has small nonzero opponent projections. Static temporal response and the Gaussian effective area `pi sigma²` follow the pinned model. Evaluate luminance-dependent hyperbolic terms using log1p/expm1 to retain the small saturation term. This is scalar evaluation of the mathematical equations, rather than bit-for-bit emulation of MATLAB's cancellation in `1 - power(...)`.
|
|
18
|
+
|
|
19
|
+
Return sensitivity, its reciprocal threshold modulation, and supplied modulation divided by that threshold. They remain continuous model quantities. The API offers no `visible`, `invisible`, `pass`, personal-vision score or automatic print-quality recommendation. It neither combines independent image-quality dimensions nor maps a Fourier residual/noise RMS into a Gabor contrast. Fitted population variation and upstream fit errors do not supply an individual confidence interval. Uncertainty remains explicitly unquantified.
|
|
20
|
+
|
|
21
|
+
## Independent numerical protocol
|
|
22
|
+
|
|
23
|
+
The committed [reference generator](../test/fixtures/print-detail/generate_contrast_reference.py) evaluates the scalar equations with Python standard-library Decimal at 80 digits, using direct hyperbolic powers, an independently arranged area term and exact decimal parameters. It imports no engine output. The [reference artifact](../test/fixtures/print-detail/contrast-reference.json) covers 35 luminance/frequency points. SHA-256, source revision, protocol and conditions are checked by the public-root test. Compare sensitivity and threshold with relative arithmetic tolerance `1e-12`; this is numerical conformance, not an observer-accuracy claim. Tests also cover domain boundaries, immutable copied input, explicit zero contrast, malformed conditions and absence of a visibility verdict.
|
|
24
|
+
|
|
25
|
+
Neither the upstream MATLAB runtime nor new observer experiments have been executed by this protocol. Upstream empirical results provide a research basis, and the independent Decimal reference qualifies this scalar evaluation only. Actual photographic/printed-stimulus transfer, masking, age/ocular differences, absolute print luminance, color, glare, eccentricity, temporal presentation and viewing-device qualification remain separate. The coherent rectangular grating diagnostic is not a Gaussian-envelope stimulus; its modulation cannot be passed off as matched Gabor evidence. #196's full scoped acquisition/perceptual acceptance remains open until the capability ledger records the missing evidence and substantive human review.
|
|
26
|
+
|
|
27
|
+
## Complete public example
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import { calculatePrintContrastReference } from "@photivra/engine";
|
|
31
|
+
const reference = calculatePrintContrastReference({
|
|
32
|
+
referenceId: "example-population-reference", stimulus: "static-neutral-d65-gabor",
|
|
33
|
+
observer: "published-binocular-natural-pupil-reference",
|
|
34
|
+
meanLuminanceCdPerSquareMeter: 50, spatialFrequencyCyclesPerDegree: 4,
|
|
35
|
+
gaussianEnvelopeSigmaDegrees: 1.5, temporalFrequencyHz: 0,
|
|
36
|
+
eccentricityDegrees: 0, modulationMichelson: 0.01
|
|
37
|
+
}).value;
|
|
38
|
+
if (reference.status !== "model-estimate" || !reference.estimate) throw new Error("Unexpected reference domain");
|
|
39
|
+
if (reference.naturalImageVisibility !== "unassessed" || reference.overallPrintVerdict !== "not-offered") throw new Error("Unexpected quality claim");
|
|
40
|
+
console.log(reference.estimate, reference.observerApplicability);
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This evaluates a declared reference stimulus. It is not evidence that an actual photograph or print meets those stimulus/observer conditions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Regional Print detail diagnostic — model specification 0.1.0
|
|
2
2
|
|
|
3
|
-
This is the bounded mathematical first slice of #196,
|
|
3
|
+
This is the bounded mathematical first slice of #196, using the [Print geometry contract published in 1.1.0](PRINT_PLANNING.md). This diagnostic is not full #196 acceptance, a natural-image sharpness evaluator, a visibility threshold or an overall print pass. The [validation protocol](PRINT_DETAIL_VALIDATION.md) and [capability ledger](validation/print-196-candidate-capabilities.json) identify what is tested and what remains blocked. The additive [regional statistics protocols](PRINT_REGION_STATISTICS.md) separately measure processing differences and repeat-capture sample variance; they do not change this diagnostic's qualification or exclusions.
|
|
4
4
|
|
|
5
5
|
## Supported model and domain
|
|
6
6
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Regional detail paired-export JPEG evidence 0.1.0
|
|
2
|
+
|
|
3
|
+
This addendum to [the regional diagnostic protocol](PRINT_DETAIL_VALIDATION.md) qualifies only a bounded execution test: owned post-ADC RAW codes → public paired-export reconstruction/color/SDR/JPEG → independently recorded JPEG decode → neutral relative-linear luminance → regional fundamental. It extends [the capture-SDR execution evidence](PRINT_DETAIL_SDR_EVIDENCE.md) without changing the metric, public API, dependencies or historical records. Human scientific/source review remains pending; full #196 acceptance remains blocked.
|
|
4
|
+
|
|
5
|
+
## Owned source and target truth
|
|
6
|
+
|
|
7
|
+
`test/helpers/print-detail-jpeg-fixture.ts` supplies a native 20 × 16 periodic Bayer frame. Every complete 2 × 2 tile has one neutral post-ADC code from repeating `[640,448,256,448]`. Black is 64 and white is 1023, so linear tile levels are `[576,384,192,384]/959`. Source mean is `384/959`; the two-sample-held eight-pixel period has fundamental modulation `0.5 cos(pi/8)`. This follows the discrete hold's half-sample phase and cosine attenuation. The target contains known higher harmonics and is not a pure continuous optical sinusoid. Only its declared coherent Fourier fundamental is assessed; its residual cannot be classified as noise or a compression artifact.
|
|
8
|
+
|
|
9
|
+
This is owned synthetic draft post-ADC data, not a renderer-acquired optical target or noise realization. The existing declared ideal test color profile and tile-average reconstruction are reused. Neither becomes physical calibration. The source's placeholder float plane does not supply JPEG pixels: the public export develops the committed RAW codes. The independent Python check derives expected neutral pre-encode codes from the source codes and explicit orientation permutation, with no engine imports. It separately verifies the source's fundamental identity.
|
|
10
|
+
|
|
11
|
+
## Exact stage and independent reference
|
|
12
|
+
|
|
13
|
+
Eight committed JPEGs cover all four orientations at constant quantization steps 1 and 32. These are scalar encoder parameters, not manufacturer's quality scores. Each orientation has a distinct capture ID; its quantization variants retain that same capture identity, with unique document/instance IDs for each exported file. The public exporter executes orientation itself, writes already oriented JPEG pixels, and declares EXIF orientation 1. Native 20 × 16 becomes 20 × 16 or 16 × 20. Partial eight-pixel coding blocks exercise the encoder's edge padding without changing the declared raster. The selected off-center half-open ROI begins at `(2,2)` and is 16 × 8 in landscape or 8 × 16 in portrait; it spans two target periods and JPEG block boundaries.
|
|
14
|
+
|
|
15
|
+
`export-manifest.json` records actual source codes, pre-encode RGB, JPEG SHA-256, raster, target and ROI identities. `independent-reference.json` binds to its exact bytes and records installed Pillow/libjpeg/Python versions, independently decoded RGB bytes/hash, ROI float64 little-endian bytes/hash and separately calculated pre-encode/decoded coefficients. The verifier requires neutral equal decoded RGB channels; each inverse-transferred channel is then relative linear luminance. It does not define a colored RGB luminance extractor, ICC transform or generic decoder policy.
|
|
16
|
+
|
|
17
|
+
The independent reference calculates mean, cosine/sine coefficients, amplitude, modulation and residual using Python `math.fsum`, independently of the engine accumulator. Every Node test regenerates actual paired-export JPEG bytes and requires exact agreement with the committed JPEG, manifest hash and independent decoded-byte record. It converts the recorded neutral pixels to linear values, compares each ROI sample within absolute 1e-12, and compares all regional measurements within 1e-10. These are numerical tolerances for 128 positive bounded samples, not perceptual thresholds. Integer bytes, raster identities and hashes are exact checks. Node CI consumes committed independent decode evidence; it does **not** execute Pillow anew.
|
|
18
|
+
|
|
19
|
+
The actual runtime linear luminance plane receives a separate float64 little-endian SHA-256 carried unchanged through the diagnostic input/result. It is linked by the test to the exact JPEG and decoder record. The public diagnostic still returns `caller-declared-unverified`, unknown scientific assurance and `not-offered` overall verdict; it performs no IO or automatic provenance upgrade.
|
|
20
|
+
|
|
21
|
+
## Reproduction and invalidation
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
node scripts/generate-print-detail-jpeg.mjs /tmp/photivra-print-jpeg-reproduction
|
|
25
|
+
python scripts/verify-print-detail-jpeg.py /tmp/photivra-print-jpeg-reproduction --record
|
|
26
|
+
python scripts/verify-print-detail-jpeg.py test/fixtures/print-detail/jpeg
|
|
27
|
+
npx vitest run test/print-detail-jpeg-integration.test.ts
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Generation uses the repository's existing development compiler. Python QA uses an existing installed Pillow; no engine/runtime/development dependency or CI install is added. A missing Pillow fails the independent check rather than silently passing. `--record` writes a new candidate reference for review; verification without it requires the committed decoder versions and results to agree. Preserve old records when the source, reconstruction, color model, renderer, encoder, registration, target, ROI, metric or decoder changes. Regeneration is evidence collection, not human approval. [The separate evidence ledger](validation/print-detail-jpeg-evidence.json) pins source hashes and the finite execution envelope.
|
|
31
|
+
|
|
32
|
+
Fine quantization preserves this target's measured regional modulation within numerical tolerance. Coarse quantization changes it and may increase the fundamental or residual. An increased transfer coefficient does not imply restored detail, improved quality, invisibility or a compression pass. Source RAW, pre-encode RGB and native raster remain unchanged between quantization variants; only the exact encoded representation and its diagnostic differ.
|
|
33
|
+
|
|
34
|
+
## Remaining qualification
|
|
35
|
+
|
|
36
|
+
This evidence covers one owned neutral stepped grating, one source/processing policy, one selected ROI per orientation and one recorded independent decoder configuration. It does not qualify optical acquisition/MTF, spectral color calibration, other targets/frequencies/depths, noise/aliasing/halos/compression classifiers, generic image codecs or decoder variants, resampling/warp, native-resolution production, UI/GPU/device/display execution, observer perception or printer/substrate response. No JPEG quality verdict is introduced. Full scoped new-UI acceptance remains blocked until the missing evidence and substantive human review are complete.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Regional Print detail independent validation protocol 0.1.0
|
|
2
2
|
|
|
3
|
-
This protocol tests the mathematical domain in [the model specification](PRINT_DETAIL_ASSESSMENT.md). Passing does not qualify arbitrary photographed targets, renderers, lenses, printers or perceptual decisions. [The capability ledger](validation/print-
|
|
3
|
+
This protocol tests the mathematical domain in [the model specification](PRINT_DETAIL_ASSESSMENT.md). Passing does not qualify arbitrary photographed targets, renderers, lenses, printers or perceptual decisions. [The capability ledger](validation/print-196-candidate-capabilities.json) must retain these limits.
|
|
4
4
|
|
|
5
5
|
## Public analytic evidence
|
|
6
6
|
|
package/docs/PRINT_PLANNING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Native-only Print planning
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Published in package/root API **1.1.0**, Print model **0.1.0**; retained in the **1.2.0** candidate. This standalone browser-safe API answers native sampling sufficiency and the minimum compatible printer-file raster. It generates no pixels or files. See [API conventions](API_STYLE.md), [staged geometry](PHYSICS_FOUNDATION.md), [processed output](PROCESSED_OUTPUT.md) and the [historical 1.1.0 release review](RELEASE_1_1_0.md).
|
|
4
4
|
|
|
5
5
|
## Authority and units
|
|
6
6
|
|
|
@@ -71,3 +71,5 @@ For untrusted requests use `parsePrintPlanInput()`. Calculation functions also p
|
|
|
71
71
|
- [University of Iowa acuity testing](https://webeye.ophth.uiowa.edu/eyeforum/video/Refraction/Visual-Acuity-Testing/index.htm): optotype critical stroke detail is distinct from a whole optotype. This motivates explicitly declared conventions; it supplies no universal print sampling/quality guarantee.
|
|
72
72
|
|
|
73
73
|
Implementation, prose and tests are original. References informed terminology and equations; no source tables, calibration, datasets or protected expression were incorporated. Independent tests cover the 160-PPI identity, high-precision angular reference, all orientations/off-center crop, ignored preview enlargement, unit and one-pixel boundaries, exact-ratio minimum search with fixed seed, lab conflicts, manual overrides, semantic bounds and invalid/extreme finite JSON. Human scientific/source/DCO review remains required before release. Advanced captured-detail/quality assessment remains separate (#196).
|
|
74
|
+
|
|
75
|
+
The 1.2.0 acceptance audit additionally exercises stamp, book, home, gallery, billboard and half-mile dimensions/distances through the same source and explicit criterion, plus a heavy retained crop and recovery after invalid edits. These are geometric examples, not claims about eyesight, text readability, substrate or file-export readiness. The core #195 contract was delivered in PR #210 and published in 1.1.0; historical references to an unpublished geometry candidate are superseded. Actual UI/task/device and JPEG-delivery acceptance belongs to the consuming product and its exporter evidence, rather than this pixel-free planning API.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Regional linear Print statistics — model and protocol 0.1.0
|
|
2
|
+
|
|
3
|
+
These additive browser-safe protocols separate a registered processing difference from repeat-capture temporal sample variance. They extend #196's evidence work; they do not complete its acquisition, perception, subject/depth, motion or full release acceptance. The coherent detail diagnostic remains model 0.1.0 with its existing behavior.
|
|
4
|
+
|
|
5
|
+
## Source and applicability
|
|
6
|
+
|
|
7
|
+
Each frame uses the existing Print source, explicit scalar relative-linear luminance domain, actual represented raster, half-open oriented retained ROI, capture/representation/content/processing identity, evidence and noise-realization identity. Source/ROI parsing shares the coherent diagnostic boundary. Arrays must be dense and finite. The total request contains at most 65,536 scalar samples, including every repeat or both members of a pair. A noise ensemble has 2 to 256 frames. This is a work bound, not a device performance claim.
|
|
8
|
+
|
|
9
|
+
The represented raster must preserve retained native aspect and cannot exceed either native axis. Native-stage rasters must match the retained native crop. Unqualified warps and non-linear/unknown domains are blocked. Registration compares the full parsed geometry, ROI and Print conditions conservatively. It does not resample or invent a correspondence. Different physical units expressing the same conditions must be normalized by the caller for a paired comparison. Insufficient native sampling or conflicting lab conditions remain visible in the returned Print plan; a sample statistic cannot repair delivery.
|
|
10
|
+
|
|
11
|
+
Hashes, numeric provenance, acquisition stationarity and independent repeats remain caller declarations. Successful parsing/calculation never verifies file contents, decoding, a license or physical calibration. Results freeze copied inputs, retain engine/model identity and explicitly return unassessed acquisition, unquantified uncertainty and no overall verdict. Changing any source, ROI, processing, acquisition or viewing condition requires a new assessment identity downstream.
|
|
12
|
+
|
|
13
|
+
## Paired processing difference
|
|
14
|
+
|
|
15
|
+
`calculatePrintRegionDifference()` compares identical sample sites belonging to one immutable capture. Select either a declared deterministic reference (both noise IDs null) or the same explicitly named non-null noise realization. Distinct or unknown noise draws cannot be compared as processing-only change. No single noisy frame supplies a noise variance. A decoded-file comparison requires the pre-encode `post-resampling-linear` stage and the exact `post-encoding-decoded-linear` stage. The same representation ID with contradictory hash, stage or processing identity is blocked.
|
|
16
|
+
|
|
17
|
+
For differences `d_i = after_i - before_i`, return signed mean, `sqrt(sum(d_i²)/N)` and maximum absolute difference in relative-linear luminance. This measures the net change between supplied representations; it does not automatically attribute it to JPEG compression, classify artifacts or establish visibility. Exact pre/post-encode artifact binding and independent decoder qualification remain external evidence obligations. Comparisons at different rasters require an independently registered reference on identical sample sites; this protocol does no resizing.
|
|
18
|
+
|
|
19
|
+
An optional declared increasing reference signal range supplies below/above-range counts and maximum excursions for both representations separately. It can quantify known step-response undershoot/overshoot in an independently designed experiment. It is not an automatic halo detector. Existing source excursions remain visible. Range endpoints are neither sensor full well nor ADC/render clipping thresholds; boundary contact or excursions cannot establish a clipping mechanism. Color channels, gamut error, printer texture and natural-image quality remain unassessed.
|
|
20
|
+
|
|
21
|
+
## Temporal repeat statistics
|
|
22
|
+
|
|
23
|
+
`calculatePrintRegionNoise()` consumes a declared stationary scene and independent capture repeats at identical registered sites, geometry and processing stage. Each repeat has its own capture, representation and non-null noise-realization identity. Reused identities, stage/processing differences and missing noise IDs block the calculation. Equal bytes in separate repeats are allowed: zero noise and quantized repeated values are valid observations. IDs cannot themselves prove independence or stationarity.
|
|
24
|
+
|
|
25
|
+
At each sample site compute the temporal mean and sample variance `sum((v_j - mean)²)/(n-1)`. Return those arrays, the mean of per-site temporal variances and its RMS, and the average site mean. The spatial variance of a textured image is deliberately not called temporal noise. Fixed-pattern variation, drift, correlations and nonstationarity need separate models. This protocol reports sample statistics, not an ensemble expectation, sensor SNR, a confidence interval or an uncertainty bound. It makes no Gaussian, Poisson or independent-pixel assumption for the statistic itself.
|
|
26
|
+
|
|
27
|
+
Normalize each site's values by the maximum absolute magnitude. Calculate the mean of offsets from the first repeat and center those offsets before restoring units. A rounded large-DC mean must not add false variance. Compensated accumulation and hypot norms reduce avoidable overflow/cancellation. Reject nonzero inputs/differences lost by normalization, nonfinite restored statistics and nonzero variance/RMS underflow. Supported numeric results are finite; unsupported numeric ranges return no measurement rather than zero or a fabricated uncertainty. No epsilon changes a measurement or sampling verdict.
|
|
28
|
+
|
|
29
|
+
## Independent qualification protocol and rights
|
|
30
|
+
|
|
31
|
+
1. Use an independently authored Python standard-library oracle with exact rational arithmetic for finite paired signals and repeat statistics. Commit its inputs, expected values and SHA-256. The reference must not import the engine or compute expected values from runtime outputs.
|
|
32
|
+
2. Cover positive/signed/zero levels, correlated spatial texture with zero temporal noise, asymmetric/directional step overshoot, tiny values, large DC with representably small fluctuations, same/different realization policies, malformed inputs, missing/mismatched stages and the total work bound. Numeric tolerances qualify arithmetic on that bounded domain only.
|
|
33
|
+
3. Execute the existing production charge/readout and image-formation functions for additional backend evidence. Preserve raw/linear/SDR/JPEG stage identity. Seed schedules and sample counts must be predeclared. Compare realizations against an independent distribution/processing reference; a synthetic target name alone does not qualify an active backend.
|
|
34
|
+
4. Measure repeat-count and quadrature convergence independently before any physical or statistical claim. Record reference/backend/analysis versions and hashes, ROI, units, domain, source dimensions, conditions and pass/fail/unassessed state in the capability ledger. Publish observed conformance separately from human scientific/source review.
|
|
35
|
+
|
|
36
|
+
The [candidate review](PRINT_195_196_REVIEW.md#linearhigh-bit-electronic-readout-qualification) records actual public native RAW execution with an independently predicted 12-bit electronic reference. It separates storage/pre-ADC/digital clipping and signed read noise, and bounds decoded quantization effects without treating quantization as independent uniform noise. Its conditional neutral scalar encoding and declared electronic inputs do not establish physical photometry or sensor calibration.
|
|
37
|
+
|
|
38
|
+
All new equations are elementary paired differences and sample statistics, authored independently. New procedural signals and reference code are Photivra draft material under Apache-2.0, subject to human scientific/source and DCO review. No external numeric curve, camera profile, dataset, runtime dependency or private scene is incorporated. The researched [castleCSF primary paper](https://pmc.ncbi.nlm.nih.gov/articles/PMC10996938/) and [upstream repository](https://github.com/gfxdisp/castleCSF) describe a possible later perceptual model; neither its code, coefficients nor observations are included by these protocols. A perceptual application needs its own license/source audit, stimulus/observer/luminance/area/eccentricity matching and independent validation. These statistics cannot supply that qualification.
|
package/docs/PROCESSED_OUTPUT.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Processed camera output
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Root API 0.115.0 completes the bounded SDR post-capture handoff for #112.
|
|
6
6
|
Production plan 0.6.0 adds explicit committed RAW processing. At introduction, package 0.6.0,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Production Image-Formation Plan
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Photivra's production composition layer is separate from the legacy
|
|
6
6
|
`simulatePocCamera()` proof-of-concept API.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Executed environment production capture
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Introduced at root API 0.116.0 and production plan 0.7.0, this adds a bounded source-to-RAW route
|
|
6
6
|
inside the existing authoritative image-formation graph. Consumer manifest
|
package/docs/PROVENANCE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Scientific and Source Provenance
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Every scientific or calculation module in this repository must have a traceable, legally clean origin.
|
|
6
6
|
|
package/docs/PSF_FOUNDATION.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# PSF and Pupil Foundation
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Photivra has two complementary PSF layers.
|
|
6
6
|
|
|
@@ -98,6 +98,8 @@ It is a focus/PSF quantity. It does not modify geometric distortion, lateral CA,
|
|
|
98
98
|
|
|
99
99
|
`calculateLensComplexPupilPsf()` performs deterministic scalar Fraunhofer propagation of that complex pupil.
|
|
100
100
|
|
|
101
|
+
The optional `propagationDistanceMm` explicitly sets the physical image sample pitch `wavelengthMm * propagationDistanceMm / (pupilSampleCount * pupilPitchMm)` per axis. The result returns the resolved distance and whether it was explicit. Omission preserves the existing nominal focal-plane reference using `focalLengthMm`; finite-focus profile metadata alone does not replace that scale. For an owned ideal thin-lens principal-plane fixture, resolve the finite image distance with `calculateThinLensImageDistance()` and pass it explicitly. A real exit-pupil geometry requires its own qualified distance and applicability evidence. Model 1.1.0 adds this input/result binding without changing the legacy kernel values. Pupil schema remains 0.1.0.
|
|
102
|
+
|
|
101
103
|
This path evaluates diffraction and aberration in one pupil calculation. Do not stack another independent Airy or diffraction blur over its output.
|
|
102
104
|
|
|
103
105
|
The output intensity PSF is normalized to unit energy.
|
|
@@ -148,6 +150,14 @@ The sampled-profile contract can be consumed by both preview and reference paths
|
|
|
148
150
|
|
|
149
151
|
The complex-pupil scalar Fraunhofer evaluator is a deterministic reference calculation. A preview implementation may use a validated approximation, but it must preserve the same profile semantics, field orientation, throughput ownership and limitations.
|
|
150
152
|
|
|
153
|
+
## Independent pupil sampling pilot
|
|
154
|
+
|
|
155
|
+
The candidate Print qualification includes `test/print-depth-pupil-convergence.test.ts`. A separately authored factored finite DFT and continuous shifted-complex-pupil overlap integral compare the actual public backend at 25 cycles/mm, 500 nm, focus 5 m, subject distances 2/5/10 m and f/8,16,32. The focused continuous integral also agrees with the analytic ideal circular-pupil transfer. Independent Simpson evaluations at 4,096 and 16,384 intervals differ by less than `1e-11` for this domain.
|
|
156
|
+
|
|
157
|
+
An unpadded pupil grid can sample intensity too coarsely even when amplitude propagation is numerically correct. Increasing pupil resolution without expanding the zero-padded grid does not necessarily converge to continuous intensity transfer. The historical 9×9 finite reference has absolute transfer errors exceeding 0.14 in the f/32 cases. Those finite reference outputs remain unchanged and are not physical convergence evidence.
|
|
158
|
+
|
|
159
|
+
The pilot separately varies pupil resolution and padding: padded grids 9/17/33/61 with pupil-radius samples 2/4/8/15. Errors need not decrease monotonically at each finite circular-boundary raster. The final 61×61 grid has absolute transfer error below 0.01 at the tested frequency for all nine combinations. This is a candidate computational criterion informed by the pilot, not a predeclared physical calibration tolerance, quality threshold, all-frequency certificate, support-truncation guarantee for other stimuli, or real-lens validation. The declared finite pupil contract and its bounds remain unchanged. New frequencies, source support, fields, profiles or imaging domains require their own independent evidence.
|
|
160
|
+
|
|
151
161
|
## No scalar lens quality
|
|
152
162
|
|
|
153
163
|
Photivra does not produce a universal lens sharpness or bokeh-quality score.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Reference RAW frame compatibility
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
A valid RAW attachment does not establish readiness for reconstruction or paired
|
|
6
6
|
export. The limits below apply to the current browser-safe reference adapters,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Same-RAW reconstruction handoff (#16C)
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
See [Reference RAW frame compatibility](RAW_FRAME_ENVELOPE.md) for stage-specific
|
|
6
6
|
limits, full-native counting and parser preflight behavior.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 1.2.0 candidate review and migration
|
|
2
|
+
|
|
3
|
+
The additive package/root candidate is `@photivra/engine@1.2.0`. npm registry verification on 2026-10-03 found published 1.1.0 as the baseline; 1.2.0 was absent. This change prepares an unused minor release, without moving an existing tag or overwriting a distribution. Review the [native SDR contract](NATIVE_CAPTURE_SDR.md) and [validation evidence](NATIVE_CAPTURE_SDR_VALIDATION.md).
|
|
4
|
+
|
|
5
|
+
## Compatibility
|
|
6
|
+
|
|
7
|
+
Existing public APIs, small inline reference guards and scientific equations remain unchanged. The new metadata-only tiled executor supports explicitly resolved external linear-sRGB/D65 masters up to 24 MP, with bounded tile storage and single-transfer 8/16-bit output. It is not general scalable XYZ/WB/RAW/correction/resampling/JPEG execution. It does not activate production-plan stages, qualify producers/devices or complete Print quality acceptance. Existing post-1.1.0 bounded regional Print diagnostic work on main retains its stated limits and separate #196 qualification gates.
|
|
8
|
+
|
|
9
|
+
Package version, lock root, citation and `ENGINE_API_VERSION` are aligned at 1.2.0. Newly created capture/plan records carry this creator identity and their serialized identities/fingerprints/hashes may change. Archived captures retain the original creator identity, and historical fixtures/hashes/measurement records remain unchanged. Native SDR schema 0.1.0, capture/model/POC/production-plan versions remain independent. JPEG golden regression replays the manifest-recorded creator version through the existing archive parser; it also verifies current exports record the actual current creator and preserve integer pixels. Historical JPEG bytes/hashes and independent decoder records are not regenerated. Old consumers continue using their existing APIs; new consumers must import the reviewed 1.2.0 root surface rather than deep imports.
|
|
10
|
+
|
|
11
|
+
## Review and checks
|
|
12
|
+
|
|
13
|
+
Substantive human scientific/source review must cover supported color/WB states, source authentication/provider restrictions, geometry identity, typed-buffer ownership, cancellation/draining, measured resource limits, unchanged reference arithmetic and compatibility. Review contribution-specific DCO certification. An AI draft does not certify reusable source rights, device performance or calibration.
|
|
14
|
+
|
|
15
|
+
PR #216 received human scientific/source and contribution-specific DCO approval and was squash merged as `5dfb9a24c683dad5529cbd579ffecf2baeec2c27`. Its reviewed tree and supported Node CI were verified. The [technical review record](NATIVE_CAPTURE_SDR_REVIEW.md) preserves the evidence history. The follow-up strengthened float32/float64 policy parity, orientation pixels, pending WB/shared-buffer rejection, host-yield cancellation and maximum 24 MP/16-bit measurements. No tag or package was published.
|
|
16
|
+
|
|
17
|
+
The subsequent combined #195/#196 work received separate owner scientific/source and DCO approval at head `43e4e9e4baac90f7b16c6e068b7964c0546a8134` and was squash merged as `c58d9eb9dcba807f020df45be1ed5ec4f6c081e4` in [PR #217](https://github.com/Photivra/photivra/pull/217). The approved tree is preserved, all 2,065 tests pass and post-merge CI is green on all four supported Node versions. #195 is complete. The old [candidate review record](PRINT_195_196_REVIEW.md) preserves its pre-approval evidence. The follow-up [engine #196 acceptance audit](PRINT_196_ENGINE_ACCEPTANCE.md) adds patterned-source native-capture qualification and separates engine acceptance from the still-required app acquisition/proof/accessibility/device gates. That additional scientific/source material needs review and DCO certification before #196 engine acceptance; the requested engine release remains held for that acceptance and explicit publication approval. Full new-UI qualification remains outstanding in its app owners.
|
|
18
|
+
|
|
19
|
+
Run from the exact candidate tree, then require green supported Node 22.13/22/24/26 CI:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
npm ci --ignore-scripts
|
|
23
|
+
npm run check
|
|
24
|
+
npm run coverage
|
|
25
|
+
npm run build
|
|
26
|
+
node scripts/generate-api-reference.mjs --check
|
|
27
|
+
npm run docs:check
|
|
28
|
+
npm run release:consumer-check
|
|
29
|
+
npm run pack:check
|
|
30
|
+
npm run bench:image-formation:built
|
|
31
|
+
node --expose-gc scripts/benchmark-native-capture-sdr.mjs
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
No gates or thresholds are weakened. Benchmark results are host-specific observations; device/provider/master/encoder memory must be measured separately before app activation.
|
|
35
|
+
|
|
36
|
+
## Owner publication
|
|
37
|
+
|
|
38
|
+
After human review and merge, verify final-main CI and the approved candidate tree. Confirm protected main/tag rules and npm trusted publishing are configured. Replace `FINAL_MAIN_SHA` below with the verified final merged commit. Recheck that 1.2.0 remains unused. This PR creates no tag and publishes no package.
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
git fetch origin main --tags
|
|
42
|
+
git switch main
|
|
43
|
+
git pull --ff-only origin main
|
|
44
|
+
test "$(git rev-parse HEAD)" = "FINAL_MAIN_SHA"
|
|
45
|
+
test "$(git rev-parse origin/main)" = "FINAL_MAIN_SHA"
|
|
46
|
+
test "$(node -p "require('./package.json').version")" = "1.2.0"
|
|
47
|
+
git tag -a v1.2.0 FINAL_MAIN_SHA -m "Photivra engine 1.2.0"
|
|
48
|
+
git push origin refs/tags/v1.2.0
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The existing protected workflow verifies tag/main/version and release gates, produces the verified tarball, checks its SHA-256 and uses OIDC to publish only an absent version. Observe completion, verify npm 1.2.0 metadata/tarball integrity, then create the matching GitHub release with the approved changes and evidence. Preserve publication failures for investigation; do not bypass gates, move tags or mutate a published version. #215's publication acceptance remains pending until the reviewed distribution exists.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Photivra engine 1.3.0 release
|
|
2
|
+
|
|
3
|
+
This minor release adds evidence-bound radial illumination throughput to bounded environment photo/RAW capture, merged in PR #219. Attenuation is applied exactly once before normalized PSF redistribution; every inverse-PSF tap is validated before provider callbacks. Existing unity-throughput arithmetic and resource limits are preserved. No new dependency, calibration claim, or transport qualification is introduced.
|
|
4
|
+
|
|
5
|
+
## Compatibility and migration
|
|
6
|
+
|
|
7
|
+
Existing unity-throughput requests remain supported. Requests using the new non-unity field profile must explicitly request the illumination-vignetting fidelity effect in production composition. Invalid or undeclared attenuation fails before provider callbacks. The photo integration model advances independently to 0.2.0.
|
|
8
|
+
|
|
9
|
+
Package, lock root, citation and ENGINE_API_VERSION are aligned at 1.3.0. New capture/plan creator identities and hashes may change; archived records retain their original creator identity. Historical fixture bytes and independent model/schema/POC/plan versions are preserved.
|
|
10
|
+
|
|
11
|
+
## Validation and publication
|
|
12
|
+
|
|
13
|
+
The owner requested immediate release on October 4, 2026. PR #219 already received owner scientific/source review and passed supported Node CI. This release preparation changes metadata and documentation only. Require static policy, tests/coverage, build, generated references, documentation, isolated packed consumer, package-surface and supported Node CI checks on the final release tree.
|
|
14
|
+
|
|
15
|
+
After merge and successful main CI, create the unused annotated v1.3.0 tag at the verified main commit. The protected publish workflow rechecks tag/main/version and all distribution gates, verifies the tarball checksum and publishes through npm trusted publishing. Observe successful publication and then create the matching GitHub release. Never move tags or overwrite published versions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Scene Radiance and Illumination
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Photivra separates **illumination-source metadata** from **outgoing scene spectral radiance**.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Declared scene radiance to sensor irradiance nodes
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
`calculateSceneToSensorIrradianceQuadrature()` connects the existing #85 scene
|
|
6
6
|
request/result boundary and #110 paraxial optical bridge to the Cartesian nodes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Declared temporal scene radiance to sensor EQE
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
`calculateSceneSensorEqeTemporalExposure()` composes the existing scene-to-sensor
|
|
6
6
|
optical quadrature and temporal EQE calculation. It evaluates optics, response
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Scientific Assurance and Uncertainty Composition
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Photivra keeps **scientific status**, **source evidence**, **uncertainty**, **limitations**, and **reproducibility identity** as related but distinct concepts.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Scientific conformance: final V1 disposition (#131)
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
The cross-stage conformance layer complements, rather than replaces, narrow unit tests. `test/cross-stage-conformance.test.ts` consumes #130's canonical owned fixture and merged public APIs only. It checks a coherent ideal-focus/projection→FOV/object-size→pixel-motion/defocus path, then controlled one-stop shutter and aperture variants across exposure, motion and diffraction.
|
|
6
6
|
|
package/docs/SDR_RENDERING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Standalone SDR rendering primitives: #112A
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Current integration: [processed camera output](PROCESSED_OUTPUT.md) documents
|
|
6
6
|
the shared preview/export path and explicit plan 0.6.0 post-RAW activation.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Sensor support to environment radiance query
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
`calculateSensorEnvironmentRadianceQuery()` derives a renderer-neutral environment
|
|
6
6
|
radiance request from an explicitly supplied physical sensor support point. It
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Irradiance to stationary EQE local exposure
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
`calculateSensorEqeLocalExposure()` is a bounded sensor-layer composition. It
|
|
6
6
|
accepts explicit physical spectral irradiance samples in **W/m²/nm**, not RGB,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Nonstationary EQE exposure quadrature
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
`calculateSensorEqeTemporalExposure()` evaluates physical spectral irradiance at
|
|
6
6
|
explicit local shutter midpoints, validates sensor response at every instant,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Local sampled-PSF sensor quadrature
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
`calculateSensorPsfIrradianceQuadrature()` applies the existing #113 sampled PSF
|
|
6
6
|
resolver to incident spectral irradiance at each pre-AA sensor quadrature point.
|
package/docs/SENSOR_RAW_FRAME.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Native sensor RAW frame attachment
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
See [Reference RAW frame compatibility](RAW_FRAME_ENVELOPE.md) for stage-specific
|
|
6
6
|
limits, full-native counting and parser preflight behavior.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Capture-owned native sensor RAW producer
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
See [Reference RAW frame compatibility](RAW_FRAME_ENVELOPE.md) for stage-specific
|
|
6
6
|
limits, full-native counting and parser preflight behavior.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Signal cross-domain conformance (#131B)
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
`test/signal-conformance.test.ts` independently covers merged public APIs without consuming unmerged capture, output, optics or tier work. It complements the geometric conformance draft rather than depending on it. The canonical #130 fixture supplies wavelength and reference aperture/shutter/ISO settings; its source irradiance is **not** silently treated as detector energy.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Authoritative simulated capture: #15A/#15B
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
The container commits a format-neutral float master manifest before tone mapping/LDR conversion. It does not itself generate or convert pixels. The separate [#15B color API](CAPTURE_COLOR.md) converts supported planes and [#15C encoding API](LINEAR_CAPTURE_ENCODING.md) quantizes them without mutating the master. TIFF/DNG serialization and production-stage activation remain separate. #15, #112 and #16 are merged. Their explicit adapters own rendering and paired export; the container alone performs neither.
|
|
6
6
|
|
package/docs/STABILIZATION.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Camera Shake and Stabilization
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Photivra separates deterministic projection geometry from a deliberately simplified educational stabilization model.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Temporal EQE photo signal to native RAW
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Root API **0.110.0** adds `createSensorEqeTemporalPhotoSignal()` and
|
|
6
6
|
`parseSensorEqeTemporalPhotoSignal()`. RAW producer result schema is **0.3.0**.
|
package/docs/TIER_ACCEPTANCE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Generic tier acceptance suite
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
Fixture/report version **1.0.0** records the reviewed/merged #119 acceptance disposition
|
|
6
6
|
for the exact Consumer, Prosumer and Professional preset assets **1.0.0**. This is
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Generic tier preset acceptance disposition
|
|
2
2
|
|
|
3
|
-
Release context: **package 1.
|
|
3
|
+
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
4
|
|
|
5
5
|
This is the reviewed/merged #116 asset/catalog disposition against engine API
|
|
6
6
|
0.116.0 and production plan 0.7.0. The reviewed/merged release gate still applies.
|