{"schemaVersion":"mappls.capability-qualification.v1","id":"capture-feedback--cordova--qualification","matrixCellId":"capture-feedback--cordova","product":{"slug":"capture-feedback","name":"Capture & Feedback","summary":"On-demand location capture, camera evidence, map feedback, and update workflows.","category":"Data operations","accent":"#1c9c62"},"platform":{"slug":"cordova","name":"Cordova","headline":"Maintain hybrid location experiences with explicit native ownership and a migration path."},"status":"not-listed","stateModel":"hybrid","integrationLane":"native-client","decision":{"availability":"not-listed","evidenceStatus":"not-listed","exactEvidence":[],"supportingEvidence":[{"kind":"quickstart","fidelity":"platform-adjacent","slug":"cordova-maintenance","title":"Stabilize a Cordova map before migration","href":"/quickstart/cordova-maintenance"},{"kind":"starter-kit","fidelity":"platform-adjacent","slug":"cordova-maintenance-starter","title":"Cordova stabilization starter","href":"/starter-kits/cordova-maintenance-starter"},{"kind":"sample-app","fidelity":"product-adjacent","slug":"grid-restoration-desk","title":"Grid Restoration Desk","href":"/samples/grid-restoration-desk"},{"kind":"sample-app","fidelity":"product-adjacent","slug":"care-transfer-desk","title":"Care Transfer Desk","href":"/samples/care-transfer-desk"},{"kind":"sample-app","fidelity":"product-adjacent","slug":"airside-turnaround-desk","title":"Airside Turnaround Desk","href":"/samples/airside-turnaround-desk"},{"kind":"sample-app","fidelity":"product-adjacent","slug":"field-service","title":"Field Service Console","href":"/samples/field-service"},{"kind":"sample-app","fidelity":"product-adjacent","slug":"address-verifier","title":"Address Verifier","href":"/samples/address-verifier"},{"kind":"sample-app","fidelity":"product-adjacent","slug":"vision-evidence-desk","title":"Vision Evidence Desk","href":"/samples/vision-evidence-desk"},{"kind":"sample-app","fidelity":"product-adjacent","slug":"place-contribution-desk","title":"Place Contribution Desk","href":"/samples/place-contribution-desk"},{"kind":"sample-app","fidelity":"product-adjacent","slug":"realview-inspection-desk","title":"RealView Inspection Desk","href":"/samples/realview-inspection-desk"},{"kind":"journey","fidelity":"product-adjacent","slug":"ios-feedback-report-review","title":"iOS feedback report and review","href":"/journeys/ios-feedback-report-review"},{"kind":"journey","fidelity":"product-adjacent","slug":"location-capture-evidence","title":"Consent-bound location capture evidence","href":"/journeys/location-capture-evidence"},{"kind":"journey","fidelity":"product-adjacent","slug":"place-contribution-publication","title":"Governed place contribution and publication","href":"/journeys/place-contribution-publication"}],"boundary":"This product does not list this platform in the canonical product catalog. Adjacent source, tutorial, sample, or platform evidence must not be promoted to compatibility or availability."},"authenticationCandidates":[],"identityLock":["Product and platform decision ID","Account and environment reference","Region and data-residency decision","Package or bundle identity and signing owner","SDK/wrapper version plus build-tool matrix","Permission, lifecycle, device, and release-artifact identity","Source/distribution fingerprint and release owner","Quota, support, incident, rollback, and retirement owners"],"scenarios":[{"id":"clean-build","title":"Clean build and identity lock","purpose":"Prove the selected source, distribution, toolchain, and runtime identity from a clean environment.","expectedEvidence":"Checksums, dependency lock, build log, runtime identity, and exact evidence links agree without workstation-only state.","recovery":"Stop qualification, reconcile the exact distribution or contract, and rebuild from a clean environment."},{"id":"fixture-success","title":"Deterministic fixture success","purpose":"Exercise the application adapter without credentials or provider traffic.","expectedEvidence":"The fixture produces the documented application contract and retains source identity plus state ownership.","recovery":"Fix the application boundary before requesting account access; a live call must not compensate for an unproven adapter."},{"id":"authentication-denied","title":"Missing, denied, expired, and revoked access","purpose":"Prove least-privilege failure without logging, reflecting, or weakening credential controls.","expectedEvidence":"Every access failure is classified, redacted, bounded, and routes to entitlement or credential reconciliation.","recovery":"Stop retries, preserve only safe request evidence, and reconcile the issued account contract independently."},{"id":"quota-unavailable","title":"Quota, timeout, offline, and service unavailability","purpose":"Prove bounded retry, fallback, and user-visible degradation for the exact operation safety class.","expectedEvidence":"Retry-After is honored where present; uncertain state changes never become blind retries.","recovery":"Use bounded backoff for safe reads and reconcile state-changing unknown outcomes before replay."},{"id":"upgrade-rollback","title":"Upgrade, downgrade, and rollback","purpose":"Prove that source, SDK, wrapper, schema, and runtime changes are independently reversible.","expectedEvidence":"Compatibility evidence names both versions, acceptance results, rollback trigger, and retained data/state behavior.","recovery":"Freeze rollout, restore the last qualified artifact, and reopen source and entitlement selection."},{"id":"idempotent-replay","title":"Idempotent command replay","purpose":"Repeat one stable command identity after a committed or uncertain result.","expectedEvidence":"The aggregate version and application event identity do not duplicate.","recovery":"Reconcile by stable business and provider identity before any new command."},{"id":"stale-version","title":"Stale version and concurrent actor","purpose":"Prevent an older actor or callback from overwriting newer durable truth.","expectedEvidence":"The stale transition is rejected without state mutation or event emission.","recovery":"Reload the current aggregate, re-evaluate policy, and require a new attributable decision."},{"id":"unknown-outcome","title":"Unknown provider outcome","purpose":"Separate timeout from failure and preserve a recoverable pending state.","expectedEvidence":"The application records the attempt, reconciles provider truth, and completes or retries without duplication.","recovery":"Do not infer success or failure; reconcile using the exact issued operation and durable identity."},{"id":"restart-recovery","title":"Restart and delayed evidence","purpose":"Recover application-owned state after process restart and reject late or superseded callbacks.","expectedEvidence":"The journey resumes from durable records and preserves generation, actor, and event ordering.","recovery":"Rebuild the read model from immutable application evidence and quarantine ambiguous callbacks."}],"phases":[{"id":"select-authority","title":"Lock source and product authority","owner":"Product owner + application technical owner","state":"actionable","objective":"Resolve the exact product, platform, source, distribution, generation, account, region, and owner before code or access is approved.","activities":["Review exact evidence separately from adjacent learning material.","Record every unresolved package, endpoint, callback, entitlement, and version question.","Keep not-listed and selection-required decisions blocked until an attributable owner supplies exact evidence."],"exitEvidence":["Immutable product-platform decision","Exact source/distribution identities and fingerprints","Named product, security, application, and release owners"],"blockedBy":["The canonical product catalog does not list this platform.","A product owner must establish availability before implementation qualification."]},{"id":"lock-runtime","title":"Lock runtime and authentication","owner":"Application owner + security","state":"blocked","objective":"Bind the runtime identity to one authentication generation and least-privilege placement without accepting a credential value.","activities":["Record the runtime identity fields for this integration lane.","Choose one issued authentication path and document forbidden placement.","Define non-production restrictions, rotation, redaction, and incident ownership."],"exitEvidence":["Runtime compatibility decision","Credential class and restriction record","Secret/public-value placement review"],"blockedBy":["The canonical product catalog does not list this platform.","A product owner must establish availability before implementation qualification."]},{"id":"prove-fixture","title":"Prove the application contract offline","owner":"Application team","state":"blocked","objective":"Exercise a deterministic adapter and every application-owned invariant before provider access.","activities":["Run the clean-build and fixture-success scenarios.","Normalize provider-shaped data at the adapter edge and keep opaque objects out of durable state.","Prove denial, quota, unavailable, upgrade, and rollback behavior with fixtures."],"exitEvidence":["Fixture results tied to the source lock","Application contract/schema","Failure and rollback evidence"],"blockedBy":["The canonical product catalog does not list this platform.","A product owner must establish availability before implementation qualification."]},{"id":"qualify-nonproduction","title":"Qualify issued non-production access","owner":"Product owner + application team","state":"blocked","objective":"Run the smallest read or explicitly approved test journey against an issued non-production account without exporting secrets or sensitive payloads.","activities":["Confirm account, entitlement, host, region, quota, and exact operation/distribution.","Capture credential-free conformance results and safe request identities.","Compare live shape and failure classification to the locked application contract."],"exitEvidence":["Signed or attributable product-owner decision","Credential-free conformance report","Account/region/quota/entitlement reference","Observed compatibility and divergence record"],"blockedBy":["The canonical product catalog does not list this platform.","A product owner must establish availability before implementation qualification.","Issued non-production account and approved provider contract are external requirements."]},{"id":"exercise-journey","title":"Exercise lifecycle and hostile paths","owner":"Application team + operations","state":"blocked","objective":"Prove complete success, denial, degradation, recovery, restart, and rollback behavior at the integration's true state depth.","activities":["Execute every published qualification scenario.","For hybrid/stateful work, prove replay, stale-version, unknown-outcome, and restart recovery.","Verify telemetry, quota alarms, support evidence, cleanup, and rollback."],"exitEvidence":["Scenario-by-scenario result ledger","State/reconciliation evidence where applicable","Alert, runbook, support, cleanup, and rollback evidence"],"blockedBy":["The canonical product catalog does not list this platform.","A product owner must establish availability before implementation qualification.","Operational telemetry and provider-degradation exercises require an approved environment."]},{"id":"approve-release","title":"Independent release and deployment","owner":"Independent security + operations + product release owners","state":"blocked","objective":"Freeze the qualified artifact and collect independent authority without allowing developer evidence to self-approve production.","activities":["Attach exact artifacts to the governed release workflow.","Review security/privacy, product conformance, operations, quota, regional, legal, and rollback evidence.","Use progressive deployment and independently reconcile production health."],"exitEvidence":["Immutable release artifact and evidence digests","Independent approvals","Progressive deployment, rollback, and post-release reconciliation evidence"],"blockedBy":["The canonical product catalog does not list this platform.","A product owner must establish availability before implementation qualification.","This catalog never grants entitlement, support, production release, or deployment authority."]}],"releaseEvidence":["Exact source, package/distribution, contract generation, and runtime identity","Issued account, entitlement, region, quota, and credential-class reference without secret values","Clean build, fixture, non-production conformance, hostile-path, upgrade, and rollback results","Security, privacy, accessibility, operational, legal/content, and product-owner decisions","Immutable release artifact digest, progressive deployment evidence, and independent post-release reconciliation"],"handoff":{"websitePath":"/platforms/qualify?product=capture-feedback&platform=cordova","apiPath":"/api/capability-qualifications?product=capture-feedback&platform=cordova","downloadPath":"/api/capability-qualifications?product=capture-feedback&platform=cordova&download=1","matrixPath":"/platforms/matrix?product=capture-feedback&platform=cordova","productPath":"/docs/capture-feedback","platformPath":"/platforms/cordova"},"safety":{"providerCalls":0,"credentialsAccepted":false,"providerPayloadsAccepted":false,"writesExposed":false,"productionApprovalGranted":false}}