Skip to main content
Version: 3.0.1

Known Issues and Behavior Differences

Version: v3.0.1 Status: Normative (text), Illustrative (diagrams only) Scope: Tracks ALL known discrepancies between documented requirements and actual implementation behavior, including requirements violations, implementation bugs, documentation errors, and test infrastructure limitations Domain: KNOWN-ISSUES


Statement

This is the single authoritative registry of known issues for the project, consolidating findings from Pass C code review (KI-001, KI-002) and STD reconciliation testing (KI-003 through KI-012, TI-001).

Each entry links to affected requirements, test references, and resolution options, ensuring traceability between documented requirements and delivered functionality. TI-002 and TI-003 have been resolved and moved to Appendix B.


Issue Lifecycle Overview (Illustrative)

This diagram illustrates the issue lifecycle. It does not specify specific workflows, tooling, or approval processes.


Definitions

TermDefinition
Known IssueA documented discrepancy between SRS requirements and implemented behavior
SeverityImpact level: Low (cosmetic/minor), Medium (functional impact), High (critical functionality)
Gap IDReference identifier linking to the gap analysis register
Intentional DeviationA deliberate implementation decision that differs from the original requirement
Test Infrastructure IssueA limitation that prevents test execution but does not affect production behavior

Active Issues -- Requirements Violations

KI-001: Display Name Uniqueness Not Enforced

AttributeValue
IDKI-001
SeverityLow
StatusOpen
RequirementREQ-USERSET-002
DiscoveredPass C Code Review (2026-01-19)

Actual Behavior: Code validates format only (nullable|max:40), not uniqueness. Multiple users can have the same display name.

Impact: Duplicate display names possible, may cause confusion in user tagging or comments.

Affected Files: code/app/Http/Requests/UpdateAuthUserRequest.php

Resolution Options: (1) Add unique:users,display_name validation rule, or (2) update SRS to clarify uniqueness is not required.


KI-002: S3 Structure Toggle Migrates Files

AttributeValue
IDKI-002
SeverityMedium
StatusOpen - Intentional
RequirementREQ-SITE-002 AC-05
DiscoveredPass C Code Review (2026-01-19)

Actual Behavior: Code DOES migrate files when preserve_s3_structure_for_first_site toggle changes -- Storage::move() relocates Runs/ and LIMS_Reports/ between site folder and root. SRS states "Changing the toggle shall not migrate existing files."

Impact: External integrations expecting files at original S3 paths may break. Lambda triggers are updated by the code.

Affected Files: code/app/Actions/Sites/UpdatePreserveS3StructureForFirstSiteAction.php

Resolution Options: (1) Remove Storage::move() calls, (2) update REQ-SITE-002 AC-05 to state files ARE migrated, or (3) add config option to control migration behavior.


KI-003: NOTTSQM CF=0 Treated as No Multiplier

AttributeValue
IDKI-003
SeverityLow
StatusOpen
RequirementREQ-RULES-NOTTSQM-001
DiscoveredSTD Reconciliation (2026-02-03)

Actual Behavior: When concentration_factor = 0, the system returns the base quantity (100) instead of multiplying by zero. CF=0 is treated as "no multiplier" (equivalent to CF=1 or null).

Impact: Edge case only. Whether this is a bug or intentional depends on business requirements -- zero CF may mean "not configured."

Test Reference: BT-9201, TV-NOTTSQM-001-004 (test expects actual behavior: 100).


KI-004: NOTTSQM Negative CF Causes MySQL Overflow

AttributeValue
IDKI-004
SeverityLow
StatusOpen
RequirementREQ-RULES-NOTTSQM-001
DiscoveredSTD Reconciliation (2026-02-03)

Actual Behavior: When concentration_factor = -1, computed quantity (-100) triggers SQLSTATE[22003]: Numeric value out of range on the unsigned DECIMAL quantity column. Entire run upload fails.

Impact: 1 KCI scenario. Run processing crashes on negative CF values.

Test Reference: BT-9201, TV-NOTTSQM-001-008 tagged @KNOWN_CODE_ISSUE.


KI-005: MIXMISS Cross-Run Resolution Partially Fixed

