Compare commits

...

2 Commits
9.4.7 ... 9.5.1

Author SHA1 Message Date
df1e0b9952 Amélioration robustess et vérification sur import des modules
All checks were successful
Validation JSON / validate (push) Successful in 16s
Release Creation / build (release) Successful in 48s
2026-04-14 08:26:08 +02:00
b1e96af421 UPdsate pour support v14
All checks were successful
Validation JSON / validate (push) Successful in 15s
Release Creation / build (release) Successful in 49s
2026-04-11 20:23:24 +02:00
43 changed files with 217 additions and 141 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
.history/ .history/
.idea/ .idea/
.github/

View File

@@ -807,6 +807,9 @@
"Infinite": "Infini", "Infinite": "Infini",
"any one": "Au choix", "any one": "Au choix",
"Sing": "Chant", "Sing": "Chant",
"Months":"mois",
"Years":"années",
"ENTITY.Actor": "Acteur", "ENTITY.Actor": "Acteur",
"BROWSER.ItemCategories": "Catégorie d'items", "BROWSER.ItemCategories": "Catégorie d'items",
"BROWSER.IncludeWorld": "Inclure les objets du monde ?", "BROWSER.IncludeWorld": "Inclure les objets du monde ?",

View File

@@ -124,7 +124,7 @@
"id": "wh4-fr-translation", "id": "wh4-fr-translation",
"compatibility": { "compatibility": {
"minimum": "13", "minimum": "13",
"verified": "13" "verified": "14"
}, },
"relationships": { "relationships": {
"systems": [ "systems": [

View File

@@ -16,30 +16,27 @@ const _patch_eis = () => {
game.wfrp4e.config.symptomTreatment["swelling"] = "La plupart des traitements consistent à plonger la partie affectée, ou parfois tout le corps, dans un bain d'eau glacée pour réduire la chaleur qui accompagne les gonflements. Un <b> Test de Guérison Difficile (-20) étendu </b> nécessitant +3 DR réduit le renflement de <b> <a class ='chat-roll'> 2d10 </a> </b> heures. Chaque test dure une heure. Le patient se retrouve avec l'Etat Exténué +1 pour chaque test effectué au cours du processus. <br> <br> A la place, certains médecins saignent le patient avec une lame ou des sangsues. Un <b>Test de Guérison étendu </b> réussi nécessitant +4 SL et des Outils (médecin) réduit le renflement de (<a class ='chat-roll'> 1d10 </a> + Bonus d'Endurance du patient) heures. Chaque test a une difficulté de base <b> impossible (-50) </b> et dure une demi-heure."; game.wfrp4e.config.symptomTreatment["swelling"] = "La plupart des traitements consistent à plonger la partie affectée, ou parfois tout le corps, dans un bain d'eau glacée pour réduire la chaleur qui accompagne les gonflements. Un <b> Test de Guérison Difficile (-20) étendu </b> nécessitant +3 DR réduit le renflement de <b> <a class ='chat-roll'> 2d10 </a> </b> heures. Chaque test dure une heure. Le patient se retrouve avec l'Etat Exténué +1 pour chaque test effectué au cours du processus. <br> <br> A la place, certains médecins saignent le patient avec une lame ou des sangsues. Un <b>Test de Guérison étendu </b> réussi nécessitant +4 SL et des Outils (médecin) réduit le renflement de (<a class ='chat-roll'> 1d10 </a> + Bonus d'Endurance du patient) heures. Chaque test a une difficulté de base <b> impossible (-50) </b> et dure une demi-heure.";
game.wfrp4e.config.loreEffects["tzeentch"] = { game.wfrp4e.config.loreEffects["tzeentch"] = {
label: "Domaine de Tzeentch", name: "Domaine de Tzeentch",
icon: "modules/wfrp4e-core/icons/spells/tzeentch.png", img: "modules/wfrp4e-core/icons/spells/tzeentch.png",
transfer: true, system: {
flags: { transferData: {
wfrp4e: { type: "target"
"effectApplication": "apply", },
"effectTrigger": "oneTime", scriptData: [{
"lore": true, trigger: "immediate",
"script": ` label: "Test d'Endurance",
if (this.actor.isOwner) script: `
args.actor.setupSkill("Résistance", {context : {failure: "1 Point de Corruption reçu", success : "1 Point de Chance gagné"}}).then(setupData => { this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {appendTitle : " - " + this.effect.name, context : {failure: "1 Point de Corruption reçu", success : "1 Point de Chance gagné"}}).then(setupData => {
args.actor.basicTest(setupData).then(test => this.actor.basicTest(setupData).then(test => {
{ if (test.succeeded && this.actor.type == "character") {
if (test.result.result == "success" && args.actor.type == "character") this.actor.update({"system.status.fortune.value" : this.actor.system.status.fortune.value + 1})
{ } else if (test.failed && this.actor.type == "character") {
args.actor.update({"system.status.fortune.value" : args.actor.system.status.fortune.value + 1}) this.actor.update({"system.status.corruption.value" : this.actor.system.status.corruption.value + 1})
}
else if (test.result.result == "failure" && args.actor.type == "character")
{
args.actor.update({"system.status.corruption.value" : args.actor.system.status.corruption.value + 1})
} }
}) })
})` })
} return false;`
}]
} }
} }
} }
@@ -404,6 +401,40 @@ Hooks.on('ready', () => {
// Patch function for effects // Patch function for effects
game.wfrp4e.utility.findKey = warhammer.utility.findKey game.wfrp4e.utility.findKey = warhammer.utility.findKey
// Patch SpellModel.computeSpellDamage to handle English characteristic bonus names.
// Babele instantiates actors TWICE: first with untranslated data (English formulas like
// "Willpower Bonus+4"), then with translated data. The first pass fails because
// characteristicsBonus values are already French ("Bonus de Force Mentale").
// This patch pre-replaces English bonus names with numeric values before the original
// formula evaluation runs, preventing SyntaxErrors and notification spam.
const __EN_BONUS_TO_CHAR = {
"weapon skill bonus": "ws", "ballistic skill bonus": "bs",
"strength bonus": "s", "toughness bonus": "t",
"initiative bonus": "i", "agility bonus": "ag",
"dexterity bonus": "dex", "intelligence bonus": "int",
"willpower bonus": "wp", "fellowship bonus": "fel"
};
const SpellModel = CONFIG.Item.dataModels?.["spell"];
if (SpellModel?.prototype?.computeSpellDamage) {
const _origComputeSpellDamage = SpellModel.prototype.computeSpellDamage;
SpellModel.prototype.computeSpellDamage = function(formula, options) {
if (typeof formula === "string") {
const actor = options?.actor || this.parent?.actor;
if (actor?.system?.characteristics) {
let f = formula.toLowerCase();
for (const [enName, ch] of Object.entries(__EN_BONUS_TO_CHAR)) {
if (f.includes(enName)) {
const bonus = actor.system.characteristics[ch]?.bonus ?? 0;
f = f.replace(enName, bonus);
}
}
formula = f;
}
}
return _origComputeSpellDamage.call(this, formula, options);
};
}
// Patch postSymptom to handle English symptom names in @Symptom[...] links. // Patch postSymptom to handle English symptom names in @Symptom[...] links.
// After i18nInit, config.symptoms values are French strings (e.g. "Fièvre"), so // After i18nInit, config.symptoms values are French strings (e.g. "Fièvre"), so
// findKey("Fever", config.symptoms) fails. We normalize via game.i18n.localize first. // findKey("Fever", config.symptoms) fails. We normalize via game.i18n.localize first.

View File

@@ -30,6 +30,20 @@ const __SELECT_BONUS_PREFIX_D = {
"agilité": 1 "agilité": 1
} }
// Map English characteristic names (as they appear in spell formulas) to WFRP4e abbreviations
const __CHAR_EN_TO_ABBR = {
"weapon skill": "ws",
"ballistic skill": "bs",
"strength": "s",
"toughness": "t",
"initiative": "i",
"agility": "ag",
"dexterity": "dex",
"intelligence": "int",
"willpower": "wp",
"fellowship": "fel"
}
/************************************************************************************/ /************************************************************************************/
export class WFRP4FrTranslation { export class WFRP4FrTranslation {
@@ -57,16 +71,23 @@ export class WFRP4FrTranslation {
if (value == "You") return "Vous"; // Hop ! if (value == "You") return "Vous"; // Hop !
if (value == "Instant") return "Instantané"; // Hop ! if (value == "Instant") return "Instantané"; // Hop !
let translw = value; let translw = value;
let re = /(.*)\s+[Bb]onus\s*(\w*)/i; let re = /(.*)\s+[Bb]onus\s*(.*)/i; // (.*) at end captures modifiers like "+4"
let res = re.exec(value); let res = re.exec(value);
let unit = ""; let unit = "";
if (res) { // Test "<charac> Bonus <unit>" pattern if (res) { // Test "<charac> Bonus <modifier>" pattern
if (res[1]) { // We have char name, then convert it if (res[1]) { // We have char name, then convert it
const charEN = res[1].trim().toLowerCase();
const abbr = __CHAR_EN_TO_ABBR[charEN];
if (abbr && game.wfrp4e?.config?.characteristicsBonus?.[abbr]) {
// Use the localized French bonus name from config (already resolved by localizeConfig at i18nInit)
translw = game.wfrp4e.config.characteristicsBonus[abbr];
} else {
translw = game.i18n.localize(res[1].trim()); translw = game.i18n.localize(res[1].trim());
let bonusPrefix = (translw.toLowerCase() in __SELECT_BONUS_PREFIX_D) ? "Bonus d'" : "Bonus de "; let bonusPrefix = (translw.toLowerCase() in __SELECT_BONUS_PREFIX_D) ? "Bonus d'" : "Bonus de ";
translw = bonusPrefix + translw translw = bonusPrefix + translw;
} }
unit = res[2]; }
unit = res[2]; // may be "+4", "-2", "2", "yards", etc.
} else { } else {
re = /(\d+) (\w+)/i; re = /(\d+) (\w+)/i;
res = re.exec(value); res = re.exec(value);
@@ -90,6 +111,8 @@ export class WFRP4FrTranslation {
if (unit == "Bonus") { // Another weird management if (unit == "Bonus") { // Another weird management
console.log("Translating bonus", unit); console.log("Translating bonus", unit);
translw = "Bonus de " + translw; translw = "Bonus de " + translw;
} else if (unit && /^[+\-*\/]/.test(unit)) {
translw += unit; // No space before operators like "+4"
} else { } else {
translw += " " + unit; translw += " " + unit;
} }
@@ -278,6 +301,8 @@ Hooks.once('init', () => {
"process_effects": (effectsData, translations, data, tc, tc_translations) => { "process_effects": (effectsData, translations, data, tc, tc_translations) => {
//console.log("Effects :", effectsData, translations, data, tc, tc_translations) //console.log("Effects :", effectsData, translations, data, tc, tc_translations)
for (let e of effectsData) { for (let e of effectsData) {
// Foundry v13 requires name; migrate legacy data where only label was stored
if (e.name == null) e.name = e.label || "";
let origName = e.name let origName = e.name
// Symptom effects have their own name (Fever, Malaise, etc.) — don't overwrite with the parent item name // Symptom effects have their own name (Fever, Malaise, etc.) — don't overwrite with the parent item name
if (e.flags?.wfrp4e?.symptom) { if (e.flags?.wfrp4e?.symptom) {
@@ -293,7 +318,7 @@ Hooks.once('init', () => {
} }
e.name = game.i18n.localize(symName) + gravity; e.name = game.i18n.localize(symName) + gravity;
} else { } else {
e.name = tc_translations.name || game.i18n.localize(e.name) e.name = tc_translations.name || game.i18n.localize(e.name) || e.label || ""
} }
if ( e.flags?.wfrp4e?.scriptData) { if ( e.flags?.wfrp4e?.scriptData) {
for (let script of e.flags.wfrp4e.scriptData) { for (let script of e.flags.wfrp4e.scriptData) {
@@ -411,10 +436,18 @@ Hooks.once('init', () => {
return beast_traits return beast_traits
} }
//console.log("TRANS:", beast_traits) //console.log("TRANS:", beast_traits)
// Normalize: Foundry v13 requires ActiveEffect.name; migrate legacy v12 data
for (let trait_en of beast_traits) {
if (trait_en.effects) {
for (let eff of trait_en.effects) {
if (eff.name == null) eff.name = eff.label || "";
}
}
}
for (let trait_en of beast_traits) { for (let trait_en of beast_traits) {
let special = ""; let special = "";
let nbt = ""; let nbt = "";
let name_en = trait_en.name.trim(); // strip \r in some traits name let name_en = trait_en.name.replace(/\r/g, '').trim(); // strip \r (including internal) in some traits name
if (!trait_en.name || trait_en.name.length == 0) { if (!trait_en.name || trait_en.name.length == 0) {
console.log("Wrong item name found!!!!") console.log("Wrong item name found!!!!")
continue continue
@@ -430,9 +463,12 @@ Hooks.once('init', () => {
} else if (name_en.includes("(") && name_en.includes(")")) { // Then process specific traits name with (xxxx) inside } else if (name_en.includes("(") && name_en.includes(")")) { // Then process specific traits name with (xxxx) inside
let re = /(.*) \((.*)\)/i; let re = /(.*) \((.*)\)/i;
let res = re.exec(name_en); let res = re.exec(name_en);
if (!res) { console.warn("WFRP4E-FR | bestiary_traits: regex failed for trait:", name_en); }
else {
name_en = res[1]; // Get the root traits name name_en = res[1]; // Get the root traits name
special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword
} }
}
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("trait") let validCompendiums = game.wfrp4e.tags.getPacksWithTag("trait")
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true) let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true)
@@ -453,9 +489,12 @@ Hooks.once('init', () => {
if (name_en.includes("(") && name_en.includes(")")) { // Then process specific skills name with (xxxx) inside if (name_en.includes("(") && name_en.includes(")")) { // Then process specific skills name with (xxxx) inside
let re = /(.*) +\((.*)\)/i; let re = /(.*) +\((.*)\)/i;
let res = re.exec(name_en); let res = re.exec(name_en);
if (!res) { console.warn("WFRP4E-FR | bestiary_traits: regex failed for skill:", name_en); }
else {
name_en = res[1].trim(); // Get the root skill name name_en = res[1].trim(); // Get the root skill name
special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword
} }
}
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("skill") let validCompendiums = game.wfrp4e.tags.getPacksWithTag("skill")
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true) let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en, system:{description:{value: trait_en.system.description.value}} }, true)
@@ -499,9 +538,12 @@ Hooks.once('init', () => {
if (name_en.includes("(") && name_en.includes(")")) { // Then process specific skills name with (xxxx) inside if (name_en.includes("(") && name_en.includes(")")) { // Then process specific skills name with (xxxx) inside
let re = /(.*) +\((.*)\)/i; let re = /(.*) +\((.*)\)/i;
let res = re.exec(name_en); let res = re.exec(name_en);
if (!res) { console.warn("WFRP4E-FR | bestiary_traits: regex failed for talent:", name_en); }
else {
name_en = res[1].trim(); // Get the root talent name, no parenthesis this time... name_en = res[1].trim(); // Get the root talent name, no parenthesis this time...
special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword special = " (" + game.i18n.localize(res[2].trim()) + ")"; // And the special keyword
} }
}
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("talent") let validCompendiums = game.wfrp4e.tags.getPacksWithTag("talent")
for (let compData of validCompendiums) { for (let compData of validCompendiums) {
if (name_en === "Trapper") { if (name_en === "Trapper") {

View File

@@ -225,16 +225,15 @@ export class WH4FRPatchConfig {
} }
if (game.wfrp4e.config.loreEffects) { if (game.wfrp4e.config.loreEffects) {
game.wfrp4e.config.loreEffects["beasts"].label = "Domaine des Bêtes" game.wfrp4e.config.loreEffects["beasts"].name = "Domaine des Bêtes"
game.wfrp4e.config.loreEffects["death"].label = "Domaine de la Mort" game.wfrp4e.config.loreEffects["death"].name = "Domaine de la Mort"
game.wfrp4e.config.loreEffects["fire"].label = "Domaine du Feu" game.wfrp4e.config.loreEffects["fire"].name = "Domaine du Feu"
game.wfrp4e.config.loreEffects["metal"].label = "Domaine du Métal" game.wfrp4e.config.loreEffects["metal"].name = "Domaine du Métal"
game.wfrp4e.config.loreEffects["heavens"].label = "Domaine des Cieux" game.wfrp4e.config.loreEffects["heavens"].name = "Domaine des Cieux"
game.wfrp4e.config.loreEffects["life"].label = "Domaine de la Vie" game.wfrp4e.config.loreEffects["life"].name = "Domaine de la Vie"
game.wfrp4e.config.loreEffects["light"].label = "Domaine de la Lumière" game.wfrp4e.config.loreEffects["light"].name = "Domaine de la Lumière"
game.wfrp4e.config.loreEffects["shadow"].label = "Domaine des Ombres" game.wfrp4e.config.loreEffects["shadow"].name = "Domaine des Ombres"
game.wfrp4e.config.loreEffects["hedgecraft"].label = "Domaine de la Magie de Village" game.wfrp4e.config.loreEffects["hedgecraft"].name = "Domaine de la Sorcellerie"
game.wfrp4e.config.loreEffects["hedgecraft"].label = "Domaine de la Sorcellerie"
} }
if (game.wfrp4e.config.species) { if (game.wfrp4e.config.species) {

View File

@@ -155,7 +155,7 @@ export default class InnRoller {
} }
// Extraire les informations du résultat // Extraire les informations du résultat
const resultText = rollResult.results[0]?.text || "Résultat inconnu"; const resultText = rollResult.results[0]?.name || rollResult.results[0]?.description || "Résultat inconnu";
const rollFormula = rollResult.roll?.formula || "1d100"; const rollFormula = rollResult.roll?.formula || "1d100";
const rollTotal = rollResult.roll?.total || 0; const rollTotal = rollResult.roll?.total || 0;
@@ -349,7 +349,7 @@ export default class InnRoller {
if (rollTable) { if (rollTable) {
try { try {
const roll = await rollTable.draw({ displayChat: false }); const roll = await rollTable.draw({ displayChat: false });
const resultText = roll.results[0]?.text || "Résultat inconnu"; const resultText = roll.results[0]?.name || roll.results[0]?.description || "Résultat inconnu";
results.push({ results.push({
category: this.getCategoryName(tableName), category: this.getCategoryName(tableName),
name: resultText, name: resultText,

View File

@@ -1 +1 @@
MANIFEST-001327 MANIFEST-001339

View File

@@ -1,7 +1,7 @@
2026/03/22-16:42:23.352679 7f766abff6c0 Recovering log #1325 2026/04/13-23:10:07.603169 7fddd97be6c0 Recovering log #1337
2026/03/22-16:42:23.362109 7f766abff6c0 Delete type=3 #1323 2026/04/13-23:10:07.613544 7fddd97be6c0 Delete type=3 #1335
2026/03/22-16:42:23.362175 7f766abff6c0 Delete type=0 #1325 2026/04/13-23:10:07.613619 7fddd97be6c0 Delete type=0 #1337
2026/03/22-16:47:51.291160 7f7668bfb6c0 Level-0 table #1330: started 2026/04/13-23:14:52.439353 7fddca1c26c0 Level-0 table #1342: started
2026/03/22-16:47:51.291261 7f7668bfb6c0 Level-0 table #1330: 0 bytes OK 2026/04/13-23:14:52.439375 7fddca1c26c0 Level-0 table #1342: 0 bytes OK
2026/03/22-16:47:51.297984 7f7668bfb6c0 Delete type=0 #1328 2026/04/13-23:14:52.447401 7fddca1c26c0 Delete type=0 #1340
2026/03/22-16:47:51.312338 7f7668bfb6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) 2026/04/13-23:14:52.447538 7fddca1c26c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/03/22-16:36:37.688691 7f76693fc6c0 Recovering log #1321 2026/04/13-23:01:32.388566 7fddd97be6c0 Recovering log #1333
2026/03/22-16:36:37.776281 7f76693fc6c0 Delete type=3 #1319 2026/04/13-23:01:32.399282 7fddd97be6c0 Delete type=3 #1331
2026/03/22-16:36:37.776343 7f76693fc6c0 Delete type=0 #1321 2026/04/13-23:01:32.399346 7fddd97be6c0 Delete type=0 #1333
2026/03/22-16:36:43.868900 7f7668bfb6c0 Level-0 table #1326: started 2026/04/13-23:07:12.207745 7fddca1c26c0 Level-0 table #1338: started
2026/03/22-16:36:43.868921 7f7668bfb6c0 Level-0 table #1326: 0 bytes OK 2026/04/13-23:07:12.207766 7fddca1c26c0 Level-0 table #1338: 0 bytes OK
2026/03/22-16:36:43.928319 7f7668bfb6c0 Delete type=0 #1324 2026/04/13-23:07:12.214487 7fddca1c26c0 Delete type=0 #1336
2026/03/22-16:36:43.978234 7f7668bfb6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end) 2026/04/13-23:07:12.214671 7fddca1c26c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001329 MANIFEST-001341

View File

@@ -1,7 +1,7 @@
2026/03/22-16:42:23.364546 7f7669bfd6c0 Recovering log #1327 2026/04/13-23:10:07.616013 7fddcbfff6c0 Recovering log #1339
2026/03/22-16:42:23.374494 7f7669bfd6c0 Delete type=3 #1325 2026/04/13-23:10:07.625710 7fddcbfff6c0 Delete type=3 #1337
2026/03/22-16:42:23.374542 7f7669bfd6c0 Delete type=0 #1327 2026/04/13-23:10:07.625777 7fddcbfff6c0 Delete type=0 #1339
2026/03/22-16:47:51.298142 7f7668bfb6c0 Level-0 table #1332: started 2026/04/13-23:14:52.426320 7fddca1c26c0 Level-0 table #1344: started
2026/03/22-16:47:51.298174 7f7668bfb6c0 Level-0 table #1332: 0 bytes OK 2026/04/13-23:14:52.426354 7fddca1c26c0 Level-0 table #1344: 0 bytes OK
2026/03/22-16:47:51.304520 7f7668bfb6c0 Delete type=0 #1330 2026/04/13-23:14:52.432796 7fddca1c26c0 Delete type=0 #1342
2026/03/22-16:47:51.312349 7f7668bfb6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) 2026/04/13-23:14:52.447521 7fddca1c26c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/03/22-16:36:37.779289 7f766abff6c0 Recovering log #1323 2026/04/13-23:01:32.401911 7fddd8fbd6c0 Recovering log #1335
2026/03/22-16:36:37.874995 7f766abff6c0 Delete type=3 #1321 2026/04/13-23:01:32.411157 7fddd8fbd6c0 Delete type=3 #1333
2026/03/22-16:36:37.875069 7f766abff6c0 Delete type=0 #1323 2026/04/13-23:01:32.411219 7fddd8fbd6c0 Delete type=0 #1335
2026/03/22-16:36:43.761021 7f7668bfb6c0 Level-0 table #1328: started 2026/04/13-23:07:12.194188 7fddca1c26c0 Level-0 table #1340: started
2026/03/22-16:36:43.761049 7f7668bfb6c0 Level-0 table #1328: 0 bytes OK 2026/04/13-23:07:12.194235 7fddca1c26c0 Level-0 table #1340: 0 bytes OK
2026/03/22-16:36:43.810545 7f7668bfb6c0 Delete type=0 #1326 2026/04/13-23:07:12.201298 7fddca1c26c0 Delete type=0 #1338
2026/03/22-16:36:43.978196 7f7668bfb6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end) 2026/04/13-23:07:12.214646 7fddca1c26c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001327 MANIFEST-001339

View File

@@ -1,7 +1,7 @@
2026/03/22-16:42:23.390520 7f766abff6c0 Recovering log #1325 2026/04/13-23:10:07.641322 7fddd9fbf6c0 Recovering log #1337
2026/03/22-16:42:23.399767 7f766abff6c0 Delete type=3 #1323 2026/04/13-23:10:07.651537 7fddd9fbf6c0 Delete type=3 #1335
2026/03/22-16:42:23.399819 7f766abff6c0 Delete type=0 #1325 2026/04/13-23:10:07.651623 7fddd9fbf6c0 Delete type=0 #1337
2026/03/22-16:47:51.312439 7f7668bfb6c0 Level-0 table #1330: started 2026/04/13-23:14:52.478583 7fddca1c26c0 Level-0 table #1342: started
2026/03/22-16:47:51.312465 7f7668bfb6c0 Level-0 table #1330: 0 bytes OK 2026/04/13-23:14:52.478613 7fddca1c26c0 Level-0 table #1342: 0 bytes OK
2026/03/22-16:47:51.318661 7f7668bfb6c0 Delete type=0 #1328 2026/04/13-23:14:52.484781 7fddca1c26c0 Delete type=0 #1340
2026/03/22-16:47:51.342631 7f7668bfb6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end) 2026/04/13-23:14:52.484989 7fddca1c26c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/03/22-16:36:37.968048 7f7669bfd6c0 Recovering log #1321 2026/04/13-23:01:32.426243 7fddcbfff6c0 Recovering log #1333
2026/03/22-16:36:38.054640 7f7669bfd6c0 Delete type=3 #1319 2026/04/13-23:01:32.436951 7fddcbfff6c0 Delete type=3 #1331
2026/03/22-16:36:38.054710 7f7669bfd6c0 Delete type=0 #1321 2026/04/13-23:01:32.437016 7fddcbfff6c0 Delete type=0 #1333
2026/03/22-16:36:43.810785 7f7668bfb6c0 Level-0 table #1326: started 2026/04/13-23:07:12.201427 7fddca1c26c0 Level-0 table #1338: started
2026/03/22-16:36:43.810821 7f7668bfb6c0 Level-0 table #1326: 0 bytes OK 2026/04/13-23:07:12.201453 7fddca1c26c0 Level-0 table #1338: 0 bytes OK
2026/03/22-16:36:43.868750 7f7668bfb6c0 Delete type=0 #1324 2026/04/13-23:07:12.207634 7fddca1c26c0 Delete type=0 #1336
2026/03/22-16:36:43.978217 7f7668bfb6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end) 2026/04/13-23:07:12.214659 7fddca1c26c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end)

View File

View File

View File

@@ -1 +1 @@
MANIFEST-001327 MANIFEST-001339

View File

@@ -1,7 +1,7 @@
2026/03/22-16:42:23.338520 7f766abff6c0 Recovering log #1325 2026/04/13-23:10:07.590923 7fddd8fbd6c0 Recovering log #1337
2026/03/22-16:42:23.349125 7f766abff6c0 Delete type=3 #1323 2026/04/13-23:10:07.600770 7fddd8fbd6c0 Delete type=3 #1335
2026/03/22-16:42:23.349194 7f766abff6c0 Delete type=0 #1325 2026/04/13-23:10:07.600832 7fddd8fbd6c0 Delete type=0 #1337
2026/03/22-16:47:51.284088 7f7668bfb6c0 Level-0 table #1330: started 2026/04/13-23:14:52.419409 7fddca1c26c0 Level-0 table #1342: started
2026/03/22-16:47:51.284128 7f7668bfb6c0 Level-0 table #1330: 0 bytes OK 2026/04/13-23:14:52.419440 7fddca1c26c0 Level-0 table #1342: 0 bytes OK
2026/03/22-16:47:51.290785 7f7668bfb6c0 Delete type=0 #1328 2026/04/13-23:14:52.426167 7fddca1c26c0 Delete type=0 #1340
2026/03/22-16:47:51.312323 7f7668bfb6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end) 2026/04/13-23:14:52.447511 7fddca1c26c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/03/22-16:36:37.600423 7f7669bfd6c0 Recovering log #1321 2026/04/13-23:01:32.376215 7fddcbfff6c0 Recovering log #1333
2026/03/22-16:36:37.685656 7f7669bfd6c0 Delete type=3 #1319 2026/04/13-23:01:32.386265 7fddcbfff6c0 Delete type=3 #1331
2026/03/22-16:36:37.685721 7f7669bfd6c0 Delete type=0 #1321 2026/04/13-23:01:32.386335 7fddcbfff6c0 Delete type=0 #1333
2026/03/22-16:36:43.698690 7f7668bfb6c0 Level-0 table #1326: started 2026/04/13-23:07:12.172988 7fddca1c26c0 Level-0 table #1338: started
2026/03/22-16:36:43.698733 7f7668bfb6c0 Level-0 table #1326: 0 bytes OK 2026/04/13-23:07:12.173015 7fddca1c26c0 Level-0 table #1338: 0 bytes OK
2026/03/22-16:36:43.734104 7f7668bfb6c0 Delete type=0 #1324 2026/04/13-23:07:12.180381 7fddca1c26c0 Delete type=0 #1336
2026/03/22-16:36:43.760901 7f7668bfb6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end) 2026/04/13-23:07:12.187032 7fddca1c26c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end)

View File

View File

View File

@@ -1 +1 @@
MANIFEST-001327 MANIFEST-001339

View File

@@ -1,7 +1,7 @@
2026/03/22-16:42:23.326365 7f766abff6c0 Recovering log #1325 2026/04/13-23:10:07.578503 7fddd9fbf6c0 Recovering log #1337
2026/03/22-16:42:23.336381 7f766abff6c0 Delete type=3 #1323 2026/04/13-23:10:07.588788 7fddd9fbf6c0 Delete type=3 #1335
2026/03/22-16:42:23.336459 7f766abff6c0 Delete type=0 #1325 2026/04/13-23:10:07.588855 7fddd9fbf6c0 Delete type=0 #1337
2026/03/22-16:47:51.277178 7f7668bfb6c0 Level-0 table #1330: started 2026/04/13-23:14:52.432890 7fddca1c26c0 Level-0 table #1342: started
2026/03/22-16:47:51.277256 7f7668bfb6c0 Level-0 table #1330: 0 bytes OK 2026/04/13-23:14:52.432912 7fddca1c26c0 Level-0 table #1342: 0 bytes OK
2026/03/22-16:47:51.283812 7f7668bfb6c0 Delete type=0 #1328 2026/04/13-23:14:52.439225 7fddca1c26c0 Delete type=0 #1340
2026/03/22-16:47:51.283961 7f7668bfb6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) 2026/04/13-23:14:52.447529 7fddca1c26c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/03/22-16:36:37.504471 7f76693fc6c0 Recovering log #1321 2026/04/13-23:01:32.363321 7fddd9fbf6c0 Recovering log #1333
2026/03/22-16:36:37.597157 7f76693fc6c0 Delete type=3 #1319 2026/04/13-23:01:32.373224 7fddd9fbf6c0 Delete type=3 #1331
2026/03/22-16:36:37.597217 7f76693fc6c0 Delete type=0 #1321 2026/04/13-23:01:32.373285 7fddd9fbf6c0 Delete type=0 #1333
2026/03/22-16:36:43.734281 7f7668bfb6c0 Level-0 table #1326: started 2026/04/13-23:07:12.180494 7fddca1c26c0 Level-0 table #1338: started
2026/03/22-16:36:43.734305 7f7668bfb6c0 Level-0 table #1326: 0 bytes OK 2026/04/13-23:07:12.180514 7fddca1c26c0 Level-0 table #1338: 0 bytes OK
2026/03/22-16:36:43.760674 7f7668bfb6c0 Delete type=0 #1324 2026/04/13-23:07:12.186759 7fddca1c26c0 Delete type=0 #1336
2026/03/22-16:36:43.760915 7f7668bfb6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end) 2026/04/13-23:07:12.187045 7fddca1c26c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)

View File

View File

View File

@@ -1 +1 @@
MANIFEST-000970 MANIFEST-000982

View File

@@ -1,7 +1,7 @@
2026/03/22-16:42:23.377345 7f766abff6c0 Recovering log #968 2026/04/13-23:10:07.628261 7fddd97be6c0 Recovering log #980
2026/03/22-16:42:23.388209 7f766abff6c0 Delete type=3 #966 2026/04/13-23:10:07.638743 7fddd97be6c0 Delete type=3 #978
2026/03/22-16:42:23.388272 7f766abff6c0 Delete type=0 #968 2026/04/13-23:10:07.638813 7fddd97be6c0 Delete type=0 #980
2026/03/22-16:47:51.304649 7f7668bfb6c0 Level-0 table #973: started 2026/04/13-23:14:52.447639 7fddca1c26c0 Level-0 table #985: started
2026/03/22-16:47:51.304679 7f7668bfb6c0 Level-0 table #973: 0 bytes OK 2026/04/13-23:14:52.447658 7fddca1c26c0 Level-0 table #985: 0 bytes OK
2026/03/22-16:47:51.312155 7f7668bfb6c0 Delete type=0 #971 2026/04/13-23:14:52.454058 7fddca1c26c0 Delete type=0 #983
2026/03/22-16:47:51.312359 7f7668bfb6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end) 2026/04/13-23:14:52.484949 7fddca1c26c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/03/22-16:36:37.879467 7f7669bfd6c0 Recovering log #964 2026/04/13-23:01:32.413810 7fddd97be6c0 Recovering log #976
2026/03/22-16:36:37.964554 7f7669bfd6c0 Delete type=3 #962 2026/04/13-23:01:32.423395 7fddd97be6c0 Delete type=3 #974
2026/03/22-16:36:37.964638 7f7669bfd6c0 Delete type=0 #964 2026/04/13-23:01:32.423455 7fddd97be6c0 Delete type=0 #976
2026/03/22-16:36:43.928514 7f7668bfb6c0 Level-0 table #969: started 2026/04/13-23:07:12.187249 7fddca1c26c0 Level-0 table #981: started
2026/03/22-16:36:43.928542 7f7668bfb6c0 Level-0 table #969: 0 bytes OK 2026/04/13-23:07:12.187284 7fddca1c26c0 Level-0 table #981: 0 bytes OK
2026/03/22-16:36:43.977973 7f7668bfb6c0 Delete type=0 #967 2026/04/13-23:07:12.194022 7fddca1c26c0 Delete type=0 #979
2026/03/22-16:36:43.978253 7f7668bfb6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end) 2026/04/13-23:07:12.214628 7fddca1c26c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end)