DataModels + Appv2 migration : OK

This commit is contained in:
2026-02-28 21:00:06 +01:00
parent 8017bb207d
commit 1ffb8b08fc
119 changed files with 2268 additions and 384 deletions

View File

@@ -442,8 +442,14 @@ ul.no-bullets {
background-color: lightgray; background-color: lightgray;
} }
.items-list .item-header .item-name { .items-list .item-header .item-name {
font-family: "Wolfsbane2Expanded", cursive; font-family: "Wolfsbane2Expanded", cursive !important;
font-size: 1.5em; font-size: 1.32em !important;
color: #191813 !important;
}
.items-list .item-header .item-field {
font-family: 'Signika', sans-serif !important;
font-size: 0.85em !important;
color: #4b4a44 !important;
} }
.items-list .item { .items-list .item {
min-height: 30px; min-height: 30px;
@@ -451,6 +457,8 @@ ul.no-bullets {
padding: 3px 0 3px 3px; padding: 3px 0 3px 3px;
border-bottom: 1px solid #BBB; border-bottom: 1px solid #BBB;
align-items: stretch; align-items: stretch;
color: #4b4a44;
font-size: 0.9em;
} }
.items-list .item .item-image { .items-list .item .item-image {
flex: 0 0 30px; flex: 0 0 30px;
@@ -490,6 +498,11 @@ ul.no-bullets {
.items-list .item .item-name, .items-list .item .item-name,
.items-list .item .item-field { .items-list .item .item-field {
margin: 0; margin: 0;
color: #333;
font-size: 0.84rem;
font-family: inherit;
display: flex;
align-items: center;
} }
.items-list .item .item-controls-1 { .items-list .item .item-controls-1 {
flex: 0 0 18px; flex: 0 0 18px;
@@ -603,6 +616,144 @@ ul.no-bullets {
color: #fff; color: #fff;
} }
/* ----------------------------------------- */ /* ----------------------------------------- */
/* Post Item Chat Card */
/* ----------------------------------------- */
.bol-post-item {
color: #191813;
}
.bol-post-item .bpi-header {
display: flex;
flex-direction: row;
align-items: flex-start;
gap: 8px;
padding-bottom: 6px;
border-bottom: 2px solid #8b7355;
margin-bottom: 8px;
}
.bol-post-item .bpi-header .bpi-img {
width: 52px;
height: 52px;
border: 1px outset lightgray;
box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5);
object-fit: cover;
flex: 0 0 52px;
}
.bol-post-item .bpi-header .bpi-title-block {
flex: 1;
}
.bol-post-item .bpi-header .bpi-title-block .bpi-name {
margin: 0 0 2px 0;
font-family: "Wolfsbane2Expanded", cursive;
font-size: 1.1em;
color: #4b4a44;
line-height: 1.2;
border: none;
}
.bol-post-item .bpi-header .bpi-title-block .bpi-type {
font-family: "IMFellDWPicaSC-Regular", serif;
font-size: 0.8em;
color: #7a7060;
font-style: italic;
}
.bol-post-item .bpi-stats-row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
gap: 3px 12px;
margin: 4px 0;
padding: 4px 6px;
background: rgba(139, 115, 85, 0.08);
border: 1px solid rgba(139, 115, 85, 0.25);
border-radius: 3px;
}
.bol-post-item .bpi-stats-row .bpi-stat {
display: flex;
flex-direction: row;
align-items: baseline;
gap: 4px;
}
.bol-post-item .bpi-stats-row .bpi-stat .bpi-sl {
font-family: "IMFellDWPicaSC-Regular", serif;
font-size: 0.72em;
color: #7a7060;
font-style: italic;
}
.bol-post-item .bpi-stats-row .bpi-stat .bpi-sv {
font-weight: bold;
font-size: 0.88em;
color: #191813;
}
.bol-post-item .bpi-tags {
display: flex;
flex-direction: row;
flex-wrap: wrap;
gap: 3px;
margin: 3px 0;
}
.bol-post-item .bpi-tags .bpi-tag {
padding: 1px 7px;
border: 1px solid #8b7355;
border-radius: 10px;
font-size: 0.7em;
color: #4b4a44;
background: rgba(139, 115, 85, 0.12);
font-family: "IMFellDWPicaSC-Regular", serif;
}
.bol-post-item .bpi-tags .bpi-tag-magic {
border-color: #6a4a9c;
color: #5a3a8c;
background: rgba(106, 74, 156, 0.1);
}
.bol-post-item .bpi-tags .bpi-tag-bonus {
border-color: #2d7a2d;
color: #1a5a1a;
background: rgba(45, 122, 45, 0.1);
}
.bol-post-item .bpi-tags .bpi-tag-malus {
border-color: #8b2020;
color: #6a1a1a;
background: rgba(139, 32, 32, 0.1);
}
.bol-post-item .bpi-conditions {
margin: 3px 0;
}
.bol-post-item .bpi-conditions .bpi-cond-label {
font-family: "IMFellDWPicaSC-Regular", serif;
font-size: 0.75em;
font-style: italic;
color: #7a7060;
}
.bol-post-item .bpi-conditions .bpi-condition {
display: inline-block;
margin: 1px 2px;
padding: 1px 6px;
border-radius: 3px;
font-size: 0.8em;
}
.bol-post-item .bpi-conditions .bpi-cond-req {
border: 1px solid #8b2020;
background: rgba(139, 32, 32, 0.08);
color: #6a1a1a;
}
.bol-post-item .bpi-conditions .bpi-cond-opt {
border: 1px solid #6a7a30;
background: rgba(106, 122, 48, 0.08);
color: #4a5a20;
}
.bol-post-item .bpi-description {
margin-top: 7px;
padding-top: 6px;
border-top: 1px dashed #c4a882;
}
.bol-post-item .bpi-description .bpi-desc-content {
font-size: 0.85em;
color: #191813;
line-height: 1.45;
}
.bol-post-item .bpi-description .bpi-desc-content p {
margin: 0 0 4px 0;
}
/* ----------------------------------------- */
/* Chat Messages */ /* Chat Messages */
/* ----------------------------------------- */ /* ----------------------------------------- */
.message-header h2.damage { .message-header h2.damage {
@@ -692,7 +843,7 @@ body.system-bol img#logo {
overflow-y: hidden; overflow-y: hidden;
background: transparent; background: transparent;
} }
.bol.sheet .window-content form { .bol.sheet .window-content .bol-actor-form {
border: 10px solid transparent; border: 10px solid transparent;
border-image: url("/systems/bol/ui/box-border-large.webp") 36 repeat; border-image: url("/systems/bol/ui/box-border-large.webp") 36 repeat;
border-image-outset: 1; border-image-outset: 1;
@@ -700,8 +851,10 @@ body.system-bol img#logo {
margin: 0; margin: 0;
padding: 0; padding: 0;
height: 100%; height: 100%;
position: relative;
width: 100%;
} }
.bol.sheet .window-content form .sheet-header { .bol.sheet .window-content .bol-actor-form .sheet-header {
background-image: url("/systems/bol/ui/banner.webp"); background-image: url("/systems/bol/ui/banner.webp");
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 330px 62px; background-size: 330px 62px;
@@ -718,7 +871,7 @@ body.system-bol img#logo {
align-items: flex-end; align-items: flex-end;
padding-bottom: 10px; padding-bottom: 10px;
} }
.bol.sheet .window-content form .sheet-header .header-field .header-field-group { .bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group {
overflow: hidden; overflow: hidden;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -726,22 +879,72 @@ body.system-bol img#logo {
justify-content: flex-start; justify-content: flex-start;
align-items: baseline; align-items: baseline;
} }
.bol.sheet .window-content form .sheet-header .header-field .header-field-group .header-field-label { .bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .charname,
margin-right: 5px; .bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .itemname {
}
.bol.sheet .window-content form .sheet-header .header-field .header-field-group .charname,
.bol.sheet .window-content form .sheet-header .header-field .header-field-group .itemname,
.bol.sheet .window-content form .sheet-header .header-field .header-field-group .header-field-value {
color: #4b4a44; color: #4b4a44;
font-family: 'Contrail One', cursive; font-family: "Wolfsbane2Expanded", cursive;
font-size: 1.5rem; font-size: 1.65rem;
background-color: #EEE; background-color: #2a2a2a30;
border: 1px solid #4b4a44 !important;
border-radius: 0.5rem;
width: 100%;
margin-bottom: 4px;
} }
.bol.sheet .window-content form .main .tabs { .bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .header-field-label {
margin-right: 5px;
font-size: 0.86rem;
}
.bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .header-field-label.xp-sublabel {
font-size: 0.9rem;
color: #606060;
}
.bol.sheet .window-content .bol-actor-form .sheet-header .header-field .header-field-group .header-field-value {
color: #4b4a44;
font-family: "Wolfsbane2Expanded", cursive;
font-size: 0.9rem;
background-color: #2a2a2a30;
border: 1px solid #4b4a44 !important;
border-radius: 0.5rem;
text-align: center;
}
.bol.sheet .window-content .bol-actor-form .sheet-header .header-buttons {
align-self: flex-end;
padding-bottom: 10px;
}
.bol.sheet .window-content .bol-actor-form .sheet-header .header-buttons .post-item {
flex: 0 0 auto;
height: 32px;
width: 32px;
line-height: 30px;
cursor: pointer;
background: rgba(0, 0, 0, 0.1);
border: 1px solid #999;
border-radius: 3px;
}
.bol.sheet .window-content .bol-actor-form .sheet-header .header-buttons .post-item:hover {
background: rgba(0, 0, 0, 0.2);
}
.bol.sheet .window-content .bol-actor-form .wrap {
flex: 1;
min-height: 0;
align-items: stretch;
}
.bol.sheet .window-content .bol-actor-form .bol-actor-sidebar {
align-self: flex-start;
}
.bol.sheet .window-content .bol-actor-form .main {
display: flex;
flex-direction: column;
flex: 1;
min-height: 0;
height: 100%;
overflow: hidden;
}
.bol.sheet .window-content .bol-actor-form .main .tabs {
flex: 0 0 30px; flex: 0 0 30px;
background-color: black; background-color: black;
} }
.bol.sheet .window-content form .main .tabs .item { .bol.sheet .window-content .bol-actor-form .main .tabs .item {
line-height: 30px; line-height: 30px;
font-weight: bold; font-weight: bold;
font-family: "CCMeanwhile", cursive; font-family: "CCMeanwhile", cursive;
@@ -749,21 +952,49 @@ body.system-bol img#logo {
padding-top: 4px; padding-top: 4px;
font-size: 0.8em; font-size: 0.8em;
} }
.bol.sheet .window-content form .main .tabs .item.active { .bol.sheet .window-content .bol-actor-form .main .tabs .item.active {
text-decoration: underline; text-decoration: underline;
text-shadow: none; text-shadow: none;
} }
.bol.sheet .window-content form .main .sheet-body { .bol.sheet .window-content .bol-actor-form .main .sheet-body {
flex: 1;
min-height: 0;
overflow: hidden; overflow: hidden;
} }
.bol.sheet .window-content form .main .sheet-body .tab { .bol.sheet .window-content .bol-actor-form .main .sheet-body .tab {
height: 95%; height: 100%;
border: none; border: none;
overflow-y: auto; overflow-y: auto;
display: none;
} }
.bol.sheet .window-content form .main .sheet-body .tab.description .editor, .bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.active {
.bol.sheet .window-content form .main .sheet-body .tab.description .editor-content { display: block;
}
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.stats hr {
margin-top: 6px;
margin-bottom: 6px;
}
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description .editor,
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description .editor-content,
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror {
height: 100%; height: 100%;
color: #191813;
}
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror .editor-content,
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror p,
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror div,
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description prose-mirror span {
color: #191813 !important;
}
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description input[type="text"],
.bol.sheet .window-content .bol-actor-form .main .sheet-body .tab.description input[type="number"] {
background-color: #2a2a2a30;
border: 1px solid #4b4a44 !important;
border-radius: 0.5rem;
color: #4b4a44;
text-align: center;
font-size: 0.95rem;
margin-left: 6px;
} }
.sheet-profile-img { .sheet-profile-img {
cursor: pointer; cursor: pointer;
@@ -790,13 +1021,14 @@ body.system-bol img#logo {
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 190px 115px; background-size: 190px 115px;
} }
.bol.sheet.actor .window-content form .sidebar { .bol.sheet.actor .window-content .bol-actor-form .sidebar {
padding-top: 115px; padding-top: 115px;
min-width: 250px; min-width: 250px;
width: 250px; width: 250px;
max-width: 250px; max-width: 250px;
overflow: hidden;
} }
.bol.sheet.actor .window-content form .sidebar .profile-img { .bol.sheet.actor .window-content .bol-actor-form .sidebar .profile-img {
cursor: pointer; cursor: pointer;
border: none; border: none;
background-color: #EEE; background-color: #EEE;
@@ -806,35 +1038,62 @@ body.system-bol img#logo {
max-width: calc(250px - 10px); max-width: calc(250px - 10px);
margin-right: 10px; margin-right: 10px;
} }
.bol.sheet.actor .window-content form .main .sheet-body { .bol.sheet.actor .window-content .bol-actor-form .sidebar .items-list {
width: calc(250px - 10px);
max-width: calc(250px - 10px);
margin-right: 10px;
}
.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body {
overflow: hidden; overflow: hidden;
} }
.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute.vigor { .bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute.vigor {
background-image: url("/systems/bol/ui/attributes/vigor.webp"); background-image: url("/systems/bol/ui/attributes/vigor.webp");
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center center; background-position: center 40%;
background-size: 64px 64px; background-size: 100px 100px;
} }
.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute.agility { .bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute.agility {
background-image: url("/systems/bol/ui/attributes/agility.webp"); background-image: url("/systems/bol/ui/attributes/agility.webp");
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center center; background-position: center 40%;
background-size: 64px 64px; background-size: 100px 100px;
} }
.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute.mind { .bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute.mind {
background-image: url("/systems/bol/ui/attributes/mind.webp"); background-image: url("/systems/bol/ui/attributes/mind.webp");
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center center; background-position: center 40%;
background-size: 64px 64px; background-size: 100px 100px;
} }
.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute.appeal { .bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute.appeal {
background-image: url("/systems/bol/ui/attributes/appeal.webp"); background-image: url("/systems/bol/ui/attributes/appeal.webp");
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center center; background-position: center 40%;
background-size: 64px 64px; background-size: 100px 100px;
} }
.bol.sheet.actor .window-content form .main .sheet-body .tab .attribute .stat-value { .bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute .stat-value {
margin-top: -10px; margin-top: -18px;
}
.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .attribute .stat-value.rounded {
background: transparent;
border: none;
box-shadow: none;
text-align: center;
line-height: 4rem;
}
.bol.sheet.actor .window-content .bol-actor-form .main .sheet-body .tab .aptitude .stat-value.rounded-border {
background: transparent;
text-align: center;
line-height: 4rem;
}
.bol.sheet.actor .resources-value {
text-align: center;
color: #4b4a44;
}
.bol.sheet.actor .inc-dec-btns-resource {
color: #8b0000;
}
.bol.sheet.actor .inc-dec-btns-resource:hover {
color: #4b4a44;
} }
.bol.sheet.actor .bol-footer { .bol.sheet.actor .bol-footer {
height: 62px; height: 62px;
@@ -855,7 +1114,6 @@ body.system-bol img#logo {
height: 30px; height: 30px;
max-height: 30px; max-height: 30px;
min-height: 30px; min-height: 30px;
background-color: black;
} }
.bol.sheet.actor .bol-footer .footer-right { .bol.sheet.actor .bol-footer .footer-right {
text-align: right; text-align: right;
@@ -911,6 +1169,7 @@ body.system-bol img#logo {
font-family: "Wolfsbane2Expanded", cursive; font-family: "Wolfsbane2Expanded", cursive;
font-size: 2rem; font-size: 2rem;
font-variant: small-caps; font-variant: small-caps;
color: #4b4a44;
} }
.bol.sheet.actor .rounded { .bol.sheet.actor .rounded {
border-radius: 100px; border-radius: 100px;
@@ -1052,27 +1311,212 @@ body.system-bol img#logo {
min-width: 460px; min-width: 460px;
min-height: 400px; min-height: 400px;
} }
.bol.sheet.item .window-content {
background: transparent !important;
color: #191813 !important;
padding: 10px;
overflow: hidden;
}
.bol.sheet.item .window-content .bol.sheet.item {
border: 10px solid transparent;
border-image: url("/systems/bol/ui/box-border-large.webp") 36 repeat;
border-image-outset: 1;
background: white !important;
color: #191813 !important;
margin: 0;
padding: 0;
height: 100%;
position: relative;
width: 100%;
display: flex;
flex-direction: column;
}
.bol.sheet.item .window-content .bol.sheet.item .wrap {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
}
.bol.sheet.item .window-content .bol.sheet.item .wrap .main {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
}
.bol.sheet.item .window-content .bol.sheet.item .wrap .main .sheet-body {
flex: 1;
min-height: 0;
overflow: hidden;
}
.bol.sheet.item .window-content .bol.sheet.item .wrap .main .sheet-body .tab {
display: none;
}
.bol.sheet.item .window-content .bol.sheet.item .wrap .main .sheet-body .tab.active {
display: block;
height: 100%;
overflow-y: auto;
}
.bol.sheet.item .window-content .bol.sheet.item .wrap .main .sheet-body .tab.properties {
padding: 5px 8px;
}
.bol.sheet.item .window-content .bol.sheet.item .sheet-header {
background-image: url("/systems/bol/ui/banner.webp");
background-size: 330px 62px;
background-position: 100% -15px;
background-repeat: no-repeat;
height: 115px;
min-height: 115px;
display: flex;
align-items: flex-end;
padding-bottom: 10px;
}
.bol.sheet.item .window-content .bol.sheet.item .sheet-header img.profile-img {
cursor: pointer;
border: none;
background-color: lightgray;
box-shadow: 5px 5px 5px black;
width: 96px;
height: 96px;
min-width: 96px;
min-height: 96px;
max-width: 96px;
max-height: 96px;
margin-right: 10px;
object-fit: cover;
}
.bol.sheet.item .window-content .bol.sheet.item .sheet-header .header-buttons {
align-self: flex-end;
padding-bottom: 10px;
}
.bol.sheet.item .window-content .bol.sheet.item .sheet-header .header-buttons .post-item {
color: #4b4a44;
background: rgba(0, 0, 0, 0.1);
border: 1px solid #999;
border-radius: 3px;
height: 32px;
width: 32px;
line-height: 30px;
cursor: pointer;
}
.bol.sheet.item .window-content .bol.sheet.item .sheet-header .header-buttons .post-item:hover {
color: #191813;
background: rgba(0, 0, 0, 0.2);
}
.bol.sheet.item .window-content .bol.sheet.item .tabs {
height: 44px;
background-color: black;
display: flex;
flex-shrink: 0;
}
.bol.sheet.item .window-content .bol.sheet.item .tabs a.item {
line-height: 44px;
font-weight: bold;
font-family: "CCMeanwhile", cursive;
color: white;
font-size: 0.9em;
}
.bol.sheet.item .window-content .bol.sheet.item .tabs a.item.active {
text-decoration: underline;
text-shadow: none;
}
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active {
color: #191813;
display: block;
overflow: auto;
}
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .editor,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .editor-content,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror p,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror div,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror span,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror h1,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror h2,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror h3,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .prosemirror h4,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .form-group:has(.prosemirror),
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.description.active .form-group:has(.editor) {
color: #191813 !important;
}
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties label,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties .form-group label,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties select,
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties input[type="text"],
.bol.sheet.item .window-content .bol.sheet.item .sheet-body .tab.properties input[type="number"] {
color: #191813;
}
.bol.sheet.item h1 input.itemname { .bol.sheet.item h1 input.itemname {
margin-top: 32px; margin-top: 0;
min-width: 24rem; min-width: 26.4rem;
font-family: "Wolfsbane2Expanded", cursive; font-family: "Wolfsbane2Expanded", cursive;
text-shadow: 3px 3px 5px #333;
}
.bol.sheet.item .window-content .bol.sheet.item .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin: 3px 0;
}
.bol.sheet.item .window-content .bol.sheet.item .form-group label {
flex: 0 0 40%;
color: #191813;
font-weight: bold;
}
.bol.sheet.item .window-content .bol.sheet.item .form-group input[type="checkbox"] {
flex: 0 0 auto;
width: 16px;
height: 16px;
margin: 0;
position: static;
top: auto;
cursor: pointer;
}
.bol.sheet.item .window-content .bol.sheet.item .form-group input[type="text"],
.bol.sheet.item .window-content .bol.sheet.item .form-group input[type="number"],
.bol.sheet.item .window-content .bol.sheet.item .form-group select,
.bol.sheet.item .window-content .bol.sheet.item .form-group .form-fields {
flex: 1;
}
.bol.sheet.item .window-content .bol.sheet.item label.checkbox {
display: flex;
flex-direction: row;
align-items: center;
gap: 6px;
color: #191813;
}
.bol.sheet.item .window-content .bol.sheet.item label.checkbox > input[type="checkbox"] {
position: static;
top: auto;
margin: 0;
flex: 0 0 auto;
}
.bol.sheet.item .window-content .bol.sheet.item input[type="text"],
.bol.sheet.item .window-content .bol.sheet.item input[type="number"],
.bol.sheet.item .window-content .bol.sheet.item input[type="text"]:hover,
.bol.sheet.item .window-content .bol.sheet.item input[type="number"]:hover,
.bol.sheet.item .window-content .bol.sheet.item input[type="text"]:focus,
.bol.sheet.item .window-content .bol.sheet.item input[type="number"]:focus,
.bol.sheet.item .window-content .bol.sheet.item select {
color: #191813;
background-color: #f0efe8;
border: 1px solid #999;
border-radius: 2px;
padding: 1px 4px;
}
.bol.sheet.item .window-content .bol.sheet.item select option {
background-color: #f0efe8;
color: #191813;
} }
.bol.sheet.item .item-properties { .bol.sheet.item .item-properties {
flex: 0 0 150px; margin: 5px 0;
margin: 5px 5px 5px 0; padding-bottom: 5px;
padding-right: 5px; border-bottom: 1px groove #eeede0;
border-right: 1px groove #eeede0;
}
.bol.sheet.item .item-properties .form-group {
margin: 0;
}
.bol.sheet.item .item-properties .form-group label {
line-height: 20px;
} }
.bol.sheet.item .item-properties .properties-list { .bol.sheet.item .item-properties .properties-list {
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
display: block;
} }
.bol.sheet.item .item-properties .properties-list li { .bol.sheet.item .item-properties .properties-list li {
margin: 3px 0; margin: 3px 0;

View File

@@ -1,3 +1,7 @@
export { default as BoLBaseItemSheet } from "./base-item-sheet.mjs" export { default as BoLBaseItemSheet } from "./base-item-sheet.mjs"
export { default as BoLItemSheet } from "./item-sheet.mjs" export { default as BoLItemSheet } from "./item-sheet.mjs"
export { default as BoLFeatureSheet } from "./feature-sheet.mjs" export { default as BoLFeatureSheet } from "./feature-sheet.mjs"
export { default as BoLBaseActorSheet } from "./base-actor-sheet.mjs"
export { default as BoLActorSheet } from "./actor-sheet.mjs"
export { default as BoLHordeSheet } from "./horde-sheet.mjs"
export { default as BoLVehicleSheet } from "./vehicle-sheet.mjs"

View File

@@ -0,0 +1,144 @@
import BoLBaseActorSheet from "./base-actor-sheet.mjs"
import { BoLUtility } from "../../system/bol-utility.js"
/**
* Actor Sheet for BoL characters and encounters using AppV2
*/
export default class BoLActorSheet extends BoLBaseActorSheet {
/** @override */
static DEFAULT_OPTIONS = {
...super.DEFAULT_OPTIONS,
classes: [...super.DEFAULT_OPTIONS.classes],
actions: {
...super.DEFAULT_OPTIONS.actions,
},
}
/** @override */
static PARTS = {
sheet: {
template: "systems/bol/templates/actor/actor-sheet.hbs",
},
}
/** @override */
tabGroups = { primary: "stats" }
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
const actor = this.document
context.data = actor.toObject()
context.details = actor.details
context.attributes = actor.attributes
context.aptitudes = actor.aptitudes
context.resources = actor.getResourcesFromType()
context.xp = actor.system.xp
context.equipment = actor.equipment
context.equipmentCreature = actor.equipmentCreature
context.weapons = actor.weapons
context.protections = actor.protections
context.spells = actor.spells
context.alchemy = actor.alchemy
context.containers = actor.containers
context.treasure = actor.treasure
context.boleffects = actor.boleffects
context.alchemyrecipe = actor.alchemyrecipe
context.horoscopes = actor.horoscopes
context.vehicles = actor.vehicles
context.fightoptions = actor.fightoptions
context.ammos = actor.ammos
context.misc = actor.misc
context.xplog = actor.xplog
context.combat = actor.buildCombat()
context.initiativeRank = actor.getInitiativeRank()
context.features = actor.buildFeatures()
context.options = this.options
context.editScore = this.options.editScore
context.useBougette = (actor.type === "character" && BoLUtility.getUseBougette()) || false
context.bougette = actor.getBougette()
context.charType = actor.getCharType()
context.villainy = actor.getVillainy()
context.isUndead = actor.isUndead()
context.biography = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
actor.system.details?.biography || "", { async: true }
)
context.notes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
actor.system.details?.notes || "", { async: true }
)
context.isSorcerer = actor.isSorcerer()
context.isAlchemist = actor.isAlchemist()
context.isAstrologer = actor.isAstrologer()
context.isMysteries = context.isSorcerer || context.isAlchemist || context.isAstrologer
context.isPriest = actor.isPriest()
context.horoscopeGroupList = game.settings.get("bol", "horoscope-group")
console.log("ACTORDATA (AppV2)", context)
return context
}
/** @override */
_activateListeners() {
super._activateListeners()
if (!this.isEditable) return
// Create generic item
this.element.querySelectorAll(".create-item").forEach((el) => {
el.addEventListener("click", () => {
this.actor.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("BOL.ui.newEquipment"), type: "item" }], { renderSheet: true })
})
})
// Create natural weapon
this.element.querySelectorAll(".create-natural-weapon").forEach((el) => {
el.addEventListener("click", () => {
const system = foundry.utils.duplicate(game.bol.config.defaultNaturalWeapon)
this.actor.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("BOL.ui.newNaturalWeapon"), type: "item", system }], { renderSheet: true })
})
})
// Create natural protection
this.element.querySelectorAll(".create-natural-protection").forEach((el) => {
el.addEventListener("click", () => {
const system = foundry.utils.duplicate(game.bol.config.defaultNaturalProtection)
this.actor.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("BOL.ui.newNaturalProtection"), type: "item", system }], { renderSheet: true })
})
})
// Item create via header dataset (type-based creation)
this.element.querySelectorAll(".item-create").forEach((el) => {
el.addEventListener("click", (ev) => {
ev.preventDefault()
const header = ev.currentTarget
const type = header.dataset.type
const data = foundry.utils.duplicate(header.dataset)
const name = `New ${type}`
delete data.type
this.actor.createEmbeddedDocuments("Item", [{ name, type, data }])
})
})
// Add XP Log entry
this.element.querySelectorAll(".xplog-add").forEach((el) => {
el.addEventListener("click", (ev) => {
ev.preventDefault()
this.actor.addXPLog("other", "Nouveau", 0, 0)
})
})
// Add item by category/subtype (equipment tab headers)
this.element.querySelectorAll(".item-add").forEach((el) => {
el.addEventListener("click", (ev) => {
ev.preventDefault()
const { itemType, category, subtype } = ev.currentTarget.dataset
const system = { category, subtype }
this.actor.createEmbeddedDocuments("Item", [{
name: game.i18n.localize("BOL.ui.newEquipment"),
type: itemType || "item",
system,
}], { renderSheet: true })
})
})
}
}