AttributeValue
IDKI-005
SeverityMedium
StatusOpen (partially fixed in v3.0.1)
RequirementREQ-RULES-MIXMISS-003 (allow_other_runs=true)
DiscoveredSTD Reconciliation (2026-02-06)

Actual Behavior: When allow_other_runs=true, the MIXMISS rule should resolve missing-mix errors by finding the mix in another run. In v3.0.0-beta.31, cross-run resolution caused an indefinite hang. In v3.0.1, the hang is fixed (cross-run association guard commit a7ecd68), but the resolution logic itself still does not clear the "Mixes are missing from the run" status.

Impact: 10 KCI scenarios. Cross-run mix resolution feature is partially fixed -- no longer hangs, but resolution status is not updated.

Test Reference: BT-9515 TV-MIXMISS-001-019, TV-MIXMISS-003-004; BT-9577, BT-9639, BT-9641 (additional KCI).


KI-006: REPEATSAMP Hardcoded Threshold Ignores Config

AttributeValue
IDKI-006
SeverityLow
StatusOpen
RequirementREQ-RULES-REPEATSAMP-001
DiscoveredSTD Reconciliation (2026-02-08)

Actual Behavior: WrepRule.php line 58 hardcodes the WREP log quant threshold at 0.5. The config parameter wrep_log_quant_threshold is silently ignored.

Impact: 3 KCI scenarios. Rule functions correctly with the hardcoded value; custom thresholds have no effect.

Affected Files: code/app/Analyzer/Rules/WrepRule.php (line 58)

Test Reference: BT-9533 TV-REPEATSAMP-G-002, BT-9601 TV-REPEATSAMP-001-011, TV-REPEATSAMP-001-012 (all tagged @KNOWN_CODE_ISSUE).


KI-007: INHQUANT Null IC Observation Guard Makes TVs Unreachable

AttributeValue
IDKI-007
SeverityMedium
StatusOpen
RequirementREQ-RULES-INHQUANT-001 (TV-001-017, TV-001-018)
DiscoveredSTD Reconciliation (2026-02-08)

Actual Behavior: (1) No-IC-observation case: well never reaches PICQUANT because FILEIMPORT fires "Mix tag is missing" first -- the skip condition is unreachable. (2) Null IC CT case: PicquantSerumRule lacks explicit null guard, proceeds through inhibition path setting ICQUANT_INHN instead of skipping.

Impact: 2 KCI scenarios. Tests pass documenting actual behavior — wells get ICQUANT_INHN instead of skip.

Affected Files: code/app/Analyzer/Rules/PicquantRule.php (line 45-48), PicquantSerumRule.php (line 45)

Test Reference: BT-9547 TV-INHQUANT-001-017, TV-INHQUANT-001-018 tagged @KNOWN_CODE_ISSUE.


KI-008: ADJ Null Contaminating Threshold Not Validated

AttributeValue
IDKI-008
SeverityLow
StatusOpen
RequirementREQ-RULES-ADJ-001 (config import validation)
DiscoveredSTD Reconciliation (2026-02-17)

Actual Behavior: ContaminationValueValidator checks potential_contaminated for null but has NO equivalent check for potential_contaminating. When contaminating is null, validation passes but DB insert crashes with integrity constraint violation.

Impact: 1 KCI scenario (BT-9555). Config import crashes on blank potential_contaminating values.

Affected Files: code/app/Actions/Adjacents/ImportSupport/Validate/Validators/ContaminationValueValidator.php

Test Reference: BT-9555 TV-ADJ-006-002 tagged @KNOWN_CODE_ISSUE.


KI-009: REANALYZE EditSampleRole Does Not Propagate WG Reanalysis

AttributeValue
IDKI-009
SeverityMedium
StatusOpen
RequirementREQ-REANALYZE-008 AC3
DiscoveredSTD Reconciliation (2026-02-17)

Actual Behavior: When a control well's role is edited (e.g., LO POS to HI POS), the system does NOT trigger "Reanalysis required (Westgard)" on affected future runs. Only extraction date/instrument changes propagate. Westgard series membership is not recalculated after role change.

