Repository navigation
Releases
OpenADS cumulative77 MSVC kit for Tim (x64 + x86), test only
OpenADS cumulative77 matched MSVC kit for Tim
Pritpal Bedi. bedipritpal/OpenADS fork of FiveTechSoft/OpenADS.
Exact source4eff01215c4735b049fb421c584b3a771809b8c6, the cumulative77 line; no engine changes for this compiler packaging. Separate from the MinGW full kit. New release, frozen64/52/76/77-full assets unchanged.
Matched MSVC x64 and x86 client DLL/import library and server. x64 for Tim's reported setup. HTTP/SQLite ON, TLS OFF as his64 MSVC kit. Read README-TIM.txt before replacing any test binaries.
Includes wrapper source, matching headers/import library, pending-field RDD patch and a compile-verified build helper for his own matching Harbour ABI. NO prebuilt Harbour RDD/VM substitution. OADS marker and RDD error bridge require application relink; DLL swap alone does not add Harbour symbols. OptionalIDs and both trace flavors retained. No running server/data changed.
Native tests cover startup TCP/HTTP, imports/exports, old/new C marker full/compact/gates/maxIDs/alignment, matched remote commit batching/durability/retained locks and bottom counts. Supplied helper compiles Harbour wrapper and patched RDD with both native MSVC architectures against pinned Harbour headers. That is a compile check, not a full native Harbour VM/application runtime test. Full native MSVC unit suite NOT run. Cumulative77 all-platform gates passed separately; MinGWx86 has197 known baseline failures, not clean full suite. Does not establish Tim's SAP speed gap is fixed or C(8)scope fixed. Test-only, no production clearance or auto deployment.
OpenADS mtfix77 full test kit - Windows x86 + Windows x64 + Linux x64 server + macOS universal
OpenADS mtfix77 full test kit: aligned instance and thread marker IDs
Requested and rule sheet reviewed by Pritpal Bedi. Built on his bedipritpal/OpenADS fork of FiveTechSoft/OpenADS, cumulative with the frozen mtfix76 kit. Test release only; no deployment, main merge or upstream submission is implied.
Same Harbour function, optional application IDs
OAds_TraceMark( "VOUCHER_SAVE_BEGIN", nInstId, hb_threadId() )
// Existing Vouch save code stays unchanged.
OAds_TraceMark( "VOUCHER_SAVE_END", nInstId, hb_threadId() )
The existing one-argument call remains valid. Omitted IDs default to0 (unspecified). Explicit0 is valid. An explicit NIL is not omission. IDs must be nonnegative whole numbers. Strings, logicals, arrays, negatives, fractions, NaN/infinity and out-of-range values return .F., without a Harbour error. No coercion and no silent truncation.
Exact Harbour integer values accept0..9999999999999999 (16 decimal digits). Floating numeric values accept0..9007199254740991 (2^53-1), finite and integral only. Larger floating values are rejected because their original integer identity may already have rounded. Prefer Vouch's actual integer counters and hb_threadId(), not IDs converted through floating calculations or decimal text parsing. Numeric construction before this call is application-owned; the function cannot recover information already lost by a caller.
The supplied thread ID is an application label, not a lookup or switch of an actual thread. Vouch supplies unique instance IDs and suitable thread IDs. The actual diagnostic thread identity remains separately available as auto_thread. Application IDs do not change connections or RDD execution.
Aligned local marker rows in BOTH full and compact
Timestamp, blank wire-duration field, prior-row gap and existing trace columns remain. M rows have operation Marker and caller OAdsTraceMark. The detail columns, in order:
tick_us.<20-wide> auto_thread.<20-wide> instance.<16-wide> thread.<16-wide> marker.<exact cMark>
Every numeric value is right-aligned in its fixed-width field. Instance, thread and marker start at the same positions on every marker row, including old one-argument calls with instance0/thread0. No decorative brackets. The marker is last and is not truncated. Full/compact use the exact same marker layout; compact still removes ordinary API summaries, not M rows.
Match application boundaries by supplied instance + thread + label, with auto_thread retained for execution provenance. tick_us is monotonic and relative to this client DLL/process's first marker, shared by both C entry points. Subtract ticks only within the same client lifetime, never across processes, DLL instances or restarts. It is application elapsed time with local logging overhead, not server processing time or a cross-thread/network barrier.
Only W rows are wire frames. Exclude M rows from frame counts and summed wire duration. M rows advance the previous-row gap column. Identify row kinds by columns, not by finding a keyword inside the application-supplied marker text. Use labels such as FAILED/CANCELLED on those application paths; marker success does not mean application save success.
Unchanged diagnostic safety and deployment boundaries
The marker is client-local: no server connection, wire trip, table lookup, RDD call, pending-field flush, commit, lock/unlock, navigation, cache or database-last-error change. It respects BOTH existing wire_trace and master logging gates and never enables logging. Returns .T. only when local append and close succeed; .F. otherwise. A failed append can leave a partial row, so do not retry automatically or use its return as save status.
cMark remains1..120 bytes, no C0/DEL/C1 control bytes including embedded NUL/CR/LF/tab. Prefer short ASCII developer labels, never customer data, paths, credentials or secrets.
The published C OAdsTraceMark(label,bytes) ABI remains unchanged and now writes the aligned format with0/0 IDs. Additive C bridge OAdsTraceMarkEx(label,bytes,UNSIGNED64 instance,UNSIGNED64 app_thread) supports the same Harbour function. x86 MSVC wrapper/import checks retain the old @8 entry and add the @24 entry; MinGW keeps its existing cdecl convention. Do not change argument counts when calling the old C export.
The Harbour wrapper stays in the kit librddads.a as approved. Relink Vouch with this kit's matching wrapper, import library and DLL (or cumulative static client archive for static linking). A DLL-only swap cannot replace a Harbour wrapper already linked into an executable. New wrapper + older DLL is unsupported. The broader DLL-only OADS_* migration remains pending. No server upgrade is needed solely for marker IDs. Existing running installations and AV/security settings are untouched. Frozen mtfix76/52 and all other prior release assets/tags remain unchanged.
Evidence and limits
Source gates cover omitted/zero/max/type/range validation, exact16-digit integers and floating precision boundaries, NaN/infinity, fixed column alignment in both flavors, shared old/new C marker clock/layout, multiple application threads and separate processes appending to one test log. The generated-data remote sequence with markers while fields are pending must remain the same26 wire operations/sizes. Actual linked Harbour tests verify numeric conversion and formatted values, not only return codes. Numeric fixtures use test-only C construction for floating boundaries because Harbour source-literal parsing can itself round a large decimal before the wrapper sees it; no test helper enters the production library.
Cumulative diagnostics, write/error, commit, navigation, auth and all-platform gates remain required. Windows x86 retains1821 executed cases and exactly the known197 failing names/assertion signatures, not a clean full-suite pass. Windows x64 retains binary/package checks, not a native full-unit claim. macOS ARM slice and macOS14 runtime are not independently certified. No universal Harbour/RDD parity, production readiness, real disk-failure recovery or Delhi speed diagnosis is claimed. Owner Vouch relink/runtime and a real Delhi capture remain unconfirmed.
Retained cumulative kit details
OpenADS mtfix77 cumulative test candidate
Includes the paused mtfix74 indexed-key Skip repair and fixture cleanup, plus append-record replacement batching and a matched Harbour RDD error bridge. Timing work is excluded. No live installation is changed.
Replacement boundary
APPEND BLANK remains its own acknowledged operation. On a successfully appended current record with valid generation and locks, the first replacement joins later replacements in one batch. Each explicit dbCommit remains a distinct boundary, including a key-only commit followed by a data commit. Movement, another append, unlock and close drain pending replacements before their next operation. Movement does not add a durable commit or release application locks. Clean commits and clean pending-field drains do not add a request. Existing-row first-field probing remains unchanged.
Own pending field reads use the buffered value before fetching a row. An old append acknowledgement without the required metadata keeps the prior first-field probe behavior. No new wire opcode is added. Server errors from missing columns and twin flushes are checked and returned; partial applied prefixes are not rolled back or automatically retried. A lost acknowledgement invalidates the connection rather than replaying an uncertain write.
Matched library requirement
The kit Harbour library must be rebuilt with patches/harbour/rddads-pending-fields.patch against Harbour4ec2e154ed92757418bc30af571ab90240ab3209. Relink Vouch with the updated librddads.a. A DLL swap alone does not add RDD error checks. New RDD code imports AdsFlushPendingFields; use the matching new DLL and import library. New RDD plus an old DLL is unsupported and must fail for the missing entry, not fall back to a forced commit. No Vouch source change is required.
The additive AdsFlushPendingFields(table) entry drains pending field assignments only: no commit, movement or unlock, and no request when clean. The RDD calls it before Goto's historical invalid-record compatibility path and before a new append, so prior write errors are not mistaken for navigation or ordinary append failures. Ordinary append errors retain the stock Harbour category/subcode/default flags. APPEND BLANK expands to dbAppend(); the command ignores the boolean. The default append-lock handler still sets NetErr() and allows dbAppend() to return false. Other errors follow the existing handler.
Evidence and limits
Local selected C++ and actual Harbour runtime tests pass. Harbour tests exercise successful batches, error boundaries, default append-lock behavior, ordinary append errors against stock baseline, deferred write failure before append, generic Goto5025 compatibility, refresh tails and SQL close callers. SQL close tests inject SQL-success/no-cursor before the actual RDD close path; they do not certify engine SQL execution with a simultaneous close fault. Flush-helper fault tests are synthetic, not a real disk-failure test. Windows and all-platform candidate gates must pass before publication. No universal any-error, all-platform parity, rollback, safe-retry, Vouch-runtime or production-readiness claim.
The x86 full default test gate retains the existing197 failing cases and exact assertion signatures, with no new failures or harness errors. It is not a clean full-suite pass. Linux and macOS retain their configured full ctest gates; Windows x64 retains binary/package checks rather than a native full unit-suite claim. All prior auth, refresh, commit, bottom, diagnostics and mixed-server gates remain. Existing73 releases are frozen. Remote key-Skip repair requires the new server; a new DLL cannot repair an old server's hidden cursor.
OpenADS mtfix77 full cumulative test kit
Pritpal Bedi. Fork bedipritpal...
OpenADS mtfix76 full test kit - Windows x86 + Windows x64 + Linux x64 server + macOS universal
OpenADS mtfix76 full test kit: local application trace markers
Requested and boundary rules reviewed by Pritpal Bedi. Built on his bedipritpal/OpenADS fork of FiveTechSoft/OpenADS, cumulative with the shipped mtfix75 kit. Test release only; no deployment, main merge or upstream submission is implied.
Application API
OAds_TraceMark( "VOUCHER_SAVE_BEGIN" )
// Existing Vouch save code stays unchanged.
OAds_TraceMark( "VOUCHER_SAVE_END" )
Returns .T. only if the local marker row was appended and the file closed successfully. Returns .F. when diagnostics are disabled, the argument is invalid, or the local append fails. Do not use the result to decide whether a save succeeded. A failed append can leave a partial row; do not retry automatically. Use FAILED/CANCELLED labels on those application paths. The application chooses what each boundary encloses, including any restore work.
Markers appear in BOTH full and compact cli_trace.log. Same configured destination, timestamp and plain columns; operation Marker, flag M, blank request-duration column. Details have thread ID, steady-clock microsecond tick and the exact label. The steady origin is initialized at the first marker in this client instance. Subtract matching BEGIN/END tick_us values on the same thread to measure the enclosed application interval. Local logging itself has overhead: zero network trips does not mean zero measurement overhead. Concurrent threads can interleave. These are local observations, not network barriers or server timing.
Only W rows represent completed wire frames. Exclude M rows from wire frame counts and summed dur_us. Marker rows advance the existing previous-row gap column. Existing analysis must account for that rather than treating every row as a request. Labels are application-supplied text, so classify by the row flag, not by finding a keyword inside label text.
The function requires BOTH the existing wire_trace opt-in and the OAds_SetLogging master gate. It never enables logging. No server/connection is required. No wire frame, table lookup, RDD call, pending-field flush, commit, lock/unlock, navigation, cache or last database error change. No protocol or server behavior change; no server upgrade is needed solely for markers.
Labels must be strings of 1..120 bytes, no C0/DEL/C1 control bytes, including embedded NUL, CR, LF or tab. Empty/oversized/invalid input is rejected, not silently truncated. Prefer short ASCII developer labels. Labels are written verbatim: never put customer data, paths, credentials or secrets in them. This is NOT a database-data logging API.
C API: OAdsTraceMark(const UNSIGNED8* label, UNSIGNED32 bytes), length-bearing so embedded NUL is detectable. AE_SUCCESS means written, nonzero means not confirmed written. It deliberately does not replace ACE's last database error. Header and DLL exports are additive. x86 MSVC has cdecl and stdcall entry points; MinGW has its existing cdecl form. Matching build-generated import libraries must include OAdsTraceMark.
The Harbour wrapper stays in today's kit librddads.a, as Pritpal approved for this addition. Relink Vouch using the matching kit wrapper/import library/DLL (or cumulative static archive for static clients). A DLL swap alone cannot add the Harbour symbol to an existing executable. Do not mix the new wrapper with an old DLL. The larger DLL-only OADS_* wrapper migration remains pending and is not part of this kit.
Checks and limits
The source includes fresh-process environment/INI and full/compact marker gates, invalid/binary input and 120-byte boundaries, unwritable destination, concurrent marker rows, stable thread/tick ordering and unchanged last database error. A generated-data remote probe compares the exact 26-frame operation/size sequence with and without four markers, including boundaries while field assignments are pending. Actual linked Harbour checks cover argument types, embedded NUL/control rejection, full/compact and disabled gates without creating a connection.
Cumulative diagnostics, append/error, commit, navigation, auth and platform release gates remain required. Windows x86 retains the known 197 failing unit cases and exact assertion signatures, not a clean full-suite pass. Windows x64 retains binary/package checks, not a native full-unit claim. macOS ARM slice and macOS14 runtime are not independently certified. No universal Harbour/RDD parity, production-readiness, disk-failure recovery or Delhi speed diagnosis is claimed. Current Delhi save timing still needs a real application capture.
Frozen published releases/tags, including mtfix52, remain unchanged. No running server, security policy, AV exclusion or database was changed.
Retained cumulative kit details
OpenADS mtfix76 cumulative test candidate
Includes the paused mtfix74 indexed-key Skip repair and fixture cleanup, plus append-record replacement batching and a matched Harbour RDD error bridge. Timing work is excluded. No live installation is changed.
Replacement boundary
APPEND BLANK remains its own acknowledged operation. On a successfully appended current record with valid generation and locks, the first replacement joins later replacements in one batch. Each explicit dbCommit remains a distinct boundary, including a key-only commit followed by a data commit. Movement, another append, unlock and close drain pending replacements before their next operation. Movement does not add a durable commit or release application locks. Clean commits and clean pending-field drains do not add a request. Existing-row first-field probing remains unchanged.
Own pending field reads use the buffered value before fetching a row. An old append acknowledgement without the required metadata keeps the prior first-field probe behavior. No new wire opcode is added. Server errors from missing columns and twin flushes are checked and returned; partial applied prefixes are not rolled back or automatically retried. A lost acknowledgement invalidates the connection rather than replaying an uncertain write.
Matched library requirement
The kit Harbour library must be rebuilt with patches/harbour/rddads-pending-fields.patch against Harbour4ec2e154ed92757418bc30af571ab90240ab3209. Relink Vouch with the updated librddads.a. A DLL swap alone does not add RDD error checks. New RDD code imports AdsFlushPendingFields; use the matching new DLL and import library. New RDD plus an old DLL is unsupported and must fail for the missing entry, not fall back to a forced commit. No Vouch source change is required.
The additive AdsFlushPendingFields(table) entry drains pending field assignments only: no commit, movement or unlock, and no request when clean. The RDD calls it before Goto's historical invalid-record compatibility path and before a new append, so prior write errors are not mistaken for navigation or ordinary append failures. Ordinary append errors retain the stock Harbour category/subcode/default flags. APPEND BLANK expands to dbAppend(); the command ignores the boolean. The default append-lock handler still sets NetErr() and allows dbAppend() to return false. Other errors follow the existing handler.
Evidence and limits
Local selected C++ and actual Harbour runtime tests pass. Harbour tests exercise successful batches, error boundaries, default append-lock behavior, ordinary append errors against stock baseline, deferred write failure before append, generic Goto5025 compatibility, refresh tails and SQL close callers. SQL close tests inject SQL-success/no-cursor before the actual RDD close path; they do not certify engine SQL execution with a simultaneous close fault. Flush-helper fault tests are synthetic, not a real disk-failure test. Windows and all-platform candidate gates must pass before publication. No universal any-error, all-platform parity, rollback, safe-retry, Vouch-runtime or production-readiness claim.
The x86 full default test gate retains the existing197 failing cases and exact assertion signatures, with no new failures or harness errors. It is not a clean full-suite pass. Linux and macOS retain their configured full ctest gates; Windows x64 retains binary/package checks rather than a native full unit-suite claim. All prior auth, refresh, commit, bottom, diagnostics and mixed-server gates remain. Existing73 releases are frozen. Remote key-Skip repair requires the new server; a new DLL cannot repair an old server's hidden cursor.
OpenADS mtfix76 full cumulative test kit
Pritpal Bedi. Fork bedipritpal/OpenADS from FiveTechSoft/OpenADS.
Frozen73 plus a bounded engine repair for indexed-key edit followed by relative Skip. Successful GoCold/index maintenance marks a lazy per-index re-anchor; Skip re-finds the current physical record under its new key before walking forward/backward. Parked tags retain their own pending state; replacement index objects do not inherit it. Duplicate runs have no new arbitrary cutoff. Failed re-anchor invalidates the cursor and returns the error. Server Skip now checks cursor, ordered-twin and natural-table failures instead of issuing a normal ACK.
AAA to AAZ then Skip(1) must land on BBB, following Harbour DBFCDX GoCold/current-key refresh ordering. Local repair requires the74 DLL; remote repair requires the74 server. Old73 client/new74 server is included in the compatibility gate. New74 client/old72 or73 server retains the old server defect; a client DLL cannot repair that hidden engine cursor. No wire-format change, automatic unlock or forced hard flush. User locks remain held; later explicit commit still handles pending durability. No Vouch/new C edit, count-caller, read-ahead or OPEN-policy repair. Frozen releases remain unchanged.
No extra re-anchor seek is added to indexed append/commit itself. The cost is deferred to relative navigation after relevant key maintenance. Tests check hot and explicit-commit edits, forward/backward, key crossing, duplicate runs above1024, Skip0, scopes, local descending, mu...
OpenADS mtfix75 full test kit - Windows x86 + Windows x64 + Linux x64 server + macOS universal
OpenADS mtfix75 cumulative test candidate
Includes the paused mtfix74 indexed-key Skip repair and fixture cleanup, plus append-record replacement batching and a matched Harbour RDD error bridge. Timing work is excluded. No live installation is changed.
Replacement boundary
APPEND BLANK remains its own acknowledged operation. On a successfully appended current record with valid generation and locks, the first replacement joins later replacements in one batch. Each explicit dbCommit remains a distinct boundary, including a key-only commit followed by a data commit. Movement, another append, unlock and close drain pending replacements before their next operation. Movement does not add a durable commit or release application locks. Clean commits and clean pending-field drains do not add a request. Existing-row first-field probing remains unchanged.
Own pending field reads use the buffered value before fetching a row. An old append acknowledgement without the required metadata keeps the prior first-field probe behavior. No new wire opcode is added. Server errors from missing columns and twin flushes are checked and returned; partial applied prefixes are not rolled back or automatically retried. A lost acknowledgement invalidates the connection rather than replaying an uncertain write.
Matched library requirement
The kit Harbour library must be rebuilt with patches/harbour/rddads-pending-fields.patch against Harbour4ec2e154ed92757418bc30af571ab90240ab3209. Relink Vouch with the updated librddads.a. A DLL swap alone does not add RDD error checks. New RDD code imports AdsFlushPendingFields; use the matching new DLL and import library. New RDD plus an old DLL is unsupported and must fail for the missing entry, not fall back to a forced commit. No Vouch source change is required.
The additive AdsFlushPendingFields(table) entry drains pending field assignments only: no commit, movement or unlock, and no request when clean. The RDD calls it before Goto's historical invalid-record compatibility path and before a new append, so prior write errors are not mistaken for navigation or ordinary append failures. Ordinary append errors retain the stock Harbour category/subcode/default flags. APPEND BLANK expands to dbAppend(); the command ignores the boolean. The default append-lock handler still sets NetErr() and allows dbAppend() to return false. Other errors follow the existing handler.
Evidence and limits
Local selected C++ and actual Harbour runtime tests pass. Harbour tests exercise successful batches, error boundaries, default append-lock behavior, ordinary append errors against stock baseline, deferred write failure before append, generic Goto5025 compatibility, refresh tails and SQL close callers. SQL close tests inject SQL-success/no-cursor before the actual RDD close path; they do not certify engine SQL execution with a simultaneous close fault. Flush-helper fault tests are synthetic, not a real disk-failure test. Windows and all-platform candidate gates must pass before publication. No universal any-error, all-platform parity, rollback, safe-retry, Vouch-runtime or production-readiness claim.
The x86 full default test gate retains the existing197 failing cases and exact assertion signatures, with no new failures or harness errors. It is not a clean full-suite pass. Linux and macOS retain their configured full ctest gates; Windows x64 retains binary/package checks rather than a native full unit-suite claim. All prior auth, refresh, commit, bottom, diagnostics and mixed-server gates remain. Existing73 releases are frozen. Remote key-Skip repair requires the new server; a new DLL cannot repair an old server's hidden cursor.
OpenADS mtfix75 full cumulative test kit
Pritpal Bedi. Fork bedipritpal/OpenADS from FiveTechSoft/OpenADS.
Frozen73 plus a bounded engine repair for indexed-key edit followed by relative Skip. Successful GoCold/index maintenance marks a lazy per-index re-anchor; Skip re-finds the current physical record under its new key before walking forward/backward. Parked tags retain their own pending state; replacement index objects do not inherit it. Duplicate runs have no new arbitrary cutoff. Failed re-anchor invalidates the cursor and returns the error. Server Skip now checks cursor, ordered-twin and natural-table failures instead of issuing a normal ACK.
AAA to AAZ then Skip(1) must land on BBB, following Harbour DBFCDX GoCold/current-key refresh ordering. Local repair requires the75 DLL; remote repair requires the75 server. Old73 client/new75 server is included in the compatibility gate. New75 client/old72 or73 server retains the old server defect; a client DLL cannot repair that hidden engine cursor. No wire-format change, automatic unlock or forced hard flush. User locks remain held; later explicit commit still handles pending durability. No Vouch/new C edit, count-caller, read-ahead or OPEN-policy repair. Frozen releases remain unchanged.
No extra re-anchor seek is added to indexed append/commit itself. The cost is deferred to relative navigation after relevant key maintenance. Tests check hot and explicit-commit edits, forward/backward, key crossing, duplicate runs above1024, Skip0, scopes, local descending, multiple tags, conditional state lifetime, disk bytes, retained locks and injected failures. Remote descending API remains unsupported and is not certified. Conditional membership navigation is not broadly redesigned; lifecycle bookkeeping and physical Goto outside a FOR tag are checked. Existing partial data/index maintenance on failure is not rolled back; an error does not certify a safe retry. GoTop/Seek masked dirty failures and other handlers remain outside this repair. This is not full Harbour parity or production-readiness certification.
Retained71 commit fusion,72 GoBottom metadata and73 caller diagnostics remain cumulative. Diagnostics default OFF. The x86 gate requires1821 executed cases, exactly the existing197 baseline failing names/assertion signatures, all12 new indexed-key Skip cases passing, and zero harness errors. Linux/macOS retain their full configured ctest gates. Windows x64 retains PE/package checks, not a native unit-suite claim. New12-case local matrix passes7707 assertions; combined targeted local runner passes106 cases/25841 assertions. These local checks do not replace all-platform release gates.
Retained72 behavior and limits
Frozen71 plus capability-gated same-landing scoped key-count metadata for an ordinary ordered GoBottom whose internal key-position dependency is cold. One bottom reply instead of bottom plus GetKeyCount in that case. No Vouch speed claim. Existing matched71 commit fusion remains cumulative.
A 16-byte magic/status/count/table-id prefix wraps the otherwise unchanged row/boundary/pair reply only when requested by a capable new client. Successful count is consumed once to complete this GoBottom's last-key-position calculation. It does not seed persistent count caches. Natural order, warm count, existing fused-order and certified pair paths retain their existing behavior. Old peers retain B0 fallback.
No new commit, lock, unlock, first-field, RDD GoCold, on-disk format, Vouch source, new C, read-ahead or OPEN policy change. Ordered count uses the same ABI active order/scope/SET DELETED semantics as the prior internal B0 dependency. Failed optional count is not certified; legacy count path remains. Malformed/missing/wrong-table metadata fails this read without replaying navigation. Existing ignored navigation/fused-count return policies outside this new certification are not repaired or certified.
Explicit count APIs are not rewritten. Baseline71 already has persistent RemoteIndex key-count caches and optional physical-count caching unless OPENADS_FRESH_COUNTS=1. This candidate is not blanket freshness certification. Because the single-use GoBottom completion does not populate those caches, a later scoped count can now require its own request; it is not silently served from this new metadata. Existing empty-scope EOF/BOF distinctions remain and are tested separately, not normalized.
The owner's rule that record movement should return full table state is recorded as a design direction. This candidate supplies only the missing GoBottom count dependency. It does not implement a broad all-movement protocol overhaul or certify all table state/freshness. Production readiness and other open issues remain separate.
Net trips depend on the COMPLETE call sequence: bottom alone2->1; bottom followed by later explicit same-index count2->2(request shifts); bottom plus later explicit table-handle count3->2. The owner's captured final bottom has no later explicit count. No universal net-saving or elapsed-latency claim.
Inherited explicit refresh re-reads the ordered ABI twin used to pack the response and
propagates twin refresh errors. No Skip-freshness B, refill optimization, Vouch
source rewrite, on-disk format change or browse-speed claim.
Added userspace reads measured in a 2200-row/31-byte fixture:65542DBF+1028CDX
bytes per full-block refresh;2674DBF+1028CDX final partial. Not physical disk or
elapsed production latency. Duplicate reads retained for correctness/error safety.
Shared pre-existing relation-child re-seek and stored-descending bottom/EOF gaps
remain outside this repair. No full relation/descending semantics claim.
Source CI including Windows actual Harbour RDDADS/independent DBFCDX writer:
https://github.com/bedipritpal/OpenADS/actions/runs/41083765147
Windows actual Harbour marker REFRESH-PEER-HARBOUR-PASS verified there.
Not proof of Vouch compiled RDDADS/ForceStable chain.
Windows x86 is not a clean unit-suite pass: same197 baseline failing cases with
identical recorded assertion results/sourcefiles required.1821 cases must execute,
zero harness errors; new indexed explicit-refresh regression must pass113 assertions,
prior Tim2e regression must still pass304 assertions, and the retained mtfix68 append-metada...
OpenADS mtfix73 full test kit - Windows x86 + Windows x64 + Linux x64 server + macOS universal
OpenADS mtfix73 full cumulative test kit
Pritpal Bedi. Fork bedipritpal/OpenADS from FiveTechSoft/OpenADS.
Frozen72 plus one fixed-width ACE trigger/reason column in completed client wire rows. Scoped public-entry context, not sticky last-call logging. Examples: AdsWriteRecord/batch+commit, AdsUnlockTable/buffered-sets, AdsGetRecordCount/request, AdsGotoBottom/internal-keycount. The 48-character column follows the W/blank flag; prior leading columns remain in place. Full/compact retain identical operation/size sequences. Blank-flag API summaries show a dash.
Outer ACE API is the trigger. Request is a neutral default dispatch reason, not proof of a direct application call. Batched writes identify the dispatch trigger, NOT the origin of each buffered assignment. Call/thread IDs are process-local log correlation; current nested API is in detail. Nested calls restore context on return/exception. Unknown/uninstrumented or unpropagated cross-thread dispatch is printed unknown with zero IDs, never attributed to a stale previous call. No literal Vouch PRG function/line, RDD callsite, native stack or app-versus-RDD attribution is claimed.
Static API/reason labels and numeric correlation only: no stack walking, new addresses, paths, field arguments, payloads or auth data. Existing diagnostics master remains OFF by default, requires application opt-in, and channel selectors cannot turn the master on. Complete-pair/frame coverage limits and existing masking remain. All 663 entries in ace_exports.cpp are scoped; other entry surfaces are not certified. No zero-overhead or application speed claim. Disabled scopes skip TLS updates/IDs but master/selector checks still cost something; enabled diagnostics add context and longer file rows.
Client diagnostic source only. No server protocol/capability, storage format, Vouch/new C, first-field, commit/flush/lock/unlock, navigation, count-cache, read-ahead or OPEN-policy change. Server kits are rebuilt as the next single cumulative release; server behavior is not redesigned by this column. Frozen72 tag/assets/workflow remain unchanged. Mixed72/73 protocol behavior retains72 GoBottom metadata and71 commit fusion; old71/70 paths remain tested. All prior test, compiler and packaging gates retained. Five new caller-scope tests; x86 expected1802 cases with exactly the same197 baseline failures/signatures and0harnesserrors, not a clean unit-suite claim.
Retained72 behavior and limits
Frozen71 plus capability-gated same-landing scoped key-count metadata for an ordinary ordered GoBottom whose internal key-position dependency is cold. One bottom reply instead of bottom plus GetKeyCount in that case. No Vouch speed claim. Existing matched71 commit fusion remains cumulative.
A 16-byte magic/status/count/table-id prefix wraps the otherwise unchanged row/boundary/pair reply only when requested by a capable new client. Successful count is consumed once to complete this GoBottom's last-key-position calculation. It does not seed persistent count caches. Natural order, warm count, existing fused-order and certified pair paths retain their existing behavior. Old peers retain B0 fallback.
No new commit, lock, unlock, first-field, RDD GoCold, on-disk format, Vouch source, new C, read-ahead or OPEN policy change. Ordered count uses the same ABI active order/scope/SET DELETED semantics as the prior internal B0 dependency. Failed optional count is not certified; legacy count path remains. Malformed/missing/wrong-table metadata fails this read without replaying navigation. Existing ignored navigation/fused-count return policies outside this new certification are not repaired or certified.
Explicit count APIs are not rewritten. Baseline71 already has persistent RemoteIndex key-count caches and optional physical-count caching unless OPENADS_FRESH_COUNTS=1. This candidate is not blanket freshness certification. Because the single-use GoBottom completion does not populate those caches, a later scoped count can now require its own request; it is not silently served from this new metadata. Existing empty-scope EOF/BOF distinctions remain and are tested separately, not normalized.
The owner's rule that record movement should return full table state is recorded as a design direction. This candidate supplies only the missing GoBottom count dependency. It does not implement a broad all-movement protocol overhaul or certify all table state/freshness. Production readiness and other open issues remain separate.
Net trips depend on the COMPLETE call sequence: bottom alone2->1; bottom followed by later explicit same-index count2->2(request shifts); bottom plus later explicit table-handle count3->2. The owner's captured final bottom has no later explicit count. No universal net-saving or elapsed-latency claim.
Inherited explicit refresh re-reads the ordered ABI twin used to pack the response and
propagates twin refresh errors. No Skip-freshness B, refill optimization, Vouch
source rewrite, on-disk format change or browse-speed claim.
Added userspace reads measured in a 2200-row/31-byte fixture:65542DBF+1028CDX
bytes per full-block refresh;2674DBF+1028CDX final partial. Not physical disk or
elapsed production latency. Duplicate reads retained for correctness/error safety.
Shared pre-existing relation-child re-seek and stored-descending bottom/EOF gaps
remain outside this repair. No full relation/descending semantics claim.
Source CI including Windows actual Harbour RDDADS/independent DBFCDX writer:
https://github.com/bedipritpal/OpenADS/actions/runs/41083765147
Windows actual Harbour marker REFRESH-PEER-HARBOUR-PASS verified there.
Not proof of Vouch compiled RDDADS/ForceStable chain.
Windows x86 is not a clean unit-suite pass: same197 baseline failing cases with
identical recorded assertion results/sourcefiles required.1802 cases must execute,
zero harness errors; new indexed explicit-refresh regression must pass113 assertions,
prior Tim2e regression must still pass304 assertions, and the retained mtfix68 append-metadata suite must pass181 assertions in 6 cases.
All prior cumulative fixes/toolchains and auth/HRB/diagnostics gates retained.
Main/upstream and running installations untouched. No automatic deployment.
Client diagnostics default OFF. Explicit opt-in remains required.
2a customer-confirmed on reported setup;2b current fix awaits customer confirmation;
2c C8 repro and2d round-trip work remain open. No universal flashing claim.
macOS uses Intelmac15/Xcode16.4, universal slices, minOS14.0 metadata and full tests.
ARM slice and macOS14 runtime not independently tested; targetmetadata is not proof.
Windowsx64 has PE/package checks, not a nativeGCC unit-suite pass.
All four platform kits together; SHA256 sidecars/manifests and source pins.
Windowsx86 Qt4.9.2/GCC10.2 and ownerbinutils2.35.1 unchanged.
Public mock HRB only, not realcustomer auth. Test-only, no automatic deployment.
Use matched client/server for the mtfix64 repair layer. mtfix68 added append metadata; mtfix69/70 were client-only diagnostics. mtfix71 commit fusion retained; mtfix72 GoBottom server capability retained; mtfix73 adds client-only caller diagnostics; old peers retain their previous path.
OpenADS mtfix72 full test kit - Windows x86 + Windows x64 + Linux x64 server + macOS universal
OpenADS mtfix72 full cumulative test kit
Pritpal Bedi. Fork bedipritpal/OpenADS from FiveTechSoft/OpenADS.
Frozen71 plus capability-gated same-landing scoped key-count metadata for an ordinary ordered GoBottom whose internal key-position dependency is cold. One bottom reply instead of bottom plus GetKeyCount in that case. No Vouch speed claim. Existing matched71 commit fusion remains cumulative.
A 16-byte magic/status/count/table-id prefix wraps the otherwise unchanged row/boundary/pair reply only when requested by a capable new client. Successful count is consumed once to complete this GoBottom's last-key-position calculation. It does not seed persistent count caches. Natural order, warm count, existing fused-order and certified pair paths retain their existing behavior. Old peers retain B0 fallback.
No new commit, lock, unlock, first-field, RDD GoCold, on-disk format, Vouch source, new C, read-ahead or OPEN policy change. Ordered count uses the same ABI active order/scope/SET DELETED semantics as the prior internal B0 dependency. Failed optional count is not certified; legacy count path remains. Malformed/missing/wrong-table metadata fails this read without replaying navigation. Existing ignored navigation/fused-count return policies outside this new certification are not repaired or certified.
Explicit count APIs are not rewritten. Baseline71 already has persistent RemoteIndex key-count caches and optional physical-count caching unless OPENADS_FRESH_COUNTS=1. This candidate is not blanket freshness certification. Because the single-use GoBottom completion does not populate those caches, a later scoped count can now require its own request; it is not silently served from this new metadata. Existing empty-scope EOF/BOF distinctions remain and are tested separately, not normalized.
The owner's rule that record movement should return full table state is recorded as a design direction. This candidate supplies only the missing GoBottom count dependency. It does not implement a broad all-movement protocol overhaul or certify all table state/freshness. Production readiness and other open issues remain separate.
Net trips depend on the COMPLETE call sequence: bottom alone2->1; bottom followed by later explicit same-index count2->2(request shifts); bottom plus later explicit table-handle count3->2. The owner's captured final bottom has no later explicit count. No universal net-saving or elapsed-latency claim.
Inherited explicit refresh re-reads the ordered ABI twin used to pack the response and
propagates twin refresh errors. No Skip-freshness B, refill optimization, Vouch
source rewrite, on-disk format change or browse-speed claim.
Added userspace reads measured in a 2200-row/31-byte fixture:65542DBF+1028CDX
bytes per full-block refresh;2674DBF+1028CDX final partial. Not physical disk or
elapsed production latency. Duplicate reads retained for correctness/error safety.
Shared pre-existing relation-child re-seek and stored-descending bottom/EOF gaps
remain outside this repair. No full relation/descending semantics claim.
Source CI including Windows actual Harbour RDDADS/independent DBFCDX writer:
https://github.com/bedipritpal/OpenADS/actions/runs/41083765147
Windows actual Harbour marker REFRESH-PEER-HARBOUR-PASS verified there.
Not proof of Vouch compiled RDDADS/ForceStable chain.
Windows x86 is not a clean unit-suite pass: same197 baseline failing cases with
identical recorded assertion results/sourcefiles required.1797 cases must execute,
zero harness errors; new indexed explicit-refresh regression must pass113 assertions,
prior Tim2e regression must still pass304 assertions, and the retained mtfix68 append-metadata suite must pass181 assertions in 6 cases.
All prior cumulative fixes/toolchains and auth/HRB/diagnostics gates retained.
Main/upstream and running installations untouched. No automatic deployment.
Client diagnostics default OFF. Explicit opt-in remains required.
2a customer-confirmed on reported setup;2b current fix awaits customer confirmation;
2c C8 repro and2d round-trip work remain open. No universal flashing claim.
macOS uses Intelmac15/Xcode16.4, universal slices, minOS14.0 metadata and full tests.
ARM slice and macOS14 runtime not independently tested; targetmetadata is not proof.
Windowsx64 has PE/package checks, not a nativeGCC unit-suite pass.
All four platform kits together; SHA256 sidecars/manifests and source pins.
Windowsx86 Qt4.9.2/GCC10.2 and ownerbinutils2.35.1 unchanged.
Public mock HRB only, not realcustomer auth. Test-only, no automatic deployment.
Use matched client/server for the mtfix64 repair layer. mtfix68 added append metadata; mtfix69/70 were client-only diagnostics. mtfix71 commit fusion retained; mtfix72 requires its new server capability for GoBottom metadata; old peers retain their previous path.
OpenADS mtfix71 full test kit - Windows x86 + Windows x64 + Linux x64 server + macOS universal
OpenADS mtfix71 full cumulative test kit
Pritpal Bedi. Fork bedipritpal/OpenADS from FiveTechSoft/OpenADS.
Cumulative mtfix71 = frozen mtfix70 plus capability-gated fusion of remaining field writes with their existing AdsWriteRecord commit boundary. First-field behavior and every explicit commit remain intact, including a key-only commit then a whole-record commit. One round trip saved per qualifying multi-field commit, not a measured Vouch speed claim. New client plus new server required for this saving; older combinations retain SetFields then FlushTable. No Vouch source change, new C code, on-disk format change, lock or count policy change.
Failed fields stop the ordered batch without commit; applied prefixes are not rolled back. Missing/malformed/lost commit ACK returns an error and never replays writes. Existing per-setter buffering limitations and ignored twin-flush result are unchanged, not certified by this candidate.
Product source: 0c221f8.
Inherited explicit refresh re-reads the ordered ABI twin used to pack the response and
propagates twin refresh errors. No Skip-freshness B, refill optimization, Vouch
source rewrite, on-disk format change or browse-speed claim.
Added userspace reads measured in a 2200-row/31-byte fixture:65542DBF+1028CDX
bytes per full-block refresh;2674DBF+1028CDX final partial. Not physical disk or
elapsed production latency. Duplicate reads retained for correctness/error safety.
Shared pre-existing relation-child re-seek and stored-descending bottom/EOF gaps
remain outside this repair. No full relation/descending semantics claim.
Source CI including Windows actual Harbour RDDADS/independent DBFCDX writer:
https://github.com/bedipritpal/OpenADS/actions/runs/41083765147
Windows actual Harbour marker REFRESH-PEER-HARBOUR-PASS verified there.
Not proof of Vouch compiled RDDADS/ForceStable chain.
Windows x86 is not a clean unit-suite pass: same197 baseline failing cases with
identical recorded assertion results/sourcefiles required.1793 cases must execute,
zero harness errors; new indexed explicit-refresh regression must pass113 assertions,
prior Tim2e regression must still pass304 assertions, and the retained mtfix68 append-metadata suite must pass181 assertions in 6 cases.
All prior cumulative fixes/toolchains and auth/HRB/diagnostics gates retained.
Main/upstream and running installations untouched. No automatic deployment.
Client diagnostics default OFF. Explicit opt-in remains required.
2a customer-confirmed on reported setup;2b current fix awaits customer confirmation;
2c C8 repro and2d round-trip work remain open. No universal flashing claim.
macOS uses Intelmac15/Xcode16.4, universal slices, minOS14.0 metadata and full tests.
ARM slice and macOS14 runtime not independently tested; targetmetadata is not proof.
Windowsx64 has PE/package checks, not a nativeGCC unit-suite pass.
All four platform kits together; SHA256 sidecars/manifests and source pins.
Windowsx86 Qt4.9.2/GCC10.2 and ownerbinutils2.35.1 unchanged.
Public mock HRB only, not realcustomer auth. Test-only, no automatic deployment.
Use matched client/server for the mtfix64 repair layer. mtfix68 added append metadata; mtfix69/70 were client-only diagnostics. mtfix71 requires its new server capability for commit fusion; old peers retain their previous path.
OpenADS mtfix70 full test kit - Windows x86 + Windows x64 + Linux x64 server + macOS universal
OpenADS mtfix70 full cumulative test kit
Pritpal Bedi. Fork bedipritpal/OpenADS from FiveTechSoft/OpenADS.
Cumulative mtfix70 = frozen mtfix69 plus client-only diagnostic correction: compact mode contains only actual completed frame rows, W is exclusive to those rows, all other flags are blank, and columns are plain aligned with two-space separators and two bare millisecond columns: wire-call duration then preceding printed-row interval; contiguous dot key/value pairs. No server/protocol change; existing mtfix68 server stays compatible.
Product source: 3af2479.
Explicit refresh now re-reads the ordered ABI twin used to pack the response and
propagates twin refresh errors. No Skip-freshness B, refill optimization, Vouch
source rewrite, database/wire-format change or browse-speed claim.
Added userspace reads measured in a 2200-row/31-byte fixture:65542DBF+1028CDX
bytes per full-block refresh;2674DBF+1028CDX final partial. Not physical disk or
elapsed production latency. Duplicate reads retained for correctness/error safety.
Shared pre-existing relation-child re-seek and stored-descending bottom/EOF gaps
remain outside this repair. No full relation/descending semantics claim.
Source CI including Windows actual Harbour RDDADS/independent DBFCDX writer:
https://github.com/bedipritpal/OpenADS/actions/runs/41083765147
Windows actual Harbour marker REFRESH-PEER-HARBOUR-PASS verified there.
Not proof of Vouch compiled RDDADS/ForceStable chain.
Windows x86 is not a clean unit-suite pass: same197 baseline failing cases with
identical recorded assertion results/sourcefiles required.1789 cases must execute,
zero harness errors; new indexed explicit-refresh regression must pass113 assertions,
prior Tim2e regression must still pass304 assertions, and the retained mtfix68 append-metadata suite must pass181 assertions in 6 cases.
All prior cumulative fixes/toolchains and auth/HRB/diagnostics gates retained.
Main/upstream and running installations untouched. No automatic deployment.
Client diagnostics default OFF. Explicit opt-in remains required.
2a customer-confirmed on reported setup;2b current fix awaits customer confirmation;
2c C8 repro and2d round-trip work remain open. No universal flashing claim.
macOS uses Intelmac15/Xcode16.4, universal slices, minOS14.0 metadata and full tests.
ARM slice and macOS14 runtime not independently tested; targetmetadata is not proof.
Windowsx64 has PE/package checks, not a nativeGCC unit-suite pass.
All four platform kits together; SHA256 sidecars/manifests and source pins.
Windowsx86 Qt4.9.2/GCC10.2 and ownerbinutils2.35.1 unchanged.
Public mock HRB only, not realcustomer auth. Test-only, no automatic deployment.
Use matched client/server for the mtfix64 repair layer. mtfix68 added append metadata; mtfix69/70 change client trace only and needs no server update from mtfix68.
OpenADS mtfix69 full test kit - client trace formatting
Cumulative mtfix69 full test kit, based on frozen mtfix68. Client-only diagnostic correction:
- Compact trace contains only completed wire-frame rows.
- W is exclusive to actual frame rows. API/local/context rows have a blank flag in full trace.
- Plain fixed-width columns with two-space separators, no decorative column brackets.
- Elapsed column is a bare millisecond number. dur_us remains microseconds.
- Existing masking, diagnostic master/default-OFF and frame-coverage limits remain unchanged.
Product source: 4f1e15c.
Workflow head: 361b252.
Build/test evidence: https://github.com/bedipritpal/OpenADS/actions/runs/42325445711
All four platform jobs passed. The final automated publishing step failed with GitHub403; these are the unchanged successful-job artifacts, published separately after SHA verification.
Native x86 gate: 1789 cases executed, same197 baseline failing cases/signatures, zero additional failures/harness errors. Retained explicit-refresh113, Tim2e304 and append-metadata181 assertions in6 cases passed. Fresh-process diagnostics contract passed, full/compact15 identical covered frames including Seek for environment/INI/both. No clean x86 full-suite claim.
Linux full tests and macOS Intel full tests passed. macOS ARM slice/minOS metadata is not independent ARM/macOS14 runtime proof. Windowsx64 has PE/package checks, not a native GCC unit-suite pass.
No server/protocol/data/Vouch behavior change. Existing mtfix68 server is compatible; no server update needed for this correction. Exact x86 runtime member: mtfix69-full/bin/openace32.dll, copy beside VouchADS.exe without renaming; no relink. No automatic deployment.
All prior cumulative fixes/toolchains, auth/HRB gates and known limitations retained. TimC8 actual bundle remains unresolved; no universal flashing/concurrency guarantee. This release does not implement new order deferral, open hints, mutation fusions or boundary-call changes.
OpenADS mtfix68 full test kit - Windows x86 + Windows x64 + Linux x64 server + macOS universal
OpenADS mtfix68 full cumulative test kit
Pritpal Bedi. Fork bedipritpal/OpenADS from FiveTechSoft/OpenADS.
Cumulative mtfix68 = frozen mtfix67 plus AppendBlank ack metadata trailer (the append reply carries the new record number and lock-held state: AdsRecNo and the follow-up record lock pay no round trip; the legacy two-trip fallback is kept for peers without the capability).
Product source: 02e840e.
Explicit refresh now re-reads the ordered ABI twin used to pack the response and
propagates twin refresh errors. No Skip-freshness B, refill optimization, Vouch
source rewrite, database/wire-format change or browse-speed claim.
Added userspace reads measured in a 2200-row/31-byte fixture:65542DBF+1028CDX
bytes per full-block refresh;2674DBF+1028CDX final partial. Not physical disk or
elapsed production latency. Duplicate reads retained for correctness/error safety.
Shared pre-existing relation-child re-seek and stored-descending bottom/EOF gaps
remain outside this repair. No full relation/descending semantics claim.
Source CI including Windows actual Harbour RDDADS/independent DBFCDX writer:
https://github.com/bedipritpal/OpenADS/actions/runs/41083765147
Windows actual Harbour marker REFRESH-PEER-HARBOUR-PASS verified there.
Not proof of Vouch compiled RDDADS/ForceStable chain.
Windows x86 is not a clean unit-suite pass: same197 baseline failing cases with
identical recorded assertion results/sourcefiles required.1789 cases must execute,
zero harness errors; new indexed explicit-refresh regression must pass113 assertions,
prior Tim2e regression must still pass304 assertions, and the new mtfix68 append-metadata suite must pass181 assertions in 6 cases.
All prior cumulative fixes/toolchains and auth/HRB/diagnostics gates retained.
Main/upstream and running installations untouched. No automatic deployment.
Client diagnostics default OFF. Explicit opt-in remains required.
2a customer-confirmed on reported setup;2b current fix awaits customer confirmation;
2c C8 repro and2d round-trip work remain open. No universal flashing claim.
macOS uses Intelmac15/Xcode16.4, universal slices, minOS14.0 metadata and full tests.
ARM slice and macOS14 runtime not independently tested; targetmetadata is not proof.
Windowsx64 has PE/package checks, not a nativeGCC unit-suite pass.
All four platform kits together; SHA256 sidecars/manifests and source pins.
Windowsx86 Qt4.9.2/GCC10.2 and ownerbinutils2.35.1 unchanged.
Public mock HRB only, not realcustomer auth. Test-only, no automatic deployment.
Use matched client/server for the mtfix64 repair layer. mtfix65/66/67 were client-side only; mtfix68 changes the server - a new client on an old server keeps mtfix67 behavior, and the append savings need the included server update.