View File

@@ -0,0 +1,307 @@
const { HandlebarsApplicationMixin } = foundry.applications.api
import { BoLRoll } from "../../controllers/bol-rolls.js"
import { BoLUtility } from "../../system/bol-utility.js"
/**
* Base Actor Sheet for BoL system using AppV2
* @extends {ActorSheetV2}
*/
export default class BoLBaseActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {
constructor(options = {}) {
super(options)
this.#dragDrop = this.#createDragDropHandlers()
}
#dragDrop
/** @override */
static DEFAULT_OPTIONS = {
classes: ["bol", "sheet", "actor"],
position: {
width: 836,
height: 807,
},
form: {
submitOnChange: true,
closeOnSubmit: false,
},
window: {
resizable: true,
},
tabs: [
{
navSelector: "nav[data-group=\"primary\"]",
contentSelector: "section.sheet-body",
initial: "stats",
},
],
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
actions: {},
}
/** Tab groups state */
tabGroups = { primary: "stats" }
/** @override */
async _prepareContext() {
const actor = this.document
return {
actor,
system: actor.system,
config: game.bol.config,
isGM: game.user.isGM,
isEditable: this.isEditable,
owner: this.document.isOwner,
cssClass: this.options.classes.join(" "),
}
}
/** @override */
_onRender(context, options) {
super._onRender(context, options)
this.#dragDrop.forEach((d) => d.bind(this.element))
this._activateTabs()
this._activateListeners()
this._applyBackgroundImage()
this._activateImageEdit()
}
/**
* Apply background image to the actor form
* @private
*/
_applyBackgroundImage() {
const logoUrl = BoLUtility.getLogoActorSheet()
const form = this.element.querySelector(".bol-actor-form")
if (form) form.style.backgroundImage = `url(${logoUrl})`
}
/**
* Activate image editing via FilePicker
* @private
*/
_activateImageEdit() {
const img = this.element.querySelector('[data-edit="img"]')
if (img && this.isEditable) {
img.style.cursor = "pointer"
img.addEventListener("click", () => {
new FilePicker({
type: "image",
current: this.document.img,
callback: (path) => this.document.update({ img: path }),
}).browse()
})
}
}
/**
* Activate tab navigation
* @private
*/
_activateTabs() {
const nav = this.element.querySelector("nav[data-group]")
if (!nav) return
const group = nav.dataset.group
const activeTab = this.tabGroups[group] || "stats"
nav.querySelectorAll("[data-tab]").forEach((link) => {
const tab = link.dataset.tab
link.classList.toggle("active", tab === activeTab)
link.addEventListener("click", (event) => {
event.preventDefault()
this.tabGroups[group] = tab
this.render()
})
})
this.element.querySelectorAll(`[data-group="${group}"][data-tab]`).forEach((content) => {
content.classList.toggle("active", content.dataset.tab === activeTab)
})
}
/**
* Activate event listeners (replaces activateListeners with vanilla DOM)
* @private
*/
_activateListeners() {
if (!this.isEditable) return
// Item edit
this.element.querySelectorAll(".item-edit").forEach((el) => {
el.addEventListener("click", (ev) => {
const li = ev.currentTarget.closest(".item")
const item = this.actor.items.get(li?.dataset.itemId)
item?.sheet.render(true)
})
})
// Item delete
this.element.querySelectorAll(".item-delete").forEach((el) => {
el.addEventListener("click", (ev) => {
const li = ev.currentTarget.closest(".item")
const itemId = li?.dataset.itemId
Dialog.confirm({
title: game.i18n.localize("BOL.ui.deletetitle"),
content: game.i18n.localize("BOL.ui.confirmdelete"),
yes: () => {
this.actor.deleteEmbeddedDocuments("Item", [itemId])
li?.remove()
},
no: () => {},
defaultYes: false,
})
})
})
// Item equip/unequip
this.element.querySelectorAll(".item-equip").forEach((el) => {
el.addEventListener("click", (ev) => {
const li = ev.currentTarget.closest(".item")
const item = this.actor.items.get(li?.dataset.itemId)
if (item) this.actor.toggleEquipItem(item)
})
})
// Toggle fight option
this.element.querySelectorAll(".toggle-fight-option").forEach((el) => {
el.addEventListener("click", (ev) => {
const li = ev.currentTarget.closest(".item")
this.actor.toggleFightOption(li?.dataset.itemId)
})
})
// Inc/dec alchemy points
this.element.querySelectorAll(".inc-dec-btns-alchemy").forEach((el) => {
el.addEventListener("click", (ev) => {
const li = ev.currentTarget.closest(".item")
this.actor.spendAlchemyPoint(li?.dataset.itemId, 1)
})
})
// Inc/dec resource buttons
this.element.querySelectorAll(".inc-dec-btns-resource").forEach((el) => {
el.addEventListener("click", (ev) => {
const dataset = ev.currentTarget.dataset
this.actor.incDecResources(dataset.target, parseInt(dataset.incr))
})
})
// Generic inc/dec buttons for item fields
this.element.querySelectorAll(".inc-dec-btns").forEach((el) => {
el.addEventListener("click", (ev) => {
const li = ev.currentTarget.closest(".item")
if (!li) return
const item = this.actor.items.get(li.dataset.itemId)
if (!item) return
const dataset = ev.currentTarget.dataset
const operator = dataset.operator
const target = dataset.target
const incr = parseInt(dataset.incr)
const min = parseInt(dataset.min)
const max = parseInt(dataset.max) || 10000
// eslint-disable-next-line no-eval
let value = eval("item." + target) || 0
if (operator === "minus") value = value >= min + incr ? value - incr : min
if (operator === "plus") value = value <= max - incr ? value + incr : max
item.update({ [target]: value })
})
})
// Rollable elements
this.element.querySelectorAll(".rollable").forEach((el) => {
el.addEventListener("click", (ev) => this._onRoll(ev))
})
}
/**
* Handle clickable rolls (replaces _onRoll with vanilla DOM)
* @param {Event} event
* @private
*/
_onRoll(event) {
event.preventDefault()
const element = event.currentTarget
const dataset = element.dataset
const rollType = dataset.rollType
const li = element.closest(".item")
const itemId = li?.dataset.itemId
switch (rollType) {
case "attribute":
BoLRoll.attributeCheck(this.actor, dataset.key, event)
break
case "aptitude":
BoLRoll.aptitudeCheck(this.actor, dataset.key, event)
break
case "weapon":
BoLRoll.weaponCheck(this.actor, event)
break
case "spell":
BoLRoll.spellCheck(this.actor, event)
break
case "alchemy":
BoLRoll.alchemyCheck(this.actor, event)
break
case "protection":
this.actor.rollProtection(itemId)
break
case "damage":
this.actor.rollWeaponDamage(itemId)
break
case "aptitudexp":
this.actor.incAptitudeXP(dataset.key)
break
case "attributexp":
this.actor.incAttributeXP(dataset.key)
break
case "careerxp":
this.actor.incCareerXP(itemId)
break
case "horoscope-minor":
BoLRoll.horoscopeCheck(this.actor, event, "minor")
break
case "horoscope-major":
BoLRoll.horoscopeCheck(this.actor, event, "major")
break
case "horoscope-major-group":
BoLRoll.horoscopeCheck(this.actor, event, "majorgroup")
break
case "bougette":
this.actor.rollBougette()
break
default:
break
}
}
// #region Drag-and-Drop
#createDragDropHandlers() {
return (this.options.dragDrop || []).map((dragDrop) =>
new foundry.applications.ux.DragDrop.implementation({
...dragDrop,
permissions: {
dragstart: this._canDragStart.bind(this),
drop: this._canDragDrop.bind(this),
},
callbacks: {
dragstart: this._onDragStart.bind(this),
dragover: this._onDragOver.bind(this),
drop: this._onDrop.bind(this),
},
})
)
}
_canDragStart(selector) {
return this.isEditable
}
_canDragDrop(selector) {
return this.isEditable
}
// #endregion
}