Impact: 3 KCI scenarios (BT-9561: 1, BT-9564: 2). REQ-REANALYZE-008 AC3 not fulfilled.

Affected Files: code/features/Support/EditSampleRole.php

Test Reference: BT-9561 GAP-003, BT-9564 edit-role variants.


KI-010: ADJZIKA PHP String Sort for Well Ordering

AttributeValue
IDKI-010
SeverityLow
StatusOpen
RequirementREQ-RULES-ADJZIKA-003
DiscoveredSTD Reconciliation (2026-02-19)

Actual Behavior: AdjZikaRule.php line 40 sorts wells via ->sortByDesc(fn ($well) => $well->getWellNumber()). PHP string comparison means A2 > A10 (character "2" > "1" at position 1). STD specifies natural/numeric ordering.

Impact: Low. Well history selection order differs from spec for multi-digit well numbers.

Affected Files: code/app/Analyzer/Rules/AdjZikaRule.php (line 40)

Test Reference: BT-9585 TV-ADJZIKA-003-004 documents actual code behavior.


KI-011: DELTACT Null CT Handling

AttributeValue
IDKI-011
SeverityLow
StatusUnder Review
RequirementREQ-RULES-DELTACT-001
DiscoveredSTD Reconciliation (2026-02-02)

Actual Behavior: abs(30 - null) = 30 -- null CT is treated as zero in delta calculation instead of triggering a skip or error. All three IC skip tests passed with v31 config (code may implement IC exclusion correctly, or fixtures coincidentally avoid triggering the issue).

Impact: Low. Functional behavior matches spec in tests conducted so far. Further code-level investigation needed.

Affected Files: code/app/Analyzer/Rules/DeltaCtRule.php

Test Reference: BT-9101 TV-DELTACT-001-007/008/009 (originally tagged @KNOWN_CODE_ISSUE, all passed).


KI-012: UNEXPFL Raw-Max vs Normalized Fluorescence Comparison

AttributeValue
IDKI-012
SeverityLow
StatusOpen - Not Yet Confirmed
RequirementREQ-RULES-UNEXPFL-001
DiscoveredSTD Reconciliation (2026-02-19)

Actual Behavior: BT-9596 references a discrepancy between raw-max and normalized fluorescence values used in the unexpected fluorescence threshold comparison. The exact nature of the mismatch has not been formally investigated.

Impact: 1 KCI scenario (BT-9596). Needs formal confirmation.

Test Reference: BT-9596 TV-UNEXPFL (1 KCI).


Active Issues -- Test Infrastructure (Appendix A)

These issues affect test execution rather than production behavior.

No active test infrastructure issues. TI-001, TI-002, and TI-003 have all been resolved (see Appendix B below).


Resolved Issues (Appendix B)

IDOriginalCategoryResolutionSession
--ISSUE-002ConfigWrong config diagnosis -- switched BT-9101 to v31 configS4
--ISSUE-003RetractedTest fixture issue -- patient well role not in DELTA_CT config mappingS4
--ISSUE-004RetractedSame root cause as ISSUE-003S4
--ISSUE-007ConfigMINCONTROLS used wrong rule -- MIN_CONTROLS vs MINEXTRACT for extraction-enabled configsS5
--ISSUE-008ConfigAMB config fixed (missing CODE column, wildcard target names, oversized sheets)S5
--ISSUE-009ReclassifiedNot a Bug -- INH sets obs-level IC_FAILED correctly; needs COMBOUT ic_failed=TRUE config rowS14
--ISSUE-016DeferredINHSERUMQUANT null IC CT as above-threshold -- PHP null <= 35 evaluates false. Low impact edge caseS17
--DOC-001Doc FixANALYZER: bypass_accession_validation changed to allowed_characters_in_accessions (array, not boolean)S15
--DOC-002Doc FixENGINE: per-well filtering clarification addedS15
--DOC-003Doc FixINHQUAL: PICQUAL/PICQUANT attribution disambiguation note addedS15
--DOC-004Doc FixLINREG: SKIP slope/intercept correction (-5 changed to -2)S15
--DOC-005Doc FixWDCTC: fluorescence skip requires Neg CLS -- added classification column, new TVS15
--DOC-006Doc FixINHSERUMQUANT: boundary > changed to >= for 10k thresholdS15
--DOC-007Doc FixRQUAL: decision table inversion fixed (12 outcome values corrected)S17
--DOC-008Doc FixMNGQTY: sequential preg_replace_array replacement clarification addedS17
TI-001ISSUE-014Resolved (v3.0.1)Archive step definition added in v3.0.1 (commit ba735a8). The When Archive the :fileName step now exists in FeatureContext. Archive dependency tracking infrastructure also added (REQ-REANALYZE-009 through -013). ~27 previously blocked scenarios are now executable.S35
TI-002ISSUE-015ResolvedEC cascade claim was incorrect -- all GAPDH_ENT scenarios pass with original Viracor_PROD config. Stale @KNOWN_CODE_ISSUE tags removed.S31
TI-003ISSUE-019ResolvedAdded Behat step Given the client configuration "{key}" is set to "{value}" to toggle use_sample_type after import. TV-COMBOUT-002-023 passes.S31

