195 lines
8.5 KiB
JSON
195 lines
8.5 KiB
JSON
{
|
|
"date": "2026-11-03T17:52:48.219Z",
|
|
"increment": "SGF-REQUEST-HISTORY-CURSOR-QA-v1",
|
|
"passed": true,
|
|
"functional_code": true,
|
|
"checks": 36,
|
|
"tests": {
|
|
"history": {
|
|
"file": "private/receipt-composition-0fe2284727df/request-history-result.json",
|
|
"sha256": "afc0cc47ac4b45f6a0479877726c8ee17f8cdda4fe80615652f44515752b18cb",
|
|
"checks": 20,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"request detail reuses first25 events and offers opaque older cursor",
|
|
"first cursor page retains exact own-stage order without global count",
|
|
"all older pages retain127 original events once despite new head append",
|
|
"previous cursor returns the original immediately newer25 events",
|
|
"refresh includes new event and supports100-row page",
|
|
"100-row traversal exposes remaining28 original records with final cursor absent",
|
|
"page-size change cannot reuse prior25-row cursor",
|
|
"cursor cannot migrate to another authorised request",
|
|
"another authorised reader must start own cursor context",
|
|
"invalid cursors and unsupported parameter forms are refused",
|
|
"expired cursor requires an explicit fresh consultation",
|
|
"current view right is checked again on every history page",
|
|
"physical-only role and foreign request cannot read history",
|
|
"unmapped unit cannot reuse known request history",
|
|
"another active module cannot read purchasing history",
|
|
"new session context generation invalidates former cursor",
|
|
"fresh consultation restores own-stage history only",
|
|
"history preserves draft version/status and pre-existing harness order without stock invoice debt or payment",
|
|
"zero request id refuses before database access",
|
|
"disabled request-history feature refuses before database access"
|
|
],
|
|
"request_id": 5,
|
|
"initial_events": 127,
|
|
"events_after_append": 128,
|
|
"native_audit_fixture_notes": 126,
|
|
"main_drafts": 2,
|
|
"inherited_harness_order_before_history_request": 1,
|
|
"inherited_order_source_setup_removed_for_future_runs": true,
|
|
"request_version_unchanged": true,
|
|
"successful_prefix_reused": 17,
|
|
"guard_database_queries": 0,
|
|
"new_right_names": [],
|
|
"visual_review": false,
|
|
"deployment_capacity_validated": false
|
|
}
|
|
},
|
|
"ui": {
|
|
"file": "private/receipt-composition-0fe2284727df/request-history-ui.json",
|
|
"sha256": "95b66c6d6c045b2d8bb4a967b664496f3262680b85a3668d0e20ec4ebeed73ef",
|
|
"checks": 10,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"initial own-stage page is reused without another request",
|
|
"older navigation encodes opaque cursor and current size",
|
|
"final page exposes only valid newer direction",
|
|
"newer direction sends server-issued previous cursor",
|
|
"page-size change begins new bounded consultation",
|
|
"history refresh preserves separate unsaved request form",
|
|
"history component calls read API without a command payload",
|
|
"late older response cannot replace newer history response",
|
|
"changed record or detached history drops late response",
|
|
"expired or refused cursor offers explicit safe refresh"
|
|
],
|
|
"dom_simulation": true,
|
|
"business_commands": 0,
|
|
"visual_review": false
|
|
}
|
|
},
|
|
"demo": {
|
|
"file": "private/receipt-composition-92a2386b386b/request-history-demo.json",
|
|
"sha256": "12f62283e255f40deb2909b6e3fd65b7fb0de0e147ddca535d0339f18498e53d",
|
|
"checks": 6,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"fresh demonstration has no main request or history-volume fixtures",
|
|
"request workspace remains mounted for original requester right",
|
|
"unknown history source grants no access and creates no record",
|
|
"served history module matches request-workspace.mjs",
|
|
"served history module matches request-history.mjs",
|
|
"demonstration probes preserve requests native audit and permission grants"
|
|
],
|
|
"before": "2f8a52ec464f18ae27496377e25dd877391c3fe9f5671d2ef6d159400eef60dd",
|
|
"after": "2f8a52ec464f18ae27496377e25dd877391c3fe9f5671d2ef6d159400eef60dd",
|
|
"visual_review": false
|
|
}
|
|
}
|
|
},
|
|
"sources": [
|
|
{
|
|
"file": "app/Modules/Purchasing/RequestController.php",
|
|
"sha256": "c5c2b78866be7f0e1c8ba09c1af538cefcfbafbea81197833b50821bba0fcbca"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/ProcessHistory.php",
|
|
"sha256": "255a4ca5901cf323e3fd16e2fb16509962710c5d5b67e2e425cdc1f7e7a257a2"
|
|
},
|
|
{
|
|
"file": "config/receipt_qa.php",
|
|
"sha256": "29ead5efdd92eea6224f9a038b2bfaab44581c1b288f4e8ea74bbab1831738cb"
|
|
},
|
|
{
|
|
"file": "routes/web.php",
|
|
"sha256": "8e8e34551d0b130172fd0f6104db039b4fc7bfbaa051457a89ae1ae3eebd9a33"
|
|
},
|
|
{
|
|
"file": "public/request-workspace.mjs",
|
|
"sha256": "9a44d4153b8a158dc310ff157ecc0b108888661c6c467f46a099e2abee869cb4"
|
|
},
|
|
{
|
|
"file": "public/request-history.mjs",
|
|
"sha256": "523b8d018d0191c68628922b180b8798e567b8bb4b54ce986002fcbb6c5a809e"
|
|
}
|
|
],
|
|
"pinned_native_manifests": {
|
|
"bundle": "7709a3d447d54c17d2fb4be4f9a0f70455c4a38c34e4bb8c643f6b5169071556",
|
|
"economic": "8b2d3aa61054e0edc54fcd818467eb2bacb5e1178f903b12ab44119e0f2e8d2e",
|
|
"internal": "2343af71f72259dd705f4cc3a3b163c90edf331a5b6ebe173531aeb341649e1b"
|
|
},
|
|
"authority": {
|
|
"existing_right": "purchasing_requests.view",
|
|
"new_right_names": [],
|
|
"own_stage_filter_unchanged": true,
|
|
"request_preview_confirmation_blocks_unchanged": true,
|
|
"cursor_bound_to_request_actor_context_binding_size": true,
|
|
"cursor_lifetime_seconds": 600,
|
|
"permission_rechecked_each_page": true
|
|
},
|
|
"pagination": {
|
|
"implementation": "Laravel cursorPaginate",
|
|
"page_sizes": [
|
|
25,
|
|
100
|
|
],
|
|
"order": "id descending",
|
|
"global_count": false,
|
|
"initial_page_reused": true,
|
|
"all_universe_loaded": false
|
|
},
|
|
"regression": {
|
|
"initial_events": 127,
|
|
"events_after_new_head": 128,
|
|
"original_ids_seen_once": true,
|
|
"native_fixture_notes": 126,
|
|
"notes_are_not_request_versions": true,
|
|
"request_version": 1,
|
|
"draft_status_preserved": true,
|
|
"inherited_order_fixture_before_history_request": 1,
|
|
"inherited_source_setup_removed_for_future_runs": true,
|
|
"successful_prefix_reused": 17
|
|
},
|
|
"demo": {
|
|
"port": 8080,
|
|
"entry": "http://127.0.0.1:8080/qa/enter/requester?open=1",
|
|
"initial_main_requests": 0,
|
|
"initial_history_volume": 0
|
|
},
|
|
"prior_proofs_preserved": [
|
|
{
|
|
"file": "docs/proofs/purchasing-continuity-composition-20261103.json",
|
|
"sha256": "6135df7c6dca784297b3a5f70a571585dc6d6a0d401a491c1d17ab91b780ce35"
|
|
},
|
|
{
|
|
"file": "docs/proofs/module-association-consolidation-summary-20261102.json",
|
|
"sha256": "8f693f39763ee21a22ebd3929d95ba1480f339eca18742fa53055c69eb5219ef"
|
|
}
|
|
],
|
|
"preservation": {
|
|
"installed_purchasing_sha256": "81899e531e9eec449717e694d8bdc106a9e220a828f5491ce918c1d2dc612787",
|
|
"target_database_connected": false,
|
|
"protected_six_records_changed": false,
|
|
"blocked_cache_cleared": false,
|
|
"previous_demo_data_written": false,
|
|
"public_rights_changed": false,
|
|
"publication": false,
|
|
"checkpoint": false
|
|
},
|
|
"limitations": [
|
|
"Cursor order follows immutable event sequence, not a guaranteed database snapshot across arbitrary external writers. Refresh starts a new consultation.",
|
|
"Ten-minute expiry, changed context, actor or page size require an explicit refresh. Cursor is a read marker, not approval evidence or a business version.",
|
|
"Volume consists of126 explicitly marked audit notes plus original draft events; it is not126 operational request revisions.",
|
|
"The initial inherited harness also prepared one100MZN order before the history request. It remains preserved; this unnecessary setup was removed for future runs. The preservation suffix was corrected without replaying17 valid checks.",
|
|
"UI checks use a simulated DOM; actual API cursor traversal is separately exercised. Browser visual review and accessibility remain pending.",
|
|
"No new React/Vite build: changed UI is static ES modules. Served module hashes and syntax are verified; prior valid build proof is retained.",
|
|
"Sustained load, deployment compatibility and operational readiness remain separate."
|
|
],
|
|
"visual_review_pending": true,
|
|
"deployment_capacity_validated": false
|
|
}
|