View File

@@ -25,6 +25,13 @@ export default class BoLBaseItemSheet extends HandlebarsApplicationMixin(foundry
window: { window: {
resizable: true, resizable: true,
}, },
tabs: [
{
navSelector: 'nav[data-group="primary"]',
contentSelector: "section.sheet-body",
initial: "description",
},
],
actions: { actions: {
editImage: BoLBaseItemSheet.#onEditImage, editImage: BoLBaseItemSheet.#onEditImage,
postItem: BoLBaseItemSheet.#onPostItem, postItem: BoLBaseItemSheet.#onPostItem,
@@ -146,29 +153,34 @@ export default class BoLBaseItemSheet extends HandlebarsApplicationMixin(foundry
} }
/** /**
* Activate tab navigation * Activate tab navigation via CSS only (no re-render) to preserve unsaved form state.
* @private * @private
*/ */
_activateTabs() { _activateTabs() {
const nav = this.element.querySelector('nav.tabs[data-group="primary"]') const nav = this.element.querySelector('nav[data-group="primary"]')
if (!nav) return if (!nav) return
const section = this.element.querySelector('section.sheet-body')
if (!section) return
const activeTab = this.tabGroups.primary || "description" const activeTab = this.tabGroups.primary || "description"
// Activate tab links // Set initial active state
nav.querySelectorAll('[data-tab]').forEach(link => { nav.querySelectorAll('[data-tab]').forEach(link => {
const tab = link.dataset.tab link.classList.toggle('active', link.dataset.tab === activeTab)
link.classList.toggle('active', tab === activeTab)
link.addEventListener('click', (event) => {
event.preventDefault()
this.tabGroups.primary = tab
this.render()
}) })
section.querySelectorAll('[data-tab]').forEach(content => {
content.classList.toggle('active', content.dataset.tab === activeTab)
}) })
// Show/hide tab content // Tab click — CSS-only switch, no render()
this.element.querySelectorAll('.tab[data-tab]').forEach(content => { nav.querySelectorAll('[data-tab]').forEach(link => {
content.classList.toggle('active', content.dataset.tab === activeTab) link.addEventListener('click', (event) => {
event.preventDefault()
const tab = link.dataset.tab
this.tabGroups.primary = tab
nav.querySelectorAll('[data-tab]').forEach(l => l.classList.toggle('active', l.dataset.tab === tab))
section.querySelectorAll('[data-tab]').forEach(c => c.classList.toggle('active', c.dataset.tab === tab))
})
}) })
} }

View File

@@ -8,8 +8,7 @@ export default class BoLFeatureSheet extends BoLBaseItemSheet {
/** @override */ /** @override */
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
...super.DEFAULT_OPTIONS, classes: ["bol", "sheet", "item", "item-type-feature"],
classes: [...super.DEFAULT_OPTIONS.classes, "item-type-feature"],
} }
/** @override */ /** @override */

View File

@@ -0,0 +1,65 @@
import BoLBaseActorSheet from "./base-actor-sheet.mjs"
/**
* Actor Sheet for BoL hordes using AppV2
*/
export default class BoLHordeSheet extends BoLBaseActorSheet {
/** @override */
static DEFAULT_OPTIONS = {
...super.DEFAULT_OPTIONS,
classes: [...super.DEFAULT_OPTIONS.classes],
actions: {
...super.DEFAULT_OPTIONS.actions,
},
}
/** @override */
static PARTS = {
sheet: {
template: "systems/bol/templates/actor/horde-sheet.hbs",
},
}
/** @override */
tabGroups = { primary: "stats" }
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
const actor = this.document
context.options = this.options
context.editScore = this.options.editScore
context.description = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
actor.system.description || "", { async: true }
)
console.log("HORDE (AppV2)", context)
return context
}
/** @override */
_activateListeners() {
super._activateListeners()
if (!this.isEditable) return
// Item create via header dataset
this.element.querySelectorAll(".item-create").forEach((el) => {
el.addEventListener("click", (ev) => {
ev.preventDefault()
const header = ev.currentTarget
const type = header.dataset.type
const data = foundry.utils.duplicate(header.dataset)
delete data.type
this.actor.createEmbeddedDocuments("Item", [{ name: `New ${type}`, type, data }])
})
})
// Create generic item
this.element.querySelectorAll(".create_item").forEach((el) => {
el.addEventListener("click", () => {
this.actor.createEmbeddedDocuments("Item", [{ name: "Nouvel Equipement", type: "item" }], { renderSheet: true })
})
})
}
}

