|
| 1 | +# Track B Cluster B — Codex CLI Round 16 (2026-05-19) |
| 2 | + |
| 3 | +**Status:** Complete. Verdict: **NEEDS-FIXES → 2/3 [BUG]s fixed, |
| 4 | +1 documented → GO for v2.0.0-rc3**. |
| 5 | + |
| 6 | +**Reviewer:** Codex CLI 0.128.0 (`codex exec`). |
| 7 | +**Subject:** Track B Cluster B (commits `2d6a820e3` + `73a640a80`) — |
| 8 | +QSAR + STRUCTURE restore + MOLMEC AMBER/MMFF94 + SCORING |
| 9 | +COMPONENTS/FUNCTIONS + SOLVATION + DOCKING + remaining FORMAT. |
| 10 | +Cluster B brought CORE_ONLY ctest from 174/174 (rc2) to 279/279 (+105). |
| 11 | + |
| 12 | +--- |
| 13 | + |
| 14 | +## Verdict (Codex, verbatim) |
| 15 | + |
| 16 | +> Final: NEEDS-FIXES |
| 17 | +> |
| 18 | +> Minimum rc3 blockers: fix SmilesParser adoption order, restore the |
| 19 | +> three missing CORE_ONLY tests into `BALL_STRUCTURE_TESTS`, and either |
| 20 | +> implement bond-property JSON persistence or explicitly downgrade |
| 21 | +> the K0.6 persistence claim before tagging. |
| 22 | +
|
| 23 | +## Probe answers |
| 24 | + |
| 25 | +| # | Probe | Verdict | Status | |
| 26 | +|---|---|---|---| |
| 27 | +| C-B1 | SmilesParser_test failure root cause | [BUG] — K0 adoption-order break in public parser, not a harmless WILL_FAIL | **Fixed** (build off-system, insert populated) | |
| 28 | +| C-B2 | scoringComponent.C un-ifdef'd back-transform | OK with caveat | — | |
| 29 | +| C-B3 | scoringFunction.C un-ifdef'd SideChainOptimizer | OK | — | |
| 30 | +| C-B4 | Test dedupe silently lost 3 CORE_ONLY tests | [BUG] — FragmentDB/DefaultProcessors/NormalizeNamesProcessor missing | **Fixed** (added to BALL_STRUCTURE_TESTS) | |
| 31 | +| C-B5 | AssignBondOrderProcessor_test2 quarantine gate | OK | — | |
| 32 | +| C-B6 | Lock ordering / thread-safety regressions | OK; residual Bond::setOrder data race documented | — | |
| 33 | +| C-B7 | Bond-property JSON persistence | [BUG] — MMFF94/HBond bond annotations don't round-trip | **Documented** (v2.1 backlog V21-BOND-PROPERTY-JSON) | |
| 34 | +| C-B8 | sizeof(Atom)/sizeof(Bond) unchanged | OK — Sizeof_test still pins 360 B / 288 B | — | |
| 35 | +| C-B9 | Ship rc3 with SmilesParser WILL_FAIL? | [BUG] No — fix before tagging | **Fixed** via C-B1 | |
| 36 | + |
| 37 | +## Fixes applied this commit |
| 38 | + |
| 39 | +### C-B1 fix — SmilesParser adoption order |
| 40 | + |
| 41 | +`source/STRUCTURE/smilesParser.C` line 158-163: |
| 42 | + |
| 43 | +Pre-fix: |
| 44 | +```cpp |
| 45 | +Molecule* molecule = new Molecule; |
| 46 | +system_.insert(*molecule); // empty molecule into system FIRST |
| 47 | +for (atom : all_atoms_) molecule->insert(*atom); // single-atom adopt rejected |
| 48 | + // by canAdopt — partners in orphan |
| 49 | +``` |
| 50 | +
|
| 51 | +Post-fix: |
| 52 | +```cpp |
| 53 | +Molecule* molecule = new Molecule; |
| 54 | +for (atom : all_atoms_) molecule->insert(*atom); // off-system: no adopt |
| 55 | +system_.insert(*molecule); // triggers adoptSubtree |
| 56 | + // which migrates bonded atoms |
| 57 | + // in a single batched pass |
| 58 | +``` |
| 59 | + |
| 60 | +SmilesParser_test WILL_FAIL quarantine removed in test/CMakeLists.txt. |
| 61 | + |
| 62 | +### C-B4 fix — Restore 3 CORE_ONLY tests into BALL_STRUCTURE_TESTS |
| 63 | + |
| 64 | +`test/cmake/BALLTestExecutables.cmake`: added FragmentDB_test, |
| 65 | +DefaultProcessors_test, NormalizeNamesProcessor_test to |
| 66 | +BALL_STRUCTURE_TESTS. They had been listed only in BALL_KERNEL_TESTS, |
| 67 | +so when the CB-3 dedupe removed them from BALL_CORE_KERNEL_TESTS the |
| 68 | +CORE_ONLY build silently dropped them. Net: +3 tests. |
| 69 | + |
| 70 | +### C-B7 — Bond-property JSON gap documented (v2.1) |
| 71 | + |
| 72 | +`.planning/RELEASE-NOTES-v2.0.md`: new "Known gaps" subsection |
| 73 | +explicitly stating that Bond's `PropertyManager` bag is NOT |
| 74 | +serialised in K0.6 JSON. Affected: MMFF94 bond-type properties |
| 75 | +(MMFF94SBMB, MMFF94RBL), VIRTUAL__BOND markers, HBondProcessor |
| 76 | +annotations. Most workloads don't persist bond properties (they're |
| 77 | +ephemeral during force-field setup), so shipping rc3 with the gap |
| 78 | +documented is acceptable. |
| 79 | + |
| 80 | +V21-BOND-PROPERTY-JSON filed as v2.1 backlog item. Implementation |
| 81 | +needs: writer exposes `bond_back_ptr_[i]` to find Bond handle, |
| 82 | +serialises its PropertyManager bag inline with the bond record; |
| 83 | +reader finds the Bond handle after restore (Bond is heap-owned by |
| 84 | +the AtomContainer hierarchy, not in the store). |
| 85 | + |
| 86 | +## Verification |
| 87 | + |
| 88 | +- CORE_ONLY ctest: **282/282 PASS** (was 279 at Cluster B close; |
| 89 | + +3 from C-B4 restoration; +0 from C-B1 since SmilesParser_test |
| 90 | + was already counted but WILL_FAIL'd; net +3). |
| 91 | +- MoleculeStore_test 100-run stress: 0/100 fails. |
| 92 | +- Heap-System repro: exit 0. |
| 93 | +- 0 WILL_FAIL tests in CORE_ONLY mode. 0 disabled tests. |
| 94 | + |
| 95 | +## v2.0.0-rc3 readiness |
| 96 | + |
| 97 | +All R16 blocker items are either fixed (C-B1, C-B4) or explicitly |
| 98 | +documented with v2.1 backlog (C-B7). Cluster B closure is clean. |
| 99 | + |
| 100 | +**Verdict: GO for v2.0.0-rc3 tag.** |
0 commit comments