Q-W5: persist → session/ext_state_io/prune_fs (deletion authority concentrated); one GetProjExtState grow-loop in bridge_marshal (T2-04, ×3 rewired); bank_book JSON codec → bank_book_json via private static nameKey; persist.h stays umbrella. 61/61 green.
This commit is contained in:
@@ -342,6 +342,16 @@ private:
|
||||
std::vector<Bank> banks_; // ordinal order; banks_[0] is always the pool
|
||||
std::string activeBankId_; // always names a live bank; defaults to pool
|
||||
|
||||
// Folds a display name to its uniqueness key: strip leading/trailing ASCII
|
||||
// whitespace, lower-case ASCII letters. So "Drums", "drums", and " Drums " share
|
||||
// one key and cannot coexist. ASCII-only by design — the pure core carries no
|
||||
// locale facility and must not grow one. A private STATIC member (Q-W5, settled)
|
||||
// because BOTH halves of the split implementation need the ONE folding rule: the
|
||||
// rules TU (bank_book.cpp, displayNameTaken) and the JSON TU (bank_book_json.cpp,
|
||||
// deserialize's duplicate-display-name coalesce) — a drifted second copy would let
|
||||
// a parsed book violate the create/rename uniqueness invariant.
|
||||
static std::string nameKey(const std::string& s);
|
||||
|
||||
// True if a bank OTHER than `exceptId` already carries `name`'s uniqueness key
|
||||
// (trimmed + case-insensitive, ASCII). Backs the create/rename uniqueness check;
|
||||
// pass exceptId=id to let a bank keep (or re-case/-space) its own name.
|
||||
|
||||
Reference in New Issue
Block a user