View File

@@ -8,8 +8,7 @@ export default class BoLItemSheet extends BoLBaseItemSheet {
/** @override */ /** @override */
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
...super.DEFAULT_OPTIONS, classes: ["bol", "sheet", "item", "item-type-item"],
classes: [...super.DEFAULT_OPTIONS.classes, "item-type-item"],
} }
/** @override */ /** @override */

View File

@@ -0,0 +1,66 @@
import BoLBaseActorSheet from "./base-actor-sheet.mjs"
/**
* Actor Sheet for BoL vehicles using AppV2
*/
export default class BoLVehicleSheet extends BoLBaseActorSheet {
/** @override */
static DEFAULT_OPTIONS = {
...super.DEFAULT_OPTIONS,
classes: [...super.DEFAULT_OPTIONS.classes],
actions: {
...super.DEFAULT_OPTIONS.actions,
},
}
/** @override */
static PARTS = {
sheet: {
template: "systems/bol/templates/actor/vehicle-sheet.hbs",
},
}
/** @override */
tabGroups = { primary: "stats" }
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
const actor = this.document
context.weapons = actor.vehicleWeapons
context.options = this.options
context.editScore = this.options.editScore
context.description = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
actor.system.description || "", { async: true }
)
console.log("VEHICLE (AppV2)", context)
return context
}
/** @override */
_activateListeners() {
super._activateListeners()
if (!this.isEditable) return
// Item create via header dataset
this.element.querySelectorAll(".item-create").forEach((el) => {
el.addEventListener("click", (ev) => {
ev.preventDefault()
const header = ev.currentTarget
const type = header.dataset.type
const data = foundry.utils.duplicate(header.dataset)
delete data.type
this.actor.createEmbeddedDocuments("Item", [{ name: `New ${type}`, type, data }])
})
})
// Create generic item
this.element.querySelectorAll(".create_item").forEach((el) => {
el.addEventListener("click", () => {
this.actor.createEmbeddedDocuments("Item", [{ name: "Nouvel Equipement", type: "item" }], { renderSheet: true })
})
})
}
}

View File

