2026-05-05 10:46:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-05 10:46:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 10:46:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 10:46:44 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-05 10:46:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 10:46:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 10:46:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 10:46:44 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-05 10:46:44 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-05 10:46:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-05 11:32:03 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-05 11:32:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:32:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:32:03 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-05 11:32:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:32:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:32:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:32:03 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-05 11:32:03 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-05 11:32:03 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-05 11:33:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-05 11:33:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:33:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:33:31 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-05 11:33:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:33:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:33:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 11:33:31 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-05 11:33:31 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-05 11:33:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-05 19:10:42 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-05 19:10:42 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-05 19:10:42 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-05 19:10:43 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-05 19:10:43 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 19:10:43 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 19:10:43 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-05 19:10:43 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 19:10:43 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 19:10:43 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-05 19:10:43 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-05 19:10:43 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-05 19:10:43 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-06 11:43:07 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-06 11:43:07 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-06 11:43:08 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-06 11:43:08 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-06 11:43:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 11:43:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 11:43:08 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-06 11:43:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 11:43:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 11:43:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 11:43:08 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-06 11:43:08 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-06 11:43:08 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-06 15:05:18 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-06 15:05:18 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-06 15:05:18 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-06 15:05:18 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-06 15:05:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:05:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:05:18 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-06 15:05:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:05:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:05:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:05:18 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-06 15:05:18 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-06 15:05:18 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-06 15:06:41 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-06 15:06:41 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-06 15:06:42 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-06 15:06:42 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-06 15:06:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:06:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:06:42 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-06 15:06:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:06:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:06:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-06 15:06:42 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-06 15:06:42 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-06 15:06:42 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:25:02 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:25:02 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:25:02 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-12 10:25:02 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-12 10:25:03 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:25:03 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:25:03 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:25:03 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:25:03 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:25:03 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-12 10:25:03 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-12 10:25:03 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:25:03 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:26:18 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:26:18 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:26:18 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-12 10:26:18 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-12 10:26:18 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:26:18 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:26:18 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:26:18 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:26:18 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:26:18 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-12 10:26:18 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-12 10:26:18 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:26:18 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:27:35 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:27:35 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:27:35 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-12 10:27:35 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-12 10:27:36 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:27:36 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:27:36 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:27:36 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:27:36 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:27:36 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-12 10:27:36 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-12 10:27:36 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:27:36 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:28:51 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:28:51 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:28:51 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-12 10:28:51 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-12 10:28:51 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:28:52 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:28:52 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:28:52 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:28:52 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:28:52 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-12 10:28:52 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-12 10:28:52 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:28:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:30:11 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:30:11 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:30:11 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-12 10:30:11 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-12 10:30:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:30:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:30:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:30:12 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:30:12 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:30:12 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-12 10:30:12 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-12 10:30:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:30:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:42:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:42:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:42:44 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-12 10:42:44 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-12 10:42:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:42:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:42:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:42:44 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:42:44 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:42:44 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-12 10:42:44 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-12 10:42:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:42:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:44:03 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:44:03 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:44:03 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-12 10:44:03 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-12 10:44:04 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:44:04 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:44:04 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:44:04 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:44:04 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:44:04 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-12 10:44:04 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-12 10:44:04 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:44:04 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:45:22 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:45:22 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:45:22 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-12 10:45:23 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-12 10:45:23 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:45:23 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:45:23 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:45:23 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:45:23 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:45:23 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-12 10:45:23 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-12 10:45:23 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:45:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:46:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:46:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:46:44 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-12 10:46:45 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-12 10:46:45 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:46:45 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:46:45 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:46:45 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:46:45 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:46:45 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-12 10:46:45 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-12 10:46:45 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-12 10:46:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:35:43 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:35:43 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:35:43 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-14 12:35:43 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-14 12:35:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:35:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:35:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:35:44 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 12:35:44 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:35:44 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-14 12:35:44 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-14 12:35:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:35:44 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:37:24 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:37:24 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:37:24 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-14 12:37:24 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-14 12:37:24 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:37:25 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:37:25 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:37:25 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 12:37:25 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:37:25 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-14 12:37:25 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-14 12:37:25 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:37:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:39:07 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:39:07 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:39:07 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-14 12:39:07 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-14 12:39:07 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:39:08 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:39:08 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:39:08 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 12:39:08 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:39:08 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-14 12:39:08 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-14 12:39:08 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 12:39:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:38:30 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:38:30 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:38:30 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-14 13:38:30 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-14 13:38:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:38:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:38:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:38:31 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 13:38:31 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:38:31 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-14 13:38:31 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-14 13:38:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:38:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:39:54 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:39:54 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:39:54 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-14 13:39:54 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-14 13:39:54 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:39:54 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:39:54 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:39:54 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:39:54 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:39:54 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-14 13:39:54 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:39:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:39:55 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 13:39:55 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 13:39:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:39:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:39:55 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-14 13:39:55 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-14 13:39:55 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:39:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:39:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:39:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:41:15 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:41:15 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:41:15 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-14 13:41:16 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-14 13:41:17 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:41:17 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:41:17 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:41:17 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 13:41:17 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:41:17 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-14 13:41:17 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-14 13:41:17 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:41:17 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:42:37 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:42:37 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:42:37 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-14 13:42:37 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-14 13:42:37 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:42:37 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:42:37 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:42:37 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:42:37 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:42:37 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-14 13:42:37 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:42:38 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:42:38 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 13:42:38 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 13:42:38 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:42:38 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:42:38 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-14 13:42:38 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-14 13:42:38 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 13:42:38 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:42:38 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 13:42:38 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 17:13:15 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 17:13:15 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 17:13:15 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-14 17:13:15 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-14 17:13:16 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 17:13:16 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 17:13:16 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 17:13:16 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 17:13:16 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 17:13:16 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-14 17:13:16 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-14 17:13:16 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-14 17:13:16 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:30:24 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:30:24 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:30:24 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-15 14:30:24 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-15 14:30:24 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:30:24 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:30:24 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:30:24 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:30:24 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:30:24 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 14:30:24 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 14:30:24 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:30:24 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:35:35 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is unknown, refusing duplicate QBO post 2026-05-15 14:35:35 - ERROR --> Failed to revert 'posting' status after QBO failure on entry 1: PDO::prepare('\n UPD... ', []): PDOStatement|false was not expected to be called more than 3 times. 2026-05-15 14:35:35 - ERROR --> Failed to revert 'posting' status after QBO failure on entry 1: PDO::prepare('\n UPD... ', []): PDOStatement|false was not expected to be called more than 3 times. 2026-05-15 14:37:06 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-15 14:37:11 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:37:11 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:37:11 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-15 14:37:12 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-15 14:37:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:37:12 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-15 14:37:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:37:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:37:12 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:37:12 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:37:12 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 14:37:12 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 14:37:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:37:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:40:37 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-05-15 14:40:37 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 14:40:37 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-15 14:40:37 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-05-15 14:40:43 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:40:43 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 14:40:43 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 14:44:57 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:44:58 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:44:58 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:44:58 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:44:58 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:44:58 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 14:44:58 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 14:44:58 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:44:58 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:45:55 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:45:55 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:45:55 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:45:55 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:45:55 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:45:55 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 14:45:55 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 14:45:55 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:45:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:48:21 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-05-15 14:48:21 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-05-15 14:48:21 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:48:27 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:48:27 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:48:27 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 14:48:27 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 14:48:27 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:48:27 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:55:09 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:55:09 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:55:09 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-15 14:55:10 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-15 14:55:10 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:55:10 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:55:10 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:55:10 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-05-15 14:55:10 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:55:10 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:55:10 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:55:10 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 14:55:10 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 14:55:10 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:55:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 14:59:48 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-15 14:59:48 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-15 14:59:48 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-15 14:59:48 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-15 14:59:48 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-15 14:59:48 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-15 14:59:48 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-15 14:59:48 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-15 14:59:48 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-15 14:59:48 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-15 14:59:48 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: PDO::prepare('\n SELECT id, ... ', []): PDOStatement|false was not expected to be called more than once. 2026-05-15 15:00:17 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-15 15:00:17 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-15 15:00:17 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-15 15:00:17 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-15 15:00:17 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-15 15:00:17 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-15 15:00:17 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-15 15:00:17 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-15 15:00:17 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-15 15:00:17 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-15 15:00:22 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:00:22 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:00:22 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-15 15:00:23 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-15 15:00:23 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:00:23 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:00:23 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:00:23 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-15 15:00:23 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-15 15:00:23 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-15 15:00:23 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-15 15:00:23 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-15 15:00:23 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-15 15:00:23 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-15 15:00:23 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-15 15:00:23 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-15 15:00:23 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:00:23 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 15:00:23 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:00:23 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 15:00:23 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 15:00:23 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:00:23 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:10:41 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:10:41 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:10:41 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-15 15:10:41 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-15 15:10:41 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:10:41 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:10:41 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:10:41 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 15:10:41 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:10:41 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 15:10:41 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 15:10:41 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 15:10:41 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:32 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:32 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:32 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-15 16:30:33 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-15 16:30:33 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:33 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:33 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:33 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 16:30:33 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:33 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 16:30:33 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 16:30:33 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:33 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:52 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:52 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:52 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-15 16:30:52 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-15 16:30:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:53 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 16:30:53 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:53 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 16:30:53 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 16:30:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:30:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:33:12 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-15 16:33:12 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-05-15 16:34:03 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-15 16:34:03 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-05-15 16:34:03 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-15 16:34:03 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-05-15 16:34:03 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-05-15 16:38:07 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-05-15 16:39:11 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:11 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:11 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:39:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:39:12 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-15 16:39:12 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-15 16:39:12 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:39:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:39:13 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:39:13 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-15 16:39:13 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-15 16:39:13 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-15 16:39:13 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-15 16:39:13 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:46:32 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-05-18 14:46:32 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-05-18 14:46:32 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 14:46:32 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-18 14:46:32 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-05-18 14:48:34 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:48:34 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:48:34 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-18 14:48:34 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-18 14:48:35 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:48:35 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:48:35 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:48:35 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 14:48:35 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:48:35 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-18 14:48:35 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 14:48:35 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:48:35 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:41 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:41 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:41 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-18 14:51:42 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-18 14:51:42 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-05-18 14:51:42 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-05-18 14:51:42 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-18 14:51:42 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-05-18 14:51:42 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-05-18 14:51:42 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-18 14:51:42 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-05-18 14:51:42 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-05-18 14:51:42 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-05-18 14:51:42 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-18 14:51:42 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:42 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:42 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-18 14:51:42 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-18 14:51:42 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-18 14:51:42 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-18 14:51:42 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-18 14:51:42 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-18 14:51:42 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-18 14:51:42 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-18 14:51:42 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-18 14:51:42 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:42 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-18 14:51:42 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 14:51:42 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:53 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-18 14:51:53 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-18 14:51:53 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-05-18 14:51:53 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-05-18 14:51:53 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-18 14:51:53 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-05-18 14:51:53 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-05-18 14:51:53 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-18 14:51:53 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-05-18 14:51:53 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-05-18 14:51:53 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-05-18 14:51:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-18 14:51:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:53 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-18 14:51:53 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-18 14:51:53 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-18 14:51:53 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-18 14:51:53 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-18 14:51:53 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-18 14:51:53 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-18 14:51:53 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-18 14:51:53 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-18 14:51:53 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:53 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-18 14:51:53 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 14:51:53 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:51:53 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:51:53 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:52:20 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-18 14:52:48 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-18 14:53:07 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-18 14:56:30 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:56:30 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:56:30 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-18 14:56:31 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-18 14:56:31 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-05-18 14:56:31 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-05-18 14:56:31 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-18 14:56:31 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-05-18 14:56:31 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-05-18 14:56:31 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-18 14:56:31 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-05-18 14:56:31 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-05-18 14:56:31 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-05-18 14:56:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-18 14:56:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:56:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:56:31 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-18 14:56:31 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-18 14:56:31 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-18 14:56:31 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-18 14:56:31 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-18 14:56:31 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-18 14:56:31 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-18 14:56:31 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-18 14:56:31 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-18 14:56:31 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:56:31 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-18 14:56:31 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 14:56:31 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 14:56:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 14:56:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 15:25:29 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-18 15:25:29 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-18 15:25:29 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-18 15:25:29 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-18 15:25:29 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-18 15:25:29 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-18 15:25:29 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-18 15:25:29 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-18 15:25:29 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-18 15:25:29 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-18 15:26:01 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-18 15:26:01 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-18 15:26:01 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-18 15:26:01 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-05-18 15:26:01 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-18 15:26:01 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-18 15:26:01 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-18 15:26:01 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-18 15:26:01 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-18 15:26:01 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-18 15:26:01 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-18 15:26:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 15:26:44 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 15:26:44 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-18 15:26:45 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-18 15:26:45 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-05-18 15:26:45 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-05-18 15:26:45 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-18 15:26:45 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-05-18 15:26:45 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-05-18 15:26:45 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-18 15:26:45 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-05-18 15:26:45 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-05-18 15:26:45 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-05-18 15:26:45 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-18 15:26:45 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 15:26:45 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 15:26:45 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-18 15:26:45 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-18 15:26:45 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-18 15:26:45 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-05-18 15:26:45 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-18 15:26:45 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-18 15:26:45 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-18 15:26:45 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-18 15:26:45 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-18 15:26:45 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-18 15:26:45 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 15:26:45 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-18 15:26:45 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-18 15:26:45 - WARN --> QB_ENCRYPTION_KEY not configured - tokens will not be encrypted at rest 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-18 15:26:45 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-18 15:26:45 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:34:07 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-29 15:34:08 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-29 15:34:08 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-05-29 15:34:08 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-05-29 15:34:08 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-29 15:34:08 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-05-29 15:34:08 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-05-29 15:34:08 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-29 15:34:08 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-05-29 15:34:08 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-05-29 15:34:08 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-29 15:34:08 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-29 15:34:08 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-29 15:34:08 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-29 15:34:08 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-05-29 15:34:08 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-29 15:34:08 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-29 15:34:08 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-29 15:34:08 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-29 15:34:08 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-29 15:34:08 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-29 15:34:08 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:34:08 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-29 15:34:08 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:34:08 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:34:08 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:42:51 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-29 15:42:52 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-29 15:42:52 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-05-29 15:42:52 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-05-29 15:42:52 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-29 15:42:52 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-05-29 15:42:52 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-05-29 15:42:52 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-29 15:42:52 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-05-29 15:42:52 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-05-29 15:42:52 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-29 15:42:52 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-29 15:42:52 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-29 15:42:52 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-29 15:42:52 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-05-29 15:42:52 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-29 15:42:52 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-29 15:42:52 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-29 15:42:52 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-29 15:42:52 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-29 15:42:52 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-29 15:42:52 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:42:52 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-29 15:42:52 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:42:52 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:42:52 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:44:11 - INFO --> Access token expired for store: pc00, refreshing... 2026-05-29 15:44:11 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-05-29 15:44:12 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-05-29 15:44:12 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-05-29 15:44:12 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-29 15:44:12 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-05-29 15:44:12 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-05-29 15:44:12 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-05-29 15:44:12 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-05-29 15:44:12 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-05-29 15:44:12 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-05-29 15:44:12 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-05-29 15:44:12 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-05-29 15:44:12 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-05-29 15:44:12 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-05-29 15:44:12 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-05-29 15:44:12 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-05-29 15:44:12 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-05-29 15:44:12 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-05-29 15:44:12 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-05-29 15:44:12 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-05-29 15:44:12 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:44:12 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-05-29 15:44:12 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-05-29 15:44:12 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-05-29 15:44:12 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 12:54:41 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-11 12:54:42 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-11 12:54:42 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-11 12:54:42 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-11 12:54:42 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-11 12:54:42 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-11 12:54:42 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-11 12:54:42 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-11 12:54:42 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-11 12:54:42 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-11 12:54:42 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-11 12:54:42 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-11 12:54:42 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-11 12:54:42 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-11 12:54:42 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-11 12:54:42 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-11 12:54:42 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-11 12:54:42 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-11 12:54:42 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-11 12:54:42 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-11 12:54:42 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-11 12:54:42 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 12:54:42 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-11 12:54:42 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 12:54:42 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 12:54:42 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 19:41:59 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-11 19:42:00 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-11 19:42:00 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-11 19:42:00 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-11 19:42:00 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-11 19:42:00 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-11 19:42:00 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-11 19:42:00 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-11 19:42:00 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-11 19:42:00 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-11 19:42:00 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-11 19:42:00 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-11 19:42:00 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-11 19:42:00 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-11 19:42:00 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-11 19:42:00 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-11 19:42:00 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-11 19:42:00 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-11 19:42:00 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-11 19:42:00 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-11 19:42:00 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-11 19:42:00 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 19:42:00 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-11 19:42:00 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-11 19:42:00 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-11 19:42:00 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 10:56:37 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-13 10:56:38 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-13 10:56:38 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-13 10:56:38 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-13 10:56:38 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-13 10:56:38 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:38 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-13 10:56:38 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-13 10:56:38 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-13 10:56:38 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:38 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-13 10:56:38 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-13 10:56:38 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-13 10:56:38 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-13 10:56:38 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-13 10:56:38 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:38 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:38 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:38 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-13 10:56:39 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-13 10:56:39 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-13 10:56:39 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-13 10:56:39 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-13 10:56:39 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-13 10:56:39 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-13 10:56:39 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-13 10:56:39 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-13 10:56:39 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-13 10:56:39 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-13 10:56:39 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 10:56:39 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-13 10:56:39 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 10:56:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 10:56:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 17:11:21 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-13 17:11:21 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-13 17:11:21 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-13 17:11:21 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-13 17:11:21 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-13 17:11:21 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:21 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-13 17:11:21 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-13 17:11:21 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-13 17:11:21 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:21 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-13 17:11:21 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-13 17:11:21 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-13 17:11:21 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-13 17:11:21 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-13 17:11:21 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:21 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:21 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:21 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-13 17:11:22 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-13 17:11:22 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-13 17:11:22 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-13 17:11:22 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-13 17:11:22 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-13 17:11:22 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-13 17:11:22 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-13 17:11:22 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-13 17:11:22 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-13 17:11:22 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-13 17:11:22 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 17:11:22 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-13 17:11:22 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-13 17:11:22 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-13 17:11:22 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-16 9:15:46 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-16 9:15:47 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-16 9:15:47 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-16 9:15:47 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-16 9:15:47 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-16 9:15:47 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-16 9:15:47 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-16 9:15:47 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-16 9:15:47 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-16 9:15:47 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-16 9:15:47 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-16 9:15:47 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-16 9:15:47 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-16 9:15:47 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-16 9:15:47 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-16 9:15:47 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-16 9:15:47 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-16 9:15:47 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-16 9:15:47 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-16 9:15:47 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-16 9:15:47 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-16 9:15:47 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-16 9:15:47 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-16 9:15:47 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-16 9:15:47 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-16 9:15:47 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:33:25 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-20 15:33:25 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-20 15:33:25 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-20 15:33:25 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-20 15:33:25 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-20 15:33:25 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:25 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-20 15:33:25 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-20 15:33:25 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-20 15:33:25 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:25 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-20 15:33:25 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-20 15:33:25 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-20 15:33:25 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-20 15:33:25 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-20 15:33:26 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-20 15:33:26 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-20 15:33:26 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-20 15:33:26 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-20 15:33:26 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-20 15:33:26 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-20 15:33:26 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-20 15:33:26 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-20 15:33:26 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-20 15:33:26 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-20 15:33:26 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:33:26 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-20 15:33:26 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:33:26 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:33:26 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:35:05 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-20 15:35:06 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-20 15:35:06 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-20 15:35:06 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-20 15:35:06 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-20 15:35:06 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-20 15:35:06 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-20 15:35:06 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-20 15:35:06 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-20 15:35:06 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-20 15:35:06 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-20 15:35:06 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-20 15:35:06 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-20 15:35:06 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-20 15:35:06 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-20 15:35:06 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-20 15:35:06 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-20 15:35:06 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-20 15:35:06 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-20 15:35:06 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-20 15:35:06 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-20 15:35:06 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:35:06 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-20 15:35:06 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-20 15:35:06 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-20 15:35:06 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-21 16:34:54 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-21 16:34:55 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-21 16:34:55 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-21 16:34:55 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-21 16:34:55 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-21 16:34:55 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-21 16:34:55 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-21 16:34:55 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-21 16:34:55 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-21 16:34:55 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-21 16:34:55 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-21 16:34:55 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-21 16:34:55 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-21 16:34:55 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-21 16:34:55 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-21 16:34:55 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-21 16:34:55 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-21 16:34:55 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-21 16:34:55 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-21 16:34:55 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-21 16:34:55 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-21 16:34:55 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-21 16:34:55 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-21 16:34:55 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-21 16:34:55 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-21 16:34:55 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:31:29 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-22 12:31:30 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-22 12:31:30 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-22 12:31:30 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-22 12:31:30 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-22 12:31:30 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-22 12:31:30 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-22 12:31:30 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-22 12:31:30 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-22 12:31:30 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-22 12:31:30 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-22 12:31:30 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-22 12:31:30 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-22 12:31:30 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-22 12:31:30 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-22 12:31:30 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-22 12:31:30 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-22 12:31:30 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-22 12:31:30 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-22 12:31:30 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-22 12:31:30 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-22 12:31:30 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:31:30 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-22 12:31:30 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:31:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:31:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:33:09 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-22 12:33:09 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-22 12:33:10 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-22 12:33:10 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-22 12:33:10 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-22 12:33:10 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-22 12:33:10 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-22 12:33:10 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-22 12:33:10 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-22 12:33:10 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-22 12:33:10 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-22 12:33:10 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-22 12:33:10 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-22 12:33:10 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-22 12:33:10 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-22 12:33:10 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-22 12:33:10 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-22 12:33:10 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-22 12:33:10 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-22 12:33:10 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-22 12:33:10 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-22 12:33:10 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:33:10 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-22 12:33:10 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 12:33:10 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 12:33:10 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:30:58 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-22 14:30:59 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-22 14:30:59 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-22 14:30:59 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-22 14:30:59 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-22 14:30:59 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-22 14:30:59 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-22 14:30:59 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-22 14:30:59 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-22 14:30:59 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-22 14:30:59 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-22 14:30:59 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-22 14:30:59 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-22 14:30:59 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-22 14:30:59 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-22 14:30:59 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-22 14:30:59 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-22 14:30:59 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-22 14:30:59 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-22 14:30:59 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-22 14:30:59 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-22 14:30:59 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:30:59 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-22 14:30:59 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:30:59 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:30:59 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:32:33 - INFO --> Access token expired for store: pc00, refreshing... 2026-07-22 14:32:33 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-07-22 14:32:34 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-07-22 14:32:34 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-07-22 14:32:34 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-22 14:32:34 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-07-22 14:32:34 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-07-22 14:32:34 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-07-22 14:32:34 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-07-22 14:32:34 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-07-22 14:32:34 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-07-22 14:32:34 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-07-22 14:32:34 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-07-22 14:32:34 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-07-22 14:32:34 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-07-22 14:32:34 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-07-22 14:32:34 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-07-22 14:32:34 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-07-22 14:32:34 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-07-22 14:32:34 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-07-22 14:32:34 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-07-22 14:32:34 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:32:34 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-07-22 14:32:34 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-07-22 14:32:34 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-07-22 14:32:34 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-29 12:46:47 - INFO --> Access token expired for store: pc00, refreshing... 2026-08-29 12:46:48 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-08-29 12:46:48 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-08-29 12:46:48 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-08-29 12:46:48 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-29 12:46:48 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-08-29 12:46:48 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-08-29 12:46:48 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-29 12:46:48 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-08-29 12:46:48 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-08-29 12:46:48 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-08-29 12:46:48 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-08-29 12:46:48 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-08-29 12:46:48 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-08-29 12:46:48 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-08-29 12:46:48 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-08-29 12:46:48 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-08-29 12:46:48 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-08-29 12:46:48 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-08-29 12:46:48 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-08-29 12:46:48 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-08-29 12:46:48 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-29 12:46:48 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-08-29 12:46:48 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-29 12:46:48 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-29 12:46:48 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-30 20:25:30 - INFO --> Access token expired for store: pc00, refreshing... 2026-08-30 20:25:31 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-08-30 20:25:31 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-08-30 20:25:31 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-08-30 20:25:31 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-30 20:25:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:25:31 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-30 20:25:31 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-08-30 20:25:31 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-30 20:25:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:25:31 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-08-30 20:25:31 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-30 20:25:31 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-08-30 20:25:31 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-08-30 20:25:31 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-08-30 20:25:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:25:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:25:31 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:25:31 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-08-30 20:27:14 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-08-30 20:27:14 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-08-30 20:27:14 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-08-30 20:27:14 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-08-30 20:27:14 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-08-30 20:27:14 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-08-30 20:27:14 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-08-30 20:27:14 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-08-30 20:27:14 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-08-30 20:27:14 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-08-30 20:27:14 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-30 20:27:14 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:14 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-30 20:27:14 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-08-30 20:27:15 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-30 20:27:15 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-30 20:27:15 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-30 20:27:15 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-30 20:27:15 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:08:28 - INFO --> Access token expired for store: pc00, refreshing... 2026-08-31 16:08:29 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-08-31 16:08:29 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-08-31 16:08:29 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-08-31 16:08:29 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-31 16:08:29 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:29 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-31 16:08:29 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-08-31 16:08:29 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-31 16:08:29 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:29 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-08-31 16:08:29 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-31 16:08:29 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-08-31 16:08:29 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-08-31 16:08:29 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-08-31 16:08:29 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:29 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:29 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:29 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-08-31 16:08:29 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-08-31 16:08:29 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-08-31 16:08:29 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-08-31 16:08:29 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-08-31 16:08:29 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-08-31 16:08:29 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-08-31 16:08:29 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-08-31 16:08:29 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-08-31 16:08:29 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-08-31 16:08:29 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-08-31 16:08:29 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-08-31 16:08:29 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:29 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-08-31 16:08:29 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:29 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-08-31 16:08:29 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:29 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-31 16:08:29 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:29 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:08:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:08:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:30 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-08-31 16:08:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:08:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:08:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:30 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-31 16:08:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:30 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-31 16:08:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:08:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:08:30 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-08-31 16:08:30 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-31 16:08:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:08:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:08:30 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:08:30 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:14:06 - INFO --> Access token expired for store: pc00, refreshing... 2026-08-31 16:14:06 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-08-31 16:14:07 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-08-31 16:14:07 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-08-31 16:14:07 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-31 16:14:07 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-08-31 16:14:07 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-08-31 16:14:07 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-31 16:14:07 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-08-31 16:14:07 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-08-31 16:14:07 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-08-31 16:14:07 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-08-31 16:14:07 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-08-31 16:14:07 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-08-31 16:14:07 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-08-31 16:14:07 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-08-31 16:14:07 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-08-31 16:14:07 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-08-31 16:14:07 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-08-31 16:14:07 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-08-31 16:14:07 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-08-31 16:14:07 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:14:07 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-08-31 16:14:07 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 16:14:07 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 16:14:07 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 23:58:38 - INFO --> Access token expired for store: pc00, refreshing... 2026-08-31 23:58:39 - ERROR --> Failed to refresh token for store pc00: Refresh OAuth 2 Access token with Refresh Token failed. Body: [{"error":"invalid_request"}]. 2026-08-31 23:58:39 - WARN --> Auto-sync de-dupe: JE already exists in QBO for pc00 2026-05-14 (JE Id: 12345, DocNumber: BK-pc00-20260514); refusing duplicate post. 2026-08-31 23:58:39 - ERROR --> Auto-sync refusing to post for pc00 2026-05-14 — QBO de-dupe query failed: Network blip 2026-08-31 23:58:39 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-31 23:58:39 - INFO --> Sync disabled for store pc00, skipping date 2026-05-14 2026-08-31 23:58:39 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - ERROR --> Refusing to post imbalanced journal entry for pc00 on 2026-05-14: debits=150 credits=0 diff=150. No balancing account is mapped (cashOverShort) and no Expense fallback is available — configure a Cash Over/Short mapping in QuickBooks > Account Mapping before retrying. 2026-08-31 23:58:39 - WARN --> Journal entry not balanced. Debits: 150, Credits: 0, Diff: 150 2026-08-31 23:58:39 - INFO --> Auto-balanced journal entry. Final debits: 150, credits: 150 2026-08-31 23:58:39 - ERROR --> Failed to create journal entry: Call to undefined method stdClass::Add() 2026-08-31 23:58:39 - ERROR --> Failed to create journal entry: Add fired (test sentinel) 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - WARN --> Race-guard: postStagedEntry(1) lost claim — current status is posting, refusing duplicate QBO post 2026-08-31 23:58:39 - INFO --> recoverStuckPostingEntries: finalized entry 42 (pc00/2026-05-14) → posted (QBO Id: JE-999) 2026-08-31 23:58:39 - INFO --> recoverStuckPostingEntries: reverted entry 42 (pc00/2026-05-14) → pending_approval (QBO had no matching JE) 2026-08-31 23:58:39 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: Network blip 2026-08-31 23:58:39 - WARN --> recoverStuckPostingEntries: QBO query failed for stuck entry 42 (pc00/2026-05-14); leaving row alone for next sweep. Error: QBO auth blip during recovery sweep 2026-08-31 23:58:39 - WARN --> recoverStuckPostingEntries: QBO returned a JE for entry 42 but Id was empty; leaving row alone. 2026-08-31 23:58:39 - INFO --> recoverStuckPostingEntries: finalized entry 1 (pc00/2026-05-14) → posted (QBO Id: JE-1) 2026-08-31 23:58:39 - INFO --> recoverStuckPostingEntries: reverted entry 2 (pc00/2026-05-15) → pending_approval (QBO had no matching JE) 2026-08-31 23:58:39 - WARN --> recoverStuckPostingEntries: unexpected error querying QBO for stuck entry 3 (pc00/2026-05-16); leaving row alone for next sweep. Error: Network blip on row 3 2026-08-31 23:58:39 - ERROR --> recoverStuckPostingEntries: stuck-row scan failed: Unknown column or table 2026-08-31 23:58:39 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=0; clamping to 1 to prevent racing in-flight posts. 2026-08-31 23:58:39 - WARN --> recoverStuckPostingEntries called with stuckThresholdMinutes=-5; clamping to 1 to prevent racing in-flight posts. 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 8 for store pc00 date 2026-05-14 (restage of #7) 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 5 for store pc00 date 2026-05-14 (restage of #4) 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-14 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-03-15 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 99 for store pc00 date 2026-05-01 (restage of #17) 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 23:58:39 - INFO --> Sync disabled for store pc00, skipping date 2026-05-01 2026-08-31 23:58:39 - ERROR --> Failed to log sync attempt: SQL mismatch for PDO::prepare call 3 Failed asserting that 'INSERT INTO qb_sync_log (syncDate, syncType, status, journalEntryId, journalEntryDocNum, requestPayload, responsePayload, errorMessage, syncedBy, startedAt, completedAt) VALUES (:syncDate, :syncType, :status, :jeId, :docNum, :reqPayload, :respPayload, :errorMsg, :userId, NOW(), NOW()) ON DUPLICATE KEY UPDATE status = VALUES(status), journalEntryId = VALUES(journalEntryId), journalEntryDocNum = VALUES(journalEntryDocNum), responsePayload = VALUES(responsePayload), errorMessage = VALUES(errorMessage), retryCount = retryCount + 1, completedAt = NOW()' [ASCII](length: 553) contains "SELECT * FROM qb_account_mapping" [ASCII](length: 32). 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01 2026-08-31 23:58:39 - WARN --> getBalancingAccount: cashOverShort not mapped for store pc00. Refusing arbitrary-Expense fallback — variance must land in Cash Over/Short. createJournalEntry will fail-closed via the imbalanced_no_balancing_account guard. 2026-08-31 23:58:39 - INFO --> Staged entry 1 for store pc00 date 2026-05-01