Skip to content

Upstream scenario ledger

The scenario ledger is an initial inventory for #437, under the public-parity tracker. It is not a functional-parity certificate or a Python 2 compatibility promise.

Accounting boundary

Source: CUBRID/cubrid-python at e75ec36. The inventory retains all 450 raw test-prefixed function declarations:

Source folder Raw declarations
tests/ 68
tests2/ 198
tests3/ 184

This includes the legacy function named test_. Path, class, function and source line identify each declaration; eight separately named assertion subcases bring the initial ledger to 458 rows. These are accounting counts, not unique behavioral scenarios. Subcase assessment remains incomplete, as do helper/setup and top-level script assertions. Do not divide local parametrized tests by these declarations to advertise a parity percentage.

Legacy declarations remain in the ledger. duplicate_candidate_of is a name-only review hint, pointing to a provisional newer source declaration; neither the hint nor its target establishes assertion equivalence or a canonical unique-scenario count. No declaration is removed because it looks duplicated. Each duplicate_candidate row must link to another declaration in this ledger; all other classifications leave duplicate_candidate_of empty. Each segment in a pipe-separated link must name a present declaration, never an assertion subcase; empty segments are invalid.

Identifiers and independently paraphrased expectations reference upstream; no upstream test bodies are imported or copied. Keep the source acknowledgement and unresolved test-file licensing terms. Confirm applicable terms before any verbatim source reuse.

Mapping is separate from execution

classification has these meanings:

Value Meaning
unknown Assertions/subcases require assessment.
duplicate_candidate A name matches a legacy declaration; behavior is still unassessed.
related Local coverage exists, but matching assertions/API/setup have not been established.
assertion_equivalent Only the named expectation matches a reviewed local assertion.
unsupported A reviewed required capability is absent and remains functional backlog.

local_nodes is reserved for explicit assertion-subcase rows with equivalent mappings; related_nodes is not counted as equivalent. local_revision pins the inspected local source. Every row has an owner/family, expected behavior or explicit unknown, and a gap reason/issue. #437 delivers this seed inventory; closing it does not complete unassessed declarations or candidate aliases. Ongoing family assessment remains under the open parent #396 or the named capability follow-ups; #437 is retained as delivery provenance. Unsupported scenarios are not exclusions from parity work.

The initial review references the 41 collected local SQL/type/data nodes already merged at 7e0aad8fe83a37f324c1c9efea0ff68de15680f2. Only eight exact assertion subcases map to seven local nodes: selected IDs/counts, identical ENUM ordinal pairs, and the two trigger result rows. Parent declarations remain related rather than declaring their entire fixture/API behavior equivalent. In particular:

  • INDEX joins/subselects assert 4 locally versus 5 upstream.
  • PARTITION schemas/payloads and padded CHAR assertions differ.
  • ENUM update datasets, affected counts and extra metadata checks differ.
  • Collection literal/decode tests do not implement prepared collection binding (#440), and official string-valued containers differ (#438).
  • LOB literal round-trips use different payloads and do not establish official handle bind/fetch (#441), seek (#442) or file import/export (#443) equivalence.

All initial evidence_status values are not_run: this change inspects assertions and collects node IDs but does not execute either driver's live contracts. Mapping, test collection and a skipped integration test are not passing evidence.

For a later execution observation, record verification_commit, server version, Python version, mode, result and an immutable CI/JUnit or retained artifact reference. Use observed for honest failed or explained-skipped results; retain the gap and never relabel them as passes. Non-skipped results must leave skip_reason empty. verified_pass requires an equivalent assertion mapping, a passing result and complete identities. One observation does not certify all servers/modes. Existing lane/JUnit mechanisms supply runtime evidence; #446 tracks that work.

Check and maintain

python -m pytest tests/test_upstream_scenario_ledger.py

The focused check uses the existing pytest collection mechanism without a server to reject broken node IDs, duplicate source IDs, malformed candidate links, missing ownership/gap reasons, unsupported/failed pass claims and unexplained skips. Synthetic validator inputs test those rejection rules; they are not stored as driver execution evidence.

When assessing another declaration, preserve its source ID. Keep candidate links only while its classification is duplicate_candidate; clear them if that classification changes. Add explicit assertion subcases where necessary, and compare fixtures, arguments, types and exact expected values before supplying local_nodes. Keep execution fields independent. This is test-accounting maintenance only: no driver behavior, support policy, compatibility facade, CI scheduler or new dependency changes.