@@ -1,9 +1,7 @@
/* -------------------------------------------- */ /* -------------------------------------------- */
// Import Modules // Import Modules
import { BoLActor } from "./actor/actor.js" import { BoLActor } from "./actor/actor.js"
import { BoLActorSheet } from "./actor/actor-sheet.js" // AppV1 actor sheets kept for reference only (AppV2 used via sheets.* below)
import { BoLVehicleSheet } from "./actor/vehicle-sheet.js"
import { BoLHordeSheet } from "./actor/horde-sheet.js"
import { BoLItem } from "./item/item.js" import { BoLItem } from "./item/item.js"
// Note: Old BoLItemSheet (AppV1) is now replaced by AppV2 sheets // Note: Old BoLItemSheet (AppV1) is now replaced by AppV2 sheets
import { System, BOL } from "./system/config.js" import { System, BOL } from "./system/config.js"
@@ -72,9 +70,9 @@ Hooks.once('init', async function () {
// Register sheet application classes // Register sheet application classes
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet); foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
foundry.documents.collections.Actors.registerSheet("bol", BoLActorSheet, { types: ["character", "encounter"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet("bol", sheets.BoLActorSheet, { types: ["character", "encounter"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("bol", BoLVehicleSheet, { types: ["vehicle"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet("bol", sheets.BoLVehicleSheet, { types: ["vehicle"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("bol", BoLHordeSheet, { types: ["horde"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet("bol", sheets.BoLHordeSheet, { types: ["horde"], makeDefault: true })
// Register AppV2 Item Sheets // Register AppV2 Item Sheets
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet); foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);

View File

@@ -5,13 +5,46 @@ export default class BoLFeatureDataModel extends foundry.abstract.TypeDataModel
static defineSchema() { static defineSchema() {
const fields = foundry.data.fields; const fields = foundry.data.fields;
const requiredInteger = { required: true, nullable: false, integer: true }; const requiredInteger = { required: true, nullable: false, integer: true };
const nullableNumber = { required: false, nullable: true, initial: null };
return { return {
// Base fields // Base fields
category: new fields.StringField({ initial: "" }), category: new fields.StringField({ initial: "" }),
subtype: new fields.StringField({ initial: "default" }), subtype: new fields.StringField({ initial: "default" }),
description: new fields.HTMLField({ initial: "" }), description: new fields.HTMLField({ initial: "" }),
properties: new fields.SchemaField({}), properties: new fields.SchemaField({
// Career
sorcerer: new fields.BooleanField({ initial: false }),
alchemist: new fields.BooleanField({ initial: false }),
priest: new fields.BooleanField({ initial: false }),
astrologer: new fields.BooleanField({ initial: false }),
// Boon
isbonusdice: new fields.BooleanField({ initial: false }),
// Flaw
ismalusdice: new fields.BooleanField({ initial: false }),
// Fight option
fightoptiontype: new fields.StringField({ initial: "" }),
activated: new fields.BooleanField({ initial: false }),
isspecial: new fields.BooleanField({ initial: false }),
// Effect (boleffect)
identifier: new fields.StringField({ initial: "" }),
modifier: new fields.StringField({ initial: "" }),
// Horoscope
horoscopeanswer: new fields.StringField({ initial: "" }),
rank: new fields.NumberField({ ...nullableNumber }),
// XP log
xptype: new fields.StringField({ initial: "" }),
xpdate: new fields.StringField({ initial: "" }),
xpname: new fields.StringField({ initial: "" }),
xpcost: new fields.NumberField({ ...nullableNumber }),
xpvalue: new fields.NumberField({ ...nullableNumber }),
}),
// Feature-specific fields // Feature-specific fields
rank: new fields.NumberField({ ...requiredInteger, initial: 0 }) rank: new fields.NumberField({ ...requiredInteger, initial: 0 })

View File

@@ -5,6 +5,7 @@ export default class BoLItemDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const fields = foundry.data.fields; const fields = foundry.data.fields;
const requiredInteger = { required: true, nullable: false, integer: true }; const requiredInteger = { required: true, nullable: false, integer: true };
const nullableNumber = { required: false, nullable: true, initial: null };
return { return {
// Base fields // Base fields
@@ -12,6 +13,7 @@ export default class BoLItemDataModel extends foundry.abstract.TypeDataModel {
subtype: new fields.StringField({ initial: "default" }), subtype: new fields.StringField({ initial: "default" }),
description: new fields.HTMLField({ initial: "" }), description: new fields.HTMLField({ initial: "" }),
properties: new fields.SchemaField({ properties: new fields.SchemaField({
// Base flags
ranged: new fields.BooleanField({ initial: false }), ranged: new fields.BooleanField({ initial: false }),
melee: new fields.BooleanField({ initial: false }), melee: new fields.BooleanField({ initial: false }),
spell: new fields.BooleanField({ initial: false }), spell: new fields.BooleanField({ initial: false }),
@@ -27,7 +29,76 @@ export default class BoLItemDataModel extends foundry.abstract.TypeDataModel {
reloadable: new fields.BooleanField({ initial: false }), reloadable: new fields.BooleanField({ initial: false }),
bow: new fields.BooleanField({ initial: false }), bow: new fields.BooleanField({ initial: false }),
crossbow: new fields.BooleanField({ initial: false }), crossbow: new fields.BooleanField({ initial: false }),
throwing: new fields.BooleanField({ initial: false }) throwing: new fields.BooleanField({ initial: false }),
// Equipment
stackable: new fields.BooleanField({ initial: false }),
stacksize: new fields.NumberField({ ...nullableNumber }),
slot: new fields.StringField({ initial: "-" }),
// Weapon flags
natural: new fields.BooleanField({ initial: false }),
concealable: new fields.BooleanField({ initial: false }),
ignoreshield: new fields.BooleanField({ initial: false }),
attackBonusDice: new fields.BooleanField({ initial: false }),
attackMalusDice: new fields.BooleanField({ initial: false }),
onlymodifier: new fields.BooleanField({ initial: false }),
bashing: new fields.BooleanField({ initial: false }),
throwable: new fields.BooleanField({ initial: false }),
damageReroll1: new fields.BooleanField({ initial: false }),
// Weapon stats
attackAttribute: new fields.StringField({ initial: "vigor" }),
attackAptitude: new fields.StringField({ initial: "melee" }),
attackModifiers: new fields.NumberField({ ...nullableNumber }),
weaponSize: new fields.StringField({ initial: "unarmed" }),
damage: new fields.StringField({ initial: "0" }),
damageAttribute: new fields.StringField({ initial: "" }),
damageModifiers: new fields.NumberField({ ...nullableNumber }),
damageMultiplier: new fields.StringField({ initial: "1" }),
range: new fields.NumberField({ ...nullableNumber }),
reload: new fields.NumberField({ ...nullableNumber }),
// Protection
armorQuality: new fields.StringField({ initial: "" }),
soak: new fields.SchemaField({
formula: new fields.StringField({ initial: "" }),
value: new fields.NumberField({ initial: 0, nullable: true }),
modifier: new fields.NumberField({ initial: 0, nullable: true }),
}),
blocking: new fields.SchemaField({
malus: new fields.NumberField({ initial: 0, nullable: true }),
blocking1: new fields.BooleanField({ initial: false }),
blockingAll: new fields.BooleanField({ initial: false }),
}),
modifiers: new fields.SchemaField({
init: new fields.NumberField({ initial: 0, nullable: true }),
agility: new fields.NumberField({ initial: 0, nullable: true }),
powercost: new fields.NumberField({ initial: 0, nullable: true }),
social: new fields.BooleanField({ initial: false }),
}),
// Spell
circle: new fields.NumberField({ initial: 0, nullable: true }),
difficulty: new fields.StringField({ initial: "" }),
ppcost: new fields.NumberField({ initial: 0, nullable: true }),
duration: new fields.StringField({ initial: "" }),
nbmandatoryconditions: new fields.NumberField({ initial: 0, nullable: true }),
mandatoryconditions: new fields.ArrayField(new fields.StringField()),
optionnalconditions: new fields.ArrayField(new fields.StringField()),
// Alchemy
alchemytype: new fields.StringField({ initial: "" }),
pccost: new fields.NumberField({ initial: 0, nullable: true }),
pccurrent: new fields.NumberField({ initial: 0, nullable: true }),
// Vehicle weapon
isfiredamage: new fields.BooleanField({ initial: false }),
ishulldamage: new fields.BooleanField({ initial: false }),
iscrewdamage: new fields.BooleanField({ initial: false }),
isboarding: new fields.BooleanField({ initial: false }),
isspur: new fields.BooleanField({ initial: false }),
isbreakrow: new fields.BooleanField({ initial: false }),
}), }),
// Equipment fields // Equipment fields

View File

@@ -237,6 +237,11 @@ export class BoLUtility {
if (chatData.img.includes("/blank.png")) { if (chatData.img.includes("/blank.png")) {
chatData.img = null; chatData.img = null;
} }
// For old-format weapon items lacking stat fields, apply defaults so the chat card can display them
if (chatData.system?.properties?.weapon && !chatData.system.properties.damage) {
const defaults = game.bol.config.defaultNaturalWeapon?.properties ?? {};
chatData.system.properties = Object.assign(foundry.utils.duplicate(defaults), chatData.system.properties);
}
// JSON object for easy creation // JSON object for easy creation
chatData.jsondata = JSON.stringify( chatData.jsondata = JSON.stringify(
{ {

View File

@@ -1 +1 @@
MANIFEST-000969 MANIFEST-001072

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.199598 7fad373ff6c0 Recovering log #967 2026/02/28-17:23:52.883622 7f56f93fe6c0 Recovering log #1070
2026/01/13-08:07:30.210270 7fad373ff6c0 Delete type=3 #965 2026/02/28-17:23:52.893895 7f56f93fe6c0 Delete type=3 #1068
2026/01/13-08:07:30.210357 7fad373ff6c0 Delete type=0 #967 2026/02/28-17:23:52.893967 7f56f93fe6c0 Delete type=0 #1070

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.360616 7fad35bfc6c0 Recovering log #963 2026/02/28-16:33:30.670789 7f56f9bff6c0 Recovering log #1066
2026/01/13-00:31:14.370734 7fad35bfc6c0 Delete type=3 #961 2026/02/28-16:33:30.681105 7f56f9bff6c0 Delete type=3 #1064
2026/01/13-00:31:14.370788 7fad35bfc6c0 Delete type=0 #963 2026/02/28-16:33:30.681173 7f56f9bff6c0 Delete type=0 #1066
2026/01/13-00:33:18.090132 7fad353fb6c0 Level-0 table #968: started 2026/02/28-17:23:47.157740 7f54e37ef6c0 Level-0 table #1071: started
2026/01/13-00:33:18.090168 7fad353fb6c0 Level-0 table #968: 0 bytes OK 2026/02/28-17:23:47.157777 7f54e37ef6c0 Level-0 table #1071: 0 bytes OK
2026/01/13-00:33:18.096686 7fad353fb6c0 Delete type=0 #966 2026/02/28-17:23:47.163664 7f54e37ef6c0 Delete type=0 #1069
2026/01/13-00:33:18.110856 7fad353fb6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.170059 7f54e37ef6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.110909 7fad353fb6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.170090 7f54e37ef6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000874 MANIFEST-000977

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.170497 7fad363fd6c0 Recovering log #872 2026/02/28-17:23:52.858522 7f56e3fff6c0 Recovering log #975
2026/01/13-08:07:30.181911 7fad363fd6c0 Delete type=3 #870 2026/02/28-17:23:52.869495 7f56e3fff6c0 Delete type=3 #973
2026/01/13-08:07:30.182023 7fad363fd6c0 Delete type=0 #872 2026/02/28-17:23:52.869552 7f56e3fff6c0 Delete type=0 #975

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.336061 7fad36bfe6c0 Recovering log #868 2026/02/28-16:33:30.644599 7f56e3fff6c0 Recovering log #971
2026/01/13-00:31:14.346068 7fad36bfe6c0 Delete type=3 #866 2026/02/28-16:33:30.654938 7f56e3fff6c0 Delete type=3 #969
2026/01/13-00:31:14.346144 7fad36bfe6c0 Delete type=0 #868 2026/02/28-16:33:30.655008 7f56e3fff6c0 Delete type=0 #971
2026/01/13-00:33:18.103240 7fad353fb6c0 Level-0 table #873: started 2026/02/28-17:23:47.144484 7f54e37ef6c0 Level-0 table #976: started
2026/01/13-00:33:18.103270 7fad353fb6c0 Level-0 table #873: 0 bytes OK 2026/02/28-17:23:47.144510 7f54e37ef6c0 Level-0 table #976: 0 bytes OK
2026/01/13-00:33:18.110698 7fad353fb6c0 Delete type=0 #871 2026/02/28-17:23:47.151643 7f54e37ef6c0 Delete type=0 #974
2026/01/13-00:33:18.110885 7fad353fb6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.170034 7f54e37ef6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.110931 7fad353fb6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.170076 7f54e37ef6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000968 MANIFEST-001071

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.052912 7fad35bfc6c0 Recovering log #966 2026/02/28-17:23:52.757933 7f56f9bff6c0 Recovering log #1069
2026/01/13-08:07:30.063608 7fad35bfc6c0 Delete type=3 #964 2026/02/28-17:23:52.767692 7f56f9bff6c0 Delete type=3 #1067
2026/01/13-08:07:30.063709 7fad35bfc6c0 Delete type=0 #966 2026/02/28-17:23:52.767761 7f56f9bff6c0 Delete type=0 #1069

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.236837 7fad373ff6c0 Recovering log #962 2026/02/28-16:33:30.543841 7f56e3fff6c0 Recovering log #1065
2026/01/13-00:31:14.246601 7fad373ff6c0 Delete type=3 #960 2026/02/28-16:33:30.553998 7f56e3fff6c0 Delete type=3 #1063
2026/01/13-00:31:14.246657 7fad373ff6c0 Delete type=0 #962 2026/02/28-16:33:30.554062 7f56e3fff6c0 Delete type=0 #1065
2026/01/13-00:33:18.044085 7fad353fb6c0 Level-0 table #967: started 2026/02/28-17:23:47.101088 7f54e37ef6c0 Level-0 table #1070: started
2026/01/13-00:33:18.044110 7fad353fb6c0 Level-0 table #967: 0 bytes OK 2026/02/28-17:23:47.101118 7f54e37ef6c0 Level-0 table #1070: 0 bytes OK
2026/01/13-00:33:18.050908 7fad353fb6c0 Delete type=0 #965 2026/02/28-17:23:47.107544 7f54e37ef6c0 Delete type=0 #1068
2026/01/13-00:33:18.057401 7fad353fb6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.119520 7f54e37ef6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.057428 7fad353fb6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.119595 7f54e37ef6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000967 MANIFEST-001070

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.067310 7fad373ff6c0 Recovering log #965 2026/02/28-17:23:52.769847 7f56f93fe6c0 Recovering log #1068
2026/01/13-08:07:30.078796 7fad373ff6c0 Delete type=3 #963 2026/02/28-17:23:52.780583 7f56f93fe6c0 Delete type=3 #1066
2026/01/13-08:07:30.078908 7fad373ff6c0 Delete type=0 #965 2026/02/28-17:23:52.780639 7f56f93fe6c0 Delete type=0 #1068

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.249012 7fad36bfe6c0 Recovering log #961 2026/02/28-16:33:30.556447 7f56f9bff6c0 Recovering log #1064
2026/01/13-00:31:14.258675 7fad36bfe6c0 Delete type=3 #959 2026/02/28-16:33:30.566208 7f56f9bff6c0 Delete type=3 #1062
2026/01/13-00:31:14.258729 7fad36bfe6c0 Delete type=0 #961 2026/02/28-16:33:30.566291 7f56f9bff6c0 Delete type=0 #1064
2026/01/13-00:33:18.037279 7fad353fb6c0 Level-0 table #966: started 2026/02/28-17:23:47.107642 7f54e37ef6c0 Level-0 table #1069: started
2026/01/13-00:33:18.037321 7fad353fb6c0 Level-0 table #966: 0 bytes OK 2026/02/28-17:23:47.107677 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK
2026/01/13-00:33:18.043985 7fad353fb6c0 Delete type=0 #964 2026/02/28-17:23:47.113550 7f54e37ef6c0 Delete type=0 #1067
2026/01/13-00:33:18.057393 7fad353fb6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.119530 7f54e37ef6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.057422 7fad353fb6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.119574 7f54e37ef6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000967 MANIFEST-001070

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.097111 7fad35bfc6c0 Recovering log #965 2026/02/28-17:23:52.796426 7f56f9bff6c0 Recovering log #1068
2026/01/13-08:07:30.108030 7fad35bfc6c0 Delete type=3 #963 2026/02/28-17:23:52.805920 7f56f9bff6c0 Delete type=3 #1066
2026/01/13-08:07:30.108147 7fad35bfc6c0 Delete type=0 #965 2026/02/28-17:23:52.805973 7f56f9bff6c0 Delete type=0 #1068

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.273174 7fad373ff6c0 Recovering log #961 2026/02/28-16:33:30.581375 7f56f8bfd6c0 Recovering log #1064
2026/01/13-00:31:14.283828 7fad373ff6c0 Delete type=3 #959 2026/02/28-16:33:30.592412 7f56f8bfd6c0 Delete type=3 #1062
2026/01/13-00:31:14.283908 7fad373ff6c0 Delete type=0 #961 2026/02/28-16:33:30.592492 7f56f8bfd6c0 Delete type=0 #1064
2026/01/13-00:33:18.051012 7fad353fb6c0 Level-0 table #966: started 2026/02/28-17:23:47.113620 7f54e37ef6c0 Level-0 table #1069: started
2026/01/13-00:33:18.051036 7fad353fb6c0 Level-0 table #966: 0 bytes OK 2026/02/28-17:23:47.113644 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK
2026/01/13-00:33:18.057270 7fad353fb6c0 Delete type=0 #964 2026/02/28-17:23:47.119422 7f54e37ef6c0 Delete type=0 #1067
2026/01/13-00:33:18.057409 7fad353fb6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.119541 7f54e37ef6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.057437 7fad353fb6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.119585 7f54e37ef6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000965 MANIFEST-001068

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.299106 7fad35bfc6c0 Recovering log #963 2026/02/28-17:23:52.970603 7f56f9bff6c0 Recovering log #1066
2026/01/13-08:07:30.310415 7fad35bfc6c0 Delete type=3 #961 2026/02/28-17:23:52.981835 7f56f9bff6c0 Delete type=3 #1064
2026/01/13-08:07:30.310500 7fad35bfc6c0 Delete type=0 #963 2026/02/28-17:23:52.981888 7f56f9bff6c0 Delete type=0 #1066

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.446842 7fad363fd6c0 Recovering log #959 2026/02/28-16:33:30.759164 7f56f9bff6c0 Recovering log #1062
2026/01/13-00:31:14.457714 7fad363fd6c0 Delete type=3 #957 2026/02/28-16:33:30.769105 7f56f9bff6c0 Delete type=3 #1060
2026/01/13-00:31:14.457795 7fad363fd6c0 Delete type=0 #959 2026/02/28-16:33:30.769164 7f56f9bff6c0 Delete type=0 #1062
2026/01/13-00:33:18.151324 7fad353fb6c0 Level-0 table #964: started 2026/02/28-17:23:47.203516 7f54e37ef6c0 Level-0 table #1067: started
2026/01/13-00:33:18.151382 7fad353fb6c0 Level-0 table #964: 0 bytes OK 2026/02/28-17:23:47.203569 7f54e37ef6c0 Level-0 table #1067: 0 bytes OK
2026/01/13-00:33:18.157882 7fad353fb6c0 Delete type=0 #962 2026/02/28-17:23:47.210686 7f54e37ef6c0 Delete type=0 #1065
2026/01/13-00:33:18.164702 7fad353fb6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.224578 7f54e37ef6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.175125 7fad353fb6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.224615 7f54e37ef6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000968 MANIFEST-001071

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.141144 7fad36bfe6c0 Recovering log #966 2026/02/28-17:23:52.834261 7f56f9bff6c0 Recovering log #1069
2026/01/13-08:07:30.151959 7fad36bfe6c0 Delete type=3 #964 2026/02/28-17:23:52.843912 7f56f9bff6c0 Delete type=3 #1067
2026/01/13-08:07:30.152081 7fad36bfe6c0 Delete type=0 #966 2026/02/28-17:23:52.843969 7f56f9bff6c0 Delete type=0 #1069

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.310520 7fad373ff6c0 Recovering log #962 2026/02/28-16:33:30.620158 7f56f9bff6c0 Recovering log #1065
2026/01/13-00:31:14.320991 7fad373ff6c0 Delete type=3 #960 2026/02/28-16:33:30.630293 7f56f9bff6c0 Delete type=3 #1063
2026/01/13-00:31:14.321051 7fad373ff6c0 Delete type=0 #962 2026/02/28-16:33:30.630363 7f56f9bff6c0 Delete type=0 #1065
2026/01/13-00:33:18.069718 7fad353fb6c0 Level-0 table #967: started 2026/02/28-17:23:47.126363 7f54e37ef6c0 Level-0 table #1070: started
2026/01/13-00:33:18.069745 7fad353fb6c0 Level-0 table #967: 0 bytes OK 2026/02/28-17:23:47.126384 7f54e37ef6c0 Level-0 table #1070: 0 bytes OK
2026/01/13-00:33:18.076816 7fad353fb6c0 Delete type=0 #965 2026/02/28-17:23:47.132261 7f54e37ef6c0 Delete type=0 #1068
2026/01/13-00:33:18.083350 7fad353fb6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.144361 7f54e37ef6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.083400 7fad353fb6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.144409 7f54e37ef6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000967 MANIFEST-001070

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.243235 7fad36bfe6c0 Recovering log #965 2026/02/28-17:23:52.920377 7f56e3fff6c0 Recovering log #1068
2026/01/13-08:07:30.253392 7fad36bfe6c0 Delete type=3 #963 2026/02/28-17:23:52.930570 7f56e3fff6c0 Delete type=3 #1066
2026/01/13-08:07:30.253472 7fad36bfe6c0 Delete type=0 #965 2026/02/28-17:23:52.930642 7f56e3fff6c0 Delete type=0 #1068

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.398650 7fad36bfe6c0 Recovering log #961 2026/02/28-16:33:30.708467 7f56e3fff6c0 Recovering log #1064
2026/01/13-00:31:14.408258 7fad36bfe6c0 Delete type=3 #959 2026/02/28-16:33:30.718300 7f56e3fff6c0 Delete type=3 #1062
2026/01/13-00:31:14.408316 7fad36bfe6c0 Delete type=0 #961 2026/02/28-16:33:30.718379 7f56e3fff6c0 Delete type=0 #1064
2026/01/13-00:33:18.117431 7fad353fb6c0 Level-0 table #966: started 2026/02/28-17:23:47.176664 7f54e37ef6c0 Level-0 table #1069: started
2026/01/13-00:33:18.117458 7fad353fb6c0 Level-0 table #966: 0 bytes OK 2026/02/28-17:23:47.176691 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK
2026/01/13-00:33:18.123956 7fad353fb6c0 Delete type=0 #964 2026/02/28-17:23:47.182879 7f54e37ef6c0 Delete type=0 #1067
2026/01/13-00:33:18.137577 7fad353fb6c0 Manual compaction at level-0 from '!items!AoT2c0af4lY6aBsx' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.196873 7f54e37ef6c0 Manual compaction at level-0 from '!items!AoT2c0af4lY6aBsx' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.137619 7fad353fb6c0 Manual compaction at level-1 from '!items!AoT2c0af4lY6aBsx' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.196911 7f54e37ef6c0 Manual compaction at level-1 from '!items!AoT2c0af4lY6aBsx' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000450 MANIFEST-000553

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.256588 7fad35bfc6c0 Recovering log #448 2026/02/28-17:23:52.933111 7f56f9bff6c0 Recovering log #551
2026/01/13-08:07:30.267581 7fad35bfc6c0 Delete type=3 #446 2026/02/28-17:23:52.944230 7f56f9bff6c0 Delete type=3 #549
2026/01/13-08:07:30.267689 7fad35bfc6c0 Delete type=0 #448 2026/02/28-17:23:52.944299 7f56f9bff6c0 Delete type=0 #551

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.410555 7fad363fd6c0 Recovering log #444 2026/02/28-16:33:30.720629 7f56f93fe6c0 Recovering log #547
2026/01/13-00:31:14.420238 7fad363fd6c0 Delete type=3 #442 2026/02/28-16:33:30.730500 7f56f93fe6c0 Delete type=3 #545
2026/01/13-00:31:14.420295 7fad363fd6c0 Delete type=0 #444 2026/02/28-16:33:30.730560 7f56f93fe6c0 Delete type=0 #547
2026/01/13-00:33:18.124112 7fad353fb6c0 Level-0 table #449: started 2026/02/28-17:23:47.170169 7f54e37ef6c0 Level-0 table #552: started
2026/01/13-00:33:18.124145 7fad353fb6c0 Level-0 table #449: 0 bytes OK 2026/02/28-17:23:47.170192 7f54e37ef6c0 Level-0 table #552: 0 bytes OK
2026/01/13-00:33:18.131131 7fad353fb6c0 Delete type=0 #447 2026/02/28-17:23:47.176521 7f54e37ef6c0 Delete type=0 #550
2026/01/13-00:33:18.137587 7fad353fb6c0 Manual compaction at level-0 from '!items!CLRp0k5qV8mD03pW' @ 72057594037927935 : 1 .. '!items!wYEpnhbyYaMkaNdL' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.196862 7f54e37ef6c0 Manual compaction at level-0 from '!items!CLRp0k5qV8mD03pW' @ 72057594037927935 : 1 .. '!items!wYEpnhbyYaMkaNdL' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.137626 7fad353fb6c0 Manual compaction at level-1 from '!items!CLRp0k5qV8mD03pW' @ 72057594037927935 : 1 .. '!items!wYEpnhbyYaMkaNdL' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.196905 7f54e37ef6c0 Manual compaction at level-1 from '!items!CLRp0k5qV8mD03pW' @ 72057594037927935 : 1 .. '!items!wYEpnhbyYaMkaNdL' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000968 MANIFEST-001071

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.082049 7fad363fd6c0 Recovering log #966 2026/02/28-17:23:52.782908 7f56e3fff6c0 Recovering log #1069
2026/01/13-08:07:30.092988 7fad363fd6c0 Delete type=3 #964 2026/02/28-17:23:52.794098 7f56e3fff6c0 Delete type=3 #1067
2026/01/13-08:07:30.093097 7fad363fd6c0 Delete type=0 #966 2026/02/28-17:23:52.794177 7f56e3fff6c0 Delete type=0 #1069

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.260770 7fad363fd6c0 Recovering log #962 2026/02/28-16:33:30.568367 7f56f93fe6c0 Recovering log #1065
2026/01/13-00:31:14.270998 7fad363fd6c0 Delete type=3 #960 2026/02/28-16:33:30.578749 7f56f93fe6c0 Delete type=3 #1063
2026/01/13-00:31:14.271071 7fad363fd6c0 Delete type=0 #962 2026/02/28-16:33:30.578812 7f56f93fe6c0 Delete type=0 #1065
2026/01/13-00:33:18.030429 7fad353fb6c0 Level-0 table #967: started 2026/02/28-17:23:47.094442 7f54e37ef6c0 Level-0 table #1070: started
2026/01/13-00:33:18.030470 7fad353fb6c0 Level-0 table #967: 0 bytes OK 2026/02/28-17:23:47.094487 7f54e37ef6c0 Level-0 table #1070: 0 bytes OK
2026/01/13-00:33:18.037118 7fad353fb6c0 Delete type=0 #965 2026/02/28-17:23:47.100985 7f54e37ef6c0 Delete type=0 #1068
2026/01/13-00:33:18.057382 7fad353fb6c0 Manual compaction at level-0 from '!items!0wCqg1UpGd50uJrS' @ 72057594037927935 : 1 .. '!items!znd0K3b7HzYpdehs' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.119507 7f54e37ef6c0 Manual compaction at level-0 from '!items!0wCqg1UpGd50uJrS' @ 72057594037927935 : 1 .. '!items!znd0K3b7HzYpdehs' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.057416 7fad353fb6c0 Manual compaction at level-1 from '!items!0wCqg1UpGd50uJrS' @ 72057594037927935 : 1 .. '!items!znd0K3b7HzYpdehs' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.119555 7f54e37ef6c0 Manual compaction at level-1 from '!items!0wCqg1UpGd50uJrS' @ 72057594037927935 : 1 .. '!items!znd0K3b7HzYpdehs' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000967 MANIFEST-001070

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.213893 7fad363fd6c0 Recovering log #965 2026/02/28-17:23:52.896387 7f56f9bff6c0 Recovering log #1068
2026/01/13-08:07:30.225009 7fad363fd6c0 Delete type=3 #963 2026/02/28-17:23:52.906464 7f56f9bff6c0 Delete type=3 #1066
2026/01/13-08:07:30.225096 7fad363fd6c0 Delete type=0 #965 2026/02/28-17:23:52.906539 7f56f9bff6c0 Delete type=0 #1068

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.372945 7fad363fd6c0 Recovering log #961 2026/02/28-16:33:30.684377 7f56f8bfd6c0 Recovering log #1064
2026/01/13-00:31:14.383623 7fad363fd6c0 Delete type=3 #959 2026/02/28-16:33:30.694121 7f56f8bfd6c0 Delete type=3 #1062
2026/01/13-00:31:14.383679 7fad363fd6c0 Delete type=0 #961 2026/02/28-16:33:30.694253 7f56f8bfd6c0 Delete type=0 #1064
2026/01/13-00:33:18.096825 7fad353fb6c0 Level-0 table #966: started 2026/02/28-17:23:47.163767 7f54e37ef6c0 Level-0 table #1069: started
2026/01/13-00:33:18.096859 7fad353fb6c0 Level-0 table #966: 0 bytes OK 2026/02/28-17:23:47.163790 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK
2026/01/13-00:33:18.103126 7fad353fb6c0 Delete type=0 #964 2026/02/28-17:23:47.169941 7f54e37ef6c0 Delete type=0 #1067
2026/01/13-00:33:18.110872 7fad353fb6c0 Manual compaction at level-0 from '!items!46qF6OBN5gf0dqWc' @ 72057594037927935 : 1 .. '!items!vaAQiuAHdyQrQiUX' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.170068 7f54e37ef6c0 Manual compaction at level-0 from '!items!46qF6OBN5gf0dqWc' @ 72057594037927935 : 1 .. '!items!vaAQiuAHdyQrQiUX' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.110920 7fad353fb6c0 Manual compaction at level-1 from '!items!46qF6OBN5gf0dqWc' @ 72057594037927935 : 1 .. '!items!vaAQiuAHdyQrQiUX' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.170097 7f54e37ef6c0 Manual compaction at level-1 from '!items!46qF6OBN5gf0dqWc' @ 72057594037927935 : 1 .. '!items!vaAQiuAHdyQrQiUX' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000967 MANIFEST-001070

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.285456 7fad373ff6c0 Recovering log #965 2026/02/28-17:23:52.958813 7f56e3fff6c0 Recovering log #1068
2026/01/13-08:07:30.295903 7fad373ff6c0 Delete type=3 #963 2026/02/28-17:23:52.968345 7f56e3fff6c0 Delete type=3 #1066
2026/01/13-08:07:30.295998 7fad373ff6c0 Delete type=0 #965 2026/02/28-17:23:52.968393 7f56e3fff6c0 Delete type=0 #1068

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.434032 7fad36bfe6c0 Recovering log #961 2026/02/28-16:33:30.745872 7f56f93fe6c0 Recovering log #1064
2026/01/13-00:31:14.444388 7fad36bfe6c0 Delete type=3 #959 2026/02/28-16:33:30.756473 7f56f93fe6c0 Delete type=3 #1062
2026/01/13-00:31:14.444475 7fad36bfe6c0 Delete type=0 #961 2026/02/28-16:33:30.756549 7f56f93fe6c0 Delete type=0 #1064
2026/01/13-00:33:18.158035 7fad353fb6c0 Level-0 table #966: started 2026/02/28-17:23:47.196995 7f54e37ef6c0 Level-0 table #1069: started
2026/01/13-00:33:18.158068 7fad353fb6c0 Level-0 table #966: 0 bytes OK 2026/02/28-17:23:47.197070 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK
2026/01/13-00:33:18.164518 7fad353fb6c0 Delete type=0 #964 2026/02/28-17:23:47.203333 7f54e37ef6c0 Delete type=0 #1067
2026/01/13-00:33:18.164715 7fad353fb6c0 Manual compaction at level-0 from '!items!0Yhn3r8AFsKXEKeS' @ 72057594037927935 : 1 .. '!items!xVWrSPiX0Nwccsn6' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.224558 7f54e37ef6c0 Manual compaction at level-0 from '!items!0Yhn3r8AFsKXEKeS' @ 72057594037927935 : 1 .. '!items!xVWrSPiX0Nwccsn6' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.164827 7fad353fb6c0 Manual compaction at level-1 from '!items!0Yhn3r8AFsKXEKeS' @ 72057594037927935 : 1 .. '!items!xVWrSPiX0Nwccsn6' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.224608 7f54e37ef6c0 Manual compaction at level-1 from '!items!0Yhn3r8AFsKXEKeS' @ 72057594037927935 : 1 .. '!items!xVWrSPiX0Nwccsn6' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000967 MANIFEST-001070

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.112173 7fad373ff6c0 Recovering log #965 2026/02/28-17:23:52.807927 7f56f93fe6c0 Recovering log #1068
2026/01/13-08:07:30.123346 7fad373ff6c0 Delete type=3 #963 2026/02/28-17:23:52.818186 7f56f93fe6c0 Delete type=3 #1066
2026/01/13-08:07:30.123478 7fad373ff6c0 Delete type=0 #965 2026/02/28-17:23:52.818257 7f56f93fe6c0 Delete type=0 #1068

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.286076 7fad35bfc6c0 Recovering log #961 2026/02/28-16:33:30.595096 7f56f9bff6c0 Recovering log #1064
2026/01/13-00:31:14.295737 7fad35bfc6c0 Delete type=3 #959 2026/02/28-16:33:30.604934 7f56f9bff6c0 Delete type=3 #1062
2026/01/13-00:31:14.295823 7fad35bfc6c0 Delete type=0 #961 2026/02/28-16:33:30.604985 7f56f9bff6c0 Delete type=0 #1064
2026/01/13-00:33:18.063638 7fad353fb6c0 Level-0 table #966: started 2026/02/28-17:23:47.132350 7f54e37ef6c0 Level-0 table #1069: started
2026/01/13-00:33:18.063660 7fad353fb6c0 Level-0 table #966: 0 bytes OK 2026/02/28-17:23:47.132377 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK
2026/01/13-00:33:18.069632 7fad353fb6c0 Delete type=0 #964 2026/02/28-17:23:47.138287 7f54e37ef6c0 Delete type=0 #1067
2026/01/13-00:33:18.083342 7fad353fb6c0 Manual compaction at level-0 from '!items!2Wtl8xrKf46LMwBF' @ 72057594037927935 : 1 .. '!items!zIlZmEd9WAA473UX' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.144369 7f54e37ef6c0 Manual compaction at level-0 from '!items!2Wtl8xrKf46LMwBF' @ 72057594037927935 : 1 .. '!items!zIlZmEd9WAA473UX' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.083376 7fad353fb6c0 Manual compaction at level-1 from '!items!2Wtl8xrKf46LMwBF' @ 72057594037927935 : 1 .. '!items!zIlZmEd9WAA473UX' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.144403 7f54e37ef6c0 Manual compaction at level-1 from '!items!2Wtl8xrKf46LMwBF' @ 72057594037927935 : 1 .. '!items!zIlZmEd9WAA473UX' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000967 MANIFEST-001070

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.270517 7fad363fd6c0 Recovering log #965 2026/02/28-17:23:52.947009 7f56f93fe6c0 Recovering log #1068
2026/01/13-08:07:30.282336 7fad363fd6c0 Delete type=3 #963 2026/02/28-17:23:52.956752 7f56f93fe6c0 Delete type=3 #1066
2026/01/13-08:07:30.282475 7fad363fd6c0 Delete type=0 #965 2026/02/28-17:23:52.956816 7f56f93fe6c0 Delete type=0 #1068

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.421946 7fad35bfc6c0 Recovering log #961 2026/02/28-16:33:30.732884 7f56f9bff6c0 Recovering log #1064
2026/01/13-00:31:14.431615 7fad35bfc6c0 Delete type=3 #959 2026/02/28-16:33:30.743613 7f56f9bff6c0 Delete type=3 #1062
2026/01/13-00:31:14.431688 7fad35bfc6c0 Delete type=0 #961 2026/02/28-16:33:30.743678 7f56f9bff6c0 Delete type=0 #1064
2026/01/13-00:33:18.131253 7fad353fb6c0 Level-0 table #966: started 2026/02/28-17:23:47.190627 7f54e37ef6c0 Level-0 table #1069: started
2026/01/13-00:33:18.131283 7fad353fb6c0 Level-0 table #966: 0 bytes OK 2026/02/28-17:23:47.190673 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK
2026/01/13-00:33:18.137434 7fad353fb6c0 Delete type=0 #964 2026/02/28-17:23:47.196754 7f54e37ef6c0 Delete type=0 #1067
2026/01/13-00:33:18.137604 7fad353fb6c0 Manual compaction at level-0 from '!items!0a8UFoCOd3D35WBb' @ 72057594037927935 : 1 .. '!items!y9NHZCxKXMZEqcRo' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.196895 7f54e37ef6c0 Manual compaction at level-0 from '!items!0a8UFoCOd3D35WBb' @ 72057594037927935 : 1 .. '!items!y9NHZCxKXMZEqcRo' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.137633 7fad353fb6c0 Manual compaction at level-1 from '!items!0a8UFoCOd3D35WBb' @ 72057594037927935 : 1 .. '!items!y9NHZCxKXMZEqcRo' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.196926 7f54e37ef6c0 Manual compaction at level-1 from '!items!0a8UFoCOd3D35WBb' @ 72057594037927935 : 1 .. '!items!y9NHZCxKXMZEqcRo' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000967 MANIFEST-001070

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.127058 7fad363fd6c0 Recovering log #965 2026/02/28-17:23:52.820409 7f56e3fff6c0 Recovering log #1068
2026/01/13-08:07:30.137403 7fad363fd6c0 Delete type=3 #963 2026/02/28-17:23:52.831852 7f56e3fff6c0 Delete type=3 #1066
2026/01/13-08:07:30.137554 7fad363fd6c0 Delete type=0 #965 2026/02/28-17:23:52.831927 7f56e3fff6c0 Delete type=0 #1068

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.298047 7fad363fd6c0 Recovering log #961 2026/02/28-16:33:30.607336 7f56e3fff6c0 Recovering log #1064
2026/01/13-00:31:14.308541 7fad363fd6c0 Delete type=3 #959 2026/02/28-16:33:30.617749 7f56e3fff6c0 Delete type=3 #1062
2026/01/13-00:31:14.308602 7fad363fd6c0 Delete type=0 #961 2026/02/28-16:33:30.617797 7f56e3fff6c0 Delete type=0 #1064
2026/01/13-00:33:18.057541 7fad353fb6c0 Level-0 table #966: started 2026/02/28-17:23:47.119733 7f54e37ef6c0 Level-0 table #1069: started
2026/01/13-00:33:18.057568 7fad353fb6c0 Level-0 table #966: 0 bytes OK 2026/02/28-17:23:47.119789 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK
2026/01/13-00:33:18.063555 7fad353fb6c0 Delete type=0 #964 2026/02/28-17:23:47.126273 7f54e37ef6c0 Delete type=0 #1067
2026/01/13-00:33:18.083331 7fad353fb6c0 Manual compaction at level-0 from '!items!3oOvUd7AIqrXzLDl' @ 72057594037927935 : 1 .. '!items!oWexVALVtDXmedMy' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.144350 7f54e37ef6c0 Manual compaction at level-0 from '!items!3oOvUd7AIqrXzLDl' @ 72057594037927935 : 1 .. '!items!oWexVALVtDXmedMy' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.083392 7fad353fb6c0 Manual compaction at level-1 from '!items!3oOvUd7AIqrXzLDl' @ 72057594037927935 : 1 .. '!items!oWexVALVtDXmedMy' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.144395 7f54e37ef6c0 Manual compaction at level-1 from '!items!3oOvUd7AIqrXzLDl' @ 72057594037927935 : 1 .. '!items!oWexVALVtDXmedMy' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000967 MANIFEST-001070

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.228081 7fad373ff6c0 Recovering log #965 2026/02/28-17:23:52.908514 7f56f93fe6c0 Recovering log #1068
2026/01/13-08:07:30.240063 7fad373ff6c0 Delete type=3 #963 2026/02/28-17:23:52.918072 7f56f93fe6c0 Delete type=3 #1066
2026/01/13-08:07:30.240242 7fad373ff6c0 Delete type=0 #965 2026/02/28-17:23:52.918131 7f56f93fe6c0 Delete type=0 #1068

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.386295 7fad35bfc6c0 Recovering log #961 2026/02/28-16:33:30.696883 7f56f93fe6c0 Recovering log #1064
2026/01/13-00:31:14.396283 7fad35bfc6c0 Delete type=3 #959 2026/02/28-16:33:30.706599 7f56f93fe6c0 Delete type=3 #1062
2026/01/13-00:31:14.396332 7fad35bfc6c0 Delete type=0 #961 2026/02/28-16:33:30.706663 7f56f93fe6c0 Delete type=0 #1064
2026/01/13-00:33:18.111010 7fad353fb6c0 Level-0 table #966: started 2026/02/28-17:23:47.183016 7f54e37ef6c0 Level-0 table #1069: started
2026/01/13-00:33:18.111042 7fad353fb6c0 Level-0 table #966: 0 bytes OK 2026/02/28-17:23:47.183043 7f54e37ef6c0 Level-0 table #1069: 0 bytes OK
2026/01/13-00:33:18.117293 7fad353fb6c0 Delete type=0 #964 2026/02/28-17:23:47.190475 7f54e37ef6c0 Delete type=0 #1067
2026/01/13-00:33:18.137565 7fad353fb6c0 Manual compaction at level-0 from '!items!2svd3uio8Hp4e5Wy' @ 72057594037927935 : 1 .. '!items!zq5h9kCpo8gK4oIH' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.196884 7f54e37ef6c0 Manual compaction at level-0 from '!items!2svd3uio8Hp4e5Wy' @ 72057594037927935 : 1 .. '!items!zq5h9kCpo8gK4oIH' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.137612 7fad353fb6c0 Manual compaction at level-1 from '!items!2svd3uio8Hp4e5Wy' @ 72057594037927935 : 1 .. '!items!zq5h9kCpo8gK4oIH' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.196917 7f54e37ef6c0 Manual compaction at level-1 from '!items!2svd3uio8Hp4e5Wy' @ 72057594037927935 : 1 .. '!items!zq5h9kCpo8gK4oIH' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000874 MANIFEST-000977

View File

@@ -1,3 +1,3 @@
2026/01/13-08:07:30.185715 7fad35bfc6c0 Recovering log #872 2026/02/28-17:23:52.871452 7f56f9bff6c0 Recovering log #975
2026/01/13-08:07:30.196559 7fad35bfc6c0 Delete type=3 #870 2026/02/28-17:23:52.881163 7f56f9bff6c0 Delete type=3 #973
2026/01/13-08:07:30.196735 7fad35bfc6c0 Delete type=0 #872 2026/02/28-17:23:52.881256 7f56f9bff6c0 Delete type=0 #975

View File

@@ -1,8 +1,8 @@
2026/01/13-00:31:14.348450 7fad373ff6c0 Recovering log #868 2026/02/28-16:33:30.657363 7f56f8bfd6c0 Recovering log #971
2026/01/13-00:31:14.358522 7fad373ff6c0 Delete type=3 #866 2026/02/28-16:33:30.668267 7f56f8bfd6c0 Delete type=3 #969
2026/01/13-00:31:14.358579 7fad373ff6c0 Delete type=0 #868 2026/02/28-16:33:30.668326 7f56f8bfd6c0 Delete type=0 #971
2026/01/13-00:33:18.083482 7fad353fb6c0 Level-0 table #873: started 2026/02/28-17:23:47.151742 7f54e37ef6c0 Level-0 table #976: started
2026/01/13-00:33:18.083514 7fad353fb6c0 Level-0 table #873: 0 bytes OK 2026/02/28-17:23:47.151765 7f54e37ef6c0 Level-0 table #976: 0 bytes OK
2026/01/13-00:33:18.089996 7fad353fb6c0 Delete type=0 #871 2026/02/28-17:23:47.157639 7f54e37ef6c0 Delete type=0 #974
2026/01/13-00:33:18.110837 7fad353fb6c0 Manual compaction at level-0 from '!items!2cqkViQnOYZ4qwU1' @ 72057594037927935 : 1 .. '!items!qcCZxbaV9sucG1XK' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.170048 7f54e37ef6c0 Manual compaction at level-0 from '!items!2cqkViQnOYZ4qwU1' @ 72057594037927935 : 1 .. '!items!qcCZxbaV9sucG1XK' @ 0 : 0; will stop at (end)
2026/01/13-00:33:18.110897 7fad353fb6c0 Manual compaction at level-1 from '!items!2cqkViQnOYZ4qwU1' @ 72057594037927935 : 1 .. '!items!qcCZxbaV9sucG1XK' @ 0 : 0; will stop at (end) 2026/02/28-17:23:47.170083 7f54e37ef6c0 Manual compaction at level-1 from '!items!2cqkViQnOYZ4qwU1' @ 72057594037927935 : 1 .. '!items!qcCZxbaV9sucG1XK' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000880 MANIFEST-000983

Some files were not shown because too many files have changed in this diff Show More