Cross-Reference Table

New IDOriginal IDSRS RequirementSeverityStatusKCI Count
KI-001--REQ-USERSET-002LowOpen0
KI-002--REQ-SITE-002 AC-05MediumOpen - Intentional0
KI-003ISSUE-005REQ-RULES-NOTTSQM-001LowOpen0
KI-004ISSUE-006REQ-RULES-NOTTSQM-001LowOpen1
KI-005ISSUE-010REQ-RULES-MIXMISS-003MediumOpen (partially fixed v3.0.1)10
KI-006ISSUE-012REQ-RULES-REPEATSAMP-001LowOpen3
KI-007ISSUE-013REQ-RULES-INHQUANT-001MediumOpen2 KCI
KI-008ISSUE-017REQ-RULES-ADJ-001LowOpen1
KI-009ISSUE-018REQ-REANALYZE-008 AC3MediumOpen3
KI-010ISSUE-020REQ-RULES-ADJZIKA-003LowOpen0
KI-011ISSUE-001REQ-RULES-DELTACT-001LowUnder Review0
KI-012ISSUE-021REQ-RULES-UNEXPFL-001LowNot Confirmed1
TI-001ISSUE-014REANALYZE/ArchiveMediumResolved (v3.0.1)0
TI-002ISSUE-015SYSINH/EC cascadeLowResolved0
TI-003ISSUE-019COMBOUT specimenLowResolved0

Issue Lifecycle

StatusDescription
OpenIssue identified, awaiting resolution decision
Open - IntentionalBehavior difference is intentional, documented for awareness
Under ReviewInvestigation ongoing, may not be a real issue
In ProgressResolution underway
ClosedIssue resolved (code fix or requirement update)

Notes

  • v3.0.1 update (2026-03-05): TI-001 resolved (Archive step definition added). KI-005 partially fixed (hang resolved, resolution still broken). The limsStatusIsExcluded() bug (|| changed to && in commit be60a17) was a pre-existing defect in v3.0.0-beta.31 that was never reported as a KI because the bug made the check always true for non-null lims_status, so it had no visible negative effect on test outcomes. The fix in v3.0.1 enables proper EXCLUDE-only filtering for cross-run well comparisons (REQ-ANALYZER-002).
  • This document consolidates the former code-issues-log.md (ISSUE-NNN and DOC-NNN entries from STD reconciliation) with the original Pass C review findings (KI-001, KI-002). The code-issues-log.md file has been deleted (all content is here).
  • Issues discovered during Pass C Code Review are tagged with discovery date "2026-01-19."
  • Issues discovered during STD reconciliation are tagged with discovery dates from February 2026.
  • DocRef comments in code may reference known issues for developer awareness.
  • Resolution decisions should be documented in issue updates before closing.
  • Intentional deviations remain documented even after acknowledgment.
  • @KNOWN_CODE_ISSUE Behat tag marks scenarios that pass against actual code behavior but contradict the STD specification.
  • @KNOWN_LIMITATION Behat tag marks scenarios constrained by test infrastructure rather than code bugs.