1241 lines
162 KiB
HTML
1241 lines
162 KiB
HTML
|
|
<!doctype html>
|
|||
|
|
<html lang="fr">
|
|||
|
|
<head>
|
|||
|
|
<meta charset="utf-8">
|
|||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|||
|
|
<meta name="description" content="L’histoire de Set-OPS à travers 641 commits : un plan, des machines réelles, des preuves et la construction d’une autonomie. Une chronique de juin à septembre 2026.">
|
|||
|
|
<meta name="color-scheme" content="dark">
|
|||
|
|
<title>Set-OPS — Histoire · Chezlepro</title>
|
|||
|
|
<style>
|
|||
|
|
:root { color-scheme: dark; --fond: #080d16; --papier: #eef0e9; --secondaire: #a7b4bd; --trait: #29353e; --menthe: #a3e9c2; --bleu: #8bc8f2; --lavande: #c7b4e7; --or: #eed4a0; --mono: ui-monospace, "SFMono-Regular", Consolas, monospace; --sans: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; --serif: Georgia, "Times New Roman", serif; }
|
|||
|
|
.history *, .history *::before, .history *::after { box-sizing: border-box; }
|
|||
|
|
html { scroll-behavior: smooth; scroll-padding-top: 110px; }
|
|||
|
|
body.history { margin: 0; background: var(--fond); color: var(--papier); font-family: var(--sans); font-size: 17px; line-height: 1.75; -webkit-font-smoothing: antialiased; }
|
|||
|
|
.history ::selection { background: var(--menthe); color: var(--fond); }
|
|||
|
|
.history a { color: inherit; text-underline-offset: 5px; }
|
|||
|
|
.history button, .history input, .history select { font: inherit; }
|
|||
|
|
.history button, .history select { cursor: pointer; }
|
|||
|
|
.history button { color: inherit; }
|
|||
|
|
.history :focus-visible { outline: 2px solid var(--menthe); outline-offset: 6px; }
|
|||
|
|
.history [hidden] { display: none !important; }
|
|||
|
|
.history .frame { width: min(1220px, calc(100% - 96px)); margin-inline: auto; }
|
|||
|
|
.history .skip { position: fixed; top: -80px; left: 24px; padding: 12px 20px; background: var(--menthe); color: var(--fond); z-index: 100; }
|
|||
|
|
.history .skip:focus { top: 12px; }
|
|||
|
|
.history .masthead { border-bottom: 1px solid var(--trait); position: relative; z-index: 10; }
|
|||
|
|
.history .masthead-inner { min-height: 88px; display: flex; align-items: center; justify-content: space-between; gap: 24px; }
|
|||
|
|
.history .wordmark { display: flex; align-items: center; gap: 12px; text-decoration: none; font-size: 17px; font-weight: 750; white-space: nowrap; }
|
|||
|
|
.history .wordmark svg { width: 30px; height: 30px; color: var(--menthe); }
|
|||
|
|
.history .wordmark span { color: var(--secondaire); font-weight: 400; }
|
|||
|
|
.history .main-nav { display: flex; flex-wrap: wrap; gap: 25px; align-items: center; font-size: 13px; }
|
|||
|
|
.history .main-nav a { text-decoration: none; color: var(--secondaire); }
|
|||
|
|
.history .main-nav a:hover { color: var(--menthe); }
|
|||
|
|
.history .main-nav .contact { border: 1px solid #617a72; border-radius: 3px; padding: 8px 16px; color: var(--menthe); }
|
|||
|
|
.history .hero { position: relative; padding: 68px 0 0; overflow: hidden; }
|
|||
|
|
.history .hero::before { content: ""; position: absolute; z-index: -1; width: 900px; height: 650px; top: -100px; right: -260px; background: radial-gradient(ellipse, #203e394f, transparent 68%); pointer-events: none; }
|
|||
|
|
.history .kicker { font: 11px/1.6 var(--mono); letter-spacing: .15em; text-transform: uppercase; color: var(--menthe); }
|
|||
|
|
.history .edition { display: flex; justify-content: space-between; align-items: center; gap: 20px; }
|
|||
|
|
.history .edition a { text-decoration: none; }
|
|||
|
|
.history .edition span { font: 11px var(--mono); color: var(--secondaire); }
|
|||
|
|
.history .hero-grid { display: grid; grid-template-columns: 1.15fr .85fr; align-items: center; gap: 24px; margin-top: 42px; }
|
|||
|
|
.history h1 { font: 400 clamp(60px, 7.6vw, 108px)/1.03 var(--serif); letter-spacing: -.06em; margin: 0; }
|
|||
|
|
.history h1 em { font-weight: 400; color: var(--menthe); }
|
|||
|
|
.history .hero-intro { max-width: 570px; margin: 29px 0 0; color: var(--secondaire); font-size: 18px; line-height: 1.85; }
|
|||
|
|
.history .hero-intro strong { color: var(--papier); font-weight: 500; }
|
|||
|
|
.history .hero-actions { display: flex; flex-wrap: wrap; gap: 26px; align-items: center; margin-top: 30px; }
|
|||
|
|
.history .read-link { display: inline-flex; gap: 26px; align-items: center; padding: 12px 20px; text-decoration: none; background: var(--menthe); color: #101e18; font-size: 13px; font-weight: 650; border-radius: 3px; }
|
|||
|
|
.history .quiet-link { font-size: 12px; color: var(--secondaire); }
|
|||
|
|
.history .lineage { margin: 0; position: relative; }
|
|||
|
|
.history .lineage svg { width: 100%; height: auto; display: block; }
|
|||
|
|
.history .lineage figcaption { color: var(--secondaire); font: 10px/1.7 var(--mono); text-align: center; letter-spacing: .04em; }
|
|||
|
|
.history .snapshot { display: grid; grid-template-columns: repeat(4, 1fr); border-top: 1px solid var(--trait); border-bottom: 1px solid var(--trait); margin-top: 65px; }
|
|||
|
|
.history .snapshot div { padding: 25px 28px; border-right: 1px solid var(--trait); }
|
|||
|
|
.history .snapshot div:first-child { padding-left: 0; }
|
|||
|
|
.history .snapshot div:last-child { border: 0; }
|
|||
|
|
.history .snapshot dt { font: 42px/1.1 var(--serif); letter-spacing: -.04em; }
|
|||
|
|
.history .snapshot dd { margin: 8px 0 0; color: var(--secondaire); font: 11px/1.7 var(--mono); }
|
|||
|
|
.history .opening { padding: 76px 0 64px; display: grid; grid-template-columns: 1fr 2fr; gap: 60px; }
|
|||
|
|
.history .opening h2 { font: 30px/1.3 var(--serif); font-weight: 400; margin: 10px 0; }
|
|||
|
|
.history .opening p { margin: 0; font-size: 20px; line-height: 1.85; max-width: 740px; color: var(--secondaire); }
|
|||
|
|
.history .opening strong { color: var(--papier); font-weight: 500; }
|
|||
|
|
.history .activity { padding-bottom: 75px; }
|
|||
|
|
.history .activity-title { display: flex; justify-content: space-between; gap: 24px; align-items: baseline; margin-bottom: 20px; }
|
|||
|
|
.history .activity-title h2 { margin: 0; font: 11px var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--secondaire); }
|
|||
|
|
.history .activity-title span { font: 11px var(--mono); color: var(--secondaire); }
|
|||
|
|
.history .activity svg { width: 100%; height: 112px; display: block; overflow: visible; }
|
|||
|
|
.history .activity .months { display: flex; justify-content: space-between; font: 11px var(--mono); color: var(--secondaire); margin-top: 10px; }
|
|||
|
|
.history .activity .months span b { color: var(--papier); font-weight: 500; }
|
|||
|
|
.history .book { display: grid; grid-template-columns: 235px minmax(0, 1fr); gap: 70px; align-items: start; border-top: 1px solid var(--trait); }
|
|||
|
|
.history .contents { position: sticky; top: 35px; padding-top: 48px; padding-bottom: 35px; }
|
|||
|
|
.history .contents p { margin: 0 0 22px; }
|
|||
|
|
.history .contents ol { list-style: none; padding: 0; margin: 0; }
|
|||
|
|
.history .contents li { margin: 0; }
|
|||
|
|
.history .contents a { display: flex; gap: 14px; font-size: 12px; text-decoration: none; padding: 10px 0 10px 14px; border-left: 1px solid var(--trait); color: var(--secondaire); transition: color .2s, border-color .2s; }
|
|||
|
|
.history .contents a span { font: 10px/2 var(--mono); opacity: .7; }
|
|||
|
|
.history .contents a:hover, .history .contents a[aria-current="location"] { color: var(--menthe); border-left-color: var(--menthe); }
|
|||
|
|
.history .contents .duration { font: 10px/1.8 var(--mono); color: var(--secondaire); margin: 26px 0 0 15px; }
|
|||
|
|
.history .chapter { padding: 60px 0 66px; border-bottom: 1px solid var(--trait); scroll-margin-top: 0; }
|
|||
|
|
.history .chapter-top { display: flex; justify-content: space-between; gap: 20px; align-items: baseline; }
|
|||
|
|
.history .chapter-number { color: var(--menthe); font: 12px var(--mono); letter-spacing: .08em; }
|
|||
|
|
.history .chapter-date { font: 11px var(--mono); color: var(--secondaire); }
|
|||
|
|
.history .chapter h2 { font: 400 clamp(32px, 3.7vw, 49px)/1.14 var(--serif); letter-spacing: -.035em; margin: 20px 0 29px; text-wrap: balance; }
|
|||
|
|
.history .chapter p { color: var(--secondaire); margin: 0 0 18px; max-width: 740px; }
|
|||
|
|
.history .chapter strong { font-weight: 550; color: var(--papier); }
|
|||
|
|
.history code { font-family: var(--mono); font-size: .82em; overflow-wrap: anywhere; }
|
|||
|
|
.history .turning-point { padding: 15px 0 15px 22px; border-left: 2px solid var(--menthe); margin: 28px 0; color: var(--papier); }
|
|||
|
|
.history .turning-point span { display: block; font: 10px var(--mono); color: var(--menthe); text-transform: uppercase; letter-spacing: .12em; margin-bottom: 8px; }
|
|||
|
|
.history .source-list { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 29px; }
|
|||
|
|
.history .source-list > span { color: var(--secondaire); font: 10px var(--mono); margin-right: 6px; }
|
|||
|
|
.history .source-list a { border: 1px solid var(--trait); border-radius: 3px; padding: 5px 9px; font: 11px/1.6 var(--mono); color: var(--menthe); text-decoration: none; }
|
|||
|
|
.history .source-list a:hover { background: #a3e9c211; border-color: var(--menthe); }
|
|||
|
|
.history .mail-route { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: 30px 0; font: 12px var(--mono); color: var(--secondaire); }
|
|||
|
|
.history .mail-route b { font-weight: 500; color: var(--papier); border-bottom: 1px solid var(--trait); padding-bottom: 5px; }
|
|||
|
|
.history .evidence { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; margin: 32px 0; padding: 27px 0; border-block: 1px solid var(--trait); }
|
|||
|
|
.history .evidence b { display: block; font: 52px/1 var(--serif); letter-spacing: -.04em; color: var(--menthe); }
|
|||
|
|
.history .evidence span { display: block; font: 11px/1.8 var(--mono); color: var(--secondaire); margin-top: 10px; }
|
|||
|
|
.history .pullquote { padding: 58px 0; margin: 0; }
|
|||
|
|
.history .pullquote blockquote { font: italic clamp(30px, 3.8vw, 48px)/1.3 var(--serif); letter-spacing: -.02em; margin: 0 0 22px; color: var(--menthe); }
|
|||
|
|
.history .pullquote figcaption { color: var(--secondaire); font: 11px/1.8 var(--mono); }
|
|||
|
|
.history .power-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; margin: 30px 0; padding: 25px 0; border-block: 1px solid var(--trait); }
|
|||
|
|
.history .power-grid span { font: 10px var(--mono); color: var(--menthe); }
|
|||
|
|
.history .power-grid h3 { font: 22px var(--serif); margin: 10px 0; }
|
|||
|
|
.history .power-grid p { font-size: 12px; line-height: 1.7; margin: 0; }
|
|||
|
|
.history .archive { padding: 95px 0 70px; }
|
|||
|
|
.history .archive-head { display: flex; gap: 35px; align-items: end; justify-content: space-between; margin-bottom: 32px; }
|
|||
|
|
.history .archive h2 { font: 400 clamp(34px, 4vw, 55px)/1.15 var(--serif); letter-spacing: -.04em; margin: 14px 0 0; }
|
|||
|
|
.history .archive-head p { color: var(--secondaire); max-width: 340px; font-size: 14px; margin: 0; }
|
|||
|
|
.history .archive-controls { display: grid; grid-template-columns: 1fr 210px; gap: 18px; padding: 24px 0; border-block: 1px solid var(--trait); }
|
|||
|
|
.history .archive-controls label { color: var(--secondaire); display: block; font: 11px var(--mono); margin-bottom: 10px; }
|
|||
|
|
.history .archive-controls input, .history .archive-controls select { width: 100%; border: 1px solid #3c4c57; border-radius: 3px; padding: 12px 15px; background: #101923; color: var(--papier); font-size: 14px; min-height: 48px; }
|
|||
|
|
.history .archive-controls input::placeholder { color: #95a5b1; }
|
|||
|
|
.history .result-count { font: 11px/1.7 var(--mono); color: var(--secondaire); min-height: 20px; margin: 22px 0 14px; }
|
|||
|
|
.history .commit-list { list-style: none; margin: 0; padding: 0; }
|
|||
|
|
.history .commit-list li { border-bottom: 1px solid var(--trait); }
|
|||
|
|
.history .commit-row { width: 100%; border: 0; background: transparent; padding: 18px 5px; display: grid; grid-template-columns: 105px 90px 1fr 20px; gap: 14px; text-align: left; align-items: baseline; }
|
|||
|
|
.history .commit-row:hover { background: #ffffff04; }
|
|||
|
|
.history .commit-row time { color: var(--secondaire); font: 11px var(--mono); }
|
|||
|
|
.history .commit-row code { font-size: 11px; color: var(--menthe); }
|
|||
|
|
.history .commit-row .subject { font-size: 14px; line-height: 1.65; overflow-wrap: anywhere; }
|
|||
|
|
.history .commit-row .arrow { color: var(--secondaire); }
|
|||
|
|
.history .archive-end { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 20px; margin-top: 26px; }
|
|||
|
|
.history .archive-end span { font: 11px var(--mono); color: var(--secondaire); }
|
|||
|
|
.history .more-button { border: 1px solid #637c73; border-radius: 3px; padding: 11px 20px; color: var(--menthe); background: transparent; font-size: 13px; }
|
|||
|
|
.history .more-button:hover { background: #a3e9c20c; }
|
|||
|
|
.history .source-method { border-top: 1px solid var(--trait); padding: 55px 0; display: grid; grid-template-columns: 1fr 2fr; gap: 60px; }
|
|||
|
|
.history .source-method h2 { margin: 0; font: 28px/1.3 var(--serif); }
|
|||
|
|
.history .source-method p { margin: 0 0 14px; color: var(--secondaire); font-size: 14px; }
|
|||
|
|
.history .source-method code { color: var(--menthe); }
|
|||
|
|
.history .honest { border: 1px solid var(--trait); border-left: 2px solid var(--or); padding: 32px 38px; margin: 5px 0 0; }
|
|||
|
|
.history .honest h2 { margin: 0 0 16px; font: 26px var(--serif); color: var(--or); }
|
|||
|
|
.history .honest p { margin: 12px 0 0; font-size: 14px; color: var(--secondaire); }
|
|||
|
|
.history .honest strong { color: var(--papier); font-weight: 500; }
|
|||
|
|
.history .close { padding: 90px 0; text-align: center; }
|
|||
|
|
.history .close h2 { font: 400 clamp(36px, 4.6vw, 65px)/1.13 var(--serif); letter-spacing: -.04em; margin: 20px 0; }
|
|||
|
|
.history .close h2 em { color: var(--menthe); font-weight: 400; }
|
|||
|
|
.history .close p { max-width: 590px; margin: 0 auto 28px; color: var(--secondaire); font-size: 15px; }
|
|||
|
|
.history .footer { border-top: 1px solid var(--trait); padding: 28px 0; }
|
|||
|
|
.history .footer-inner { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 20px; font-size: 11px; color: var(--secondaire); }
|
|||
|
|
.history .footer a { text-decoration: none; }
|
|||
|
|
.history .progress { position: fixed; top: 0; left: 0; height: 2px; width: 0; background: var(--menthe); z-index: 50; pointer-events: none; }
|
|||
|
|
.history .commit-dialog { width: min(650px, calc(100% - 36px)); max-height: calc(100dvh - 48px); overflow-y: auto; padding: 34px; border: 1px solid #587268; border-radius: 6px; color: var(--papier); background: #101923; }
|
|||
|
|
.history .commit-dialog::backdrop { background: #03080fd9; backdrop-filter: blur(5px); }
|
|||
|
|
.history .dialog-top { display: flex; justify-content: space-between; align-items: center; gap: 20px; }
|
|||
|
|
.history .dialog-close { border: 1px solid var(--trait); background: transparent; border-radius: 3px; padding: 6px 12px; font-size: 13px; }
|
|||
|
|
.history .commit-dialog h2 { font: 30px/1.35 var(--serif); overflow-wrap: anywhere; margin: 25px 0; }
|
|||
|
|
.history .commit-dialog p, .history .commit-dialog label { color: var(--secondaire); font-size: 13px; }
|
|||
|
|
.history .commit-dialog code { display: block; color: var(--menthe); font-size: 11px; }
|
|||
|
|
.history .commit-dialog input { width: 100%; margin-top: 10px; padding: 12px; background: var(--fond); color: var(--menthe); border: 1px solid var(--trait); font: 13px var(--mono); }
|
|||
|
|
.history .copy-row { display: flex; align-items: center; gap: 16px; margin-top: 20px; }
|
|||
|
|
.history .copy-row span { font-size: 12px; color: var(--secondaire); }
|
|||
|
|
@media (min-width: 1400px) { .history .hero-grid { margin-top: 55px; } }
|
|||
|
|
@media (max-width: 1050px) { .history .frame { width: calc(100% - 56px); } .history .book { grid-template-columns: 190px minmax(0, 1fr); gap: 35px; } .history .main-nav { gap: 17px; } .history h1 { font-size: clamp(55px, 8vw, 85px); } }
|
|||
|
|
@media (max-width: 760px) {
|
|||
|
|
html { scroll-padding-top: 30px; }
|
|||
|
|
.history .frame { width: calc(100% - 40px); }
|
|||
|
|
.history .masthead-inner { flex-wrap: wrap; gap: 15px; padding-block: 18px; }
|
|||
|
|
.history .main-nav { width: 100%; gap: 18px; font-size: 11px; }
|
|||
|
|
.history .main-nav .contact { margin-left: auto; padding: 5px 9px; }
|
|||
|
|
.history .hero { padding-top: 35px; }
|
|||
|
|
.history .edition { align-items: start; }
|
|||
|
|
.history .edition span { max-width: 110px; text-align: right; line-height: 1.8; }
|
|||
|
|
.history .hero-grid { grid-template-columns: 1fr; margin-top: 35px; }
|
|||
|
|
.history h1 { font-size: clamp(57px, 11.6vw, 82px); }
|
|||
|
|
.history .hero-intro { font-size: 16px; }
|
|||
|
|
.history .lineage { max-width: 440px; width: 100%; margin: 0 auto; }
|
|||
|
|
.history .lineage svg { max-height: 300px; }
|
|||
|
|
.history .snapshot { margin-top: 36px; grid-template-columns: 1fr 1fr; }
|
|||
|
|
.history .snapshot div { padding: 23px 18px; }
|
|||
|
|
.history .snapshot div:nth-child(2) { border-right: 0; }
|
|||
|
|
.history .snapshot div:nth-child(3) { padding-left: 0; border-top: 1px solid var(--trait); }
|
|||
|
|
.history .snapshot div:nth-child(4) { border-top: 1px solid var(--trait); }
|
|||
|
|
.history .opening { grid-template-columns: 1fr; gap: 18px; padding-block: 48px; }
|
|||
|
|
.history .opening p { font-size: 17px; }
|
|||
|
|
.history .activity { padding-bottom: 40px; }
|
|||
|
|
.history .activity-title { flex-wrap: wrap; gap: 10px; }
|
|||
|
|
.history .activity .months { font-size: 9px; }
|
|||
|
|
.history .activity .months span b { display: block; margin-top: 4px; }
|
|||
|
|
.history .book { display: block; }
|
|||
|
|
.history .contents { position: static; padding-block: 30px; border-bottom: 1px solid var(--trait); }
|
|||
|
|
.history .contents ol { display: grid; grid-template-columns: 1fr 1fr; gap: 4px 12px; }
|
|||
|
|
.history .contents .duration { margin-top: 18px; }
|
|||
|
|
.history .chapter { padding-block: 42px; }
|
|||
|
|
.history .chapter p { font-size: 16px; }
|
|||
|
|
.history .chapter-date { font-size: 10px; }
|
|||
|
|
.history .power-grid { gap: 14px; }
|
|||
|
|
.history .power-grid h3 { font-size: 19px; }
|
|||
|
|
.history .power-grid p { font-size: 11px; }
|
|||
|
|
.history .archive { padding-top: 60px; }
|
|||
|
|
.history .archive-head { display: block; }
|
|||
|
|
.history .archive-head p { margin-top: 20px; }
|
|||
|
|
.history .archive-controls { grid-template-columns: 1fr; }
|
|||
|
|
.history .commit-row { grid-template-columns: 92px 1fr 15px; gap: 5px 10px; padding-block: 16px; }
|
|||
|
|
.history .commit-row .subject { grid-row: 2; grid-column: 1 / 3; font-size: 13px; }
|
|||
|
|
.history .commit-row .arrow { grid-column: 3; grid-row: 1 / 3; align-self: center; }
|
|||
|
|
.history .source-method { grid-template-columns: 1fr; gap: 20px; }
|
|||
|
|
.history .honest { padding: 25px; }
|
|||
|
|
.history .close { padding-block: 65px; }
|
|||
|
|
}
|
|||
|
|
@media (max-width: 380px) { .history .main-nav { gap: 11px; } .history .main-nav .contact { padding-inline: 6px; } .history .contents a { font-size: 11px; gap: 9px; } }
|
|||
|
|
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } .history * { transition: none !important; } }
|
|||
|
|
@media print {
|
|||
|
|
:root { color-scheme: light; --fond: #fff; --papier: #111; --secondaire: #333; --trait: #ccc; --menthe: #245b43; --or: #624c1f; }
|
|||
|
|
body.history { font-size: 11pt; }
|
|||
|
|
.history .frame { width: 100%; }
|
|||
|
|
.history .masthead, .history .contents, .history .hero-actions, .history .archive, .history .progress, .history dialog { display: none; }
|
|||
|
|
.history .book { display: block; }
|
|||
|
|
.history .hero-grid { grid-template-columns: 1fr; }
|
|||
|
|
.history .lineage { display: none; }
|
|||
|
|
.history h1 { font-size: 55pt; }
|
|||
|
|
.history .chapter { padding-block: 25px; }
|
|||
|
|
.history .chapter h2 { break-after: avoid; }
|
|||
|
|
.history .source-list, .history .evidence, .history .power-grid { break-inside: avoid; }
|
|||
|
|
}
|
|||
|
|
</style>
|
|||
|
|
</head>
|
|||
|
|
<body class="history" id="top">
|
|||
|
|
<a class="skip" href="#recit">Aller au récit</a>
|
|||
|
|
<div class="progress" aria-hidden="true"></div>
|
|||
|
|
<header class="masthead">
|
|||
|
|
<div class="frame masthead-inner">
|
|||
|
|
<a class="wordmark" href="index.html" aria-label="Set-OPS · Chezlepro, accueil">
|
|||
|
|
<svg viewBox="0 0 32 32" fill="none" aria-hidden="true"><path d="M16 2 19 12 29 16 19 19 16 30 12 19 2 16 12 12Z" stroke="currentColor" stroke-width="1.2"/><circle cx="16" cy="16" r="3" fill="currentColor"/></svg>
|
|||
|
|
Set-OPS <span>· Chezlepro</span>
|
|||
|
|
</a>
|
|||
|
|
<nav class="main-nav" aria-label="Pages de présentation">
|
|||
|
|
<a href="index.html">Capacités</a><a href="offres.html">Offres</a><a href="tarifs.html">Tarifs</a><a href="valeur.html">Valeur</a><a class="contact" href="https://chezlepro.ca/contact">Nous parler</a>
|
|||
|
|
</nav>
|
|||
|
|
</div>
|
|||
|
|
</header>
|
|||
|
|
<main>
|
|||
|
|
<section class="hero" aria-labelledby="titre">
|
|||
|
|
<div class="frame">
|
|||
|
|
<div class="edition"><a class="kicker" href="histoire.html" aria-current="page">Les chroniques de Set-OPS / 01</a><span>24 juin — 17 septembre 2026</span></div>
|
|||
|
|
<div class="hero-grid">
|
|||
|
|
<div>
|
|||
|
|
<h1 id="titre">De la machine<br>à <em>l’autonomie.</em></h1>
|
|||
|
|
<p class="hero-intro"><strong>641 commits. Des choix, des pannes, des recommencements.</strong> L’histoire d’un écosystème numérique qui apprend à se construire, à se vérifier et à remettre les clés.</p>
|
|||
|
|
<div class="hero-actions"><a class="read-link" href="#recit">Lire l’histoire <span aria-hidden="true">↓</span></a><a class="quiet-link" href="#archives">Explorer les 641 commits ↗</a></div>
|
|||
|
|
</div>
|
|||
|
|
<figure class="lineage">
|
|||
|
|
<svg viewBox="0 0 460 430" role="img" aria-labelledby="lineage-title lineage-desc">
|
|||
|
|
<title id="lineage-title">Une lignée qui se ramifie</title><desc id="lineage-desc">Illustration des trois fils du récit : le plan, la preuve et l’autonomie. Ce dessin n’est pas le graphe des branches Git.</desc>
|
|||
|
|
<defs><pattern id="dots" width="24" height="24" patternUnits="userSpaceOnUse"><circle cx="1" cy="1" r=".75" fill="#758e88" opacity=".23"/></pattern><linearGradient id="line-color" gradientUnits="userSpaceOnUse" x1="230" y1="73" x2="230" y2="360"><stop stop-color="#a3e9c2"/><stop offset="1" stop-color="#8bc8f2"/></linearGradient></defs>
|
|||
|
|
<rect x="35" y="15" width="390" height="390" fill="url(#dots)"/>
|
|||
|
|
<circle cx="230" cy="215" r="157" stroke="#34453f" stroke-dasharray="2 7" fill="none" opacity=".7"/>
|
|||
|
|
<path d="M230 360V73" stroke="url(#line-color)" stroke-width="2" fill="none"/>
|
|||
|
|
<path d="M230 295C230 260 120 267 120 220V136M230 237C230 192 338 215 338 160V105" stroke="#8bc8f2" stroke-width="1.5" fill="none"/>
|
|||
|
|
<path d="M120 220C120 182 182 183 182 148V110M338 160C338 132 287 133 287 105V60" stroke="#c7b4e7" stroke-width="1.2" fill="none"/>
|
|||
|
|
<g fill="#080d16" stroke="#a3e9c2" stroke-width="2"><circle cx="230" cy="360" r="6"/><circle cx="230" cy="295" r="6"/><circle cx="230" cy="237" r="6"/><circle cx="230" cy="179" r="6"/><circle cx="230" cy="121" r="6"/></g>
|
|||
|
|
<g fill="#8bc8f2"><circle cx="120" cy="220" r="4"/><circle cx="120" cy="136" r="5"/><circle cx="338" cy="160" r="4"/><circle cx="338" cy="105" r="5"/></g>
|
|||
|
|
<g fill="#c7b4e7"><circle cx="182" cy="110" r="4"/><circle cx="287" cy="60" r="4"/></g>
|
|||
|
|
<circle cx="230" cy="73" r="16" fill="#a3e9c2" opacity=".1"/><circle cx="230" cy="73" r="5" fill="#a3e9c2"/>
|
|||
|
|
<g font-family="ui-monospace, monospace" font-size="10" letter-spacing="1.5"><text x="245" y="367" fill="#a7b4bd">3dd3f43</text><text x="56" y="119" fill="#8bc8f2">LE PLAN</text><text x="309" y="88" fill="#8bc8f2">LA PREUVE</text><text x="202" y="38" fill="#a3e9c2">L’AUTONOMIE</text></g>
|
|||
|
|
</svg>
|
|||
|
|
<figcaption>Une même intention. Des branches qui s’émancipent.</figcaption>
|
|||
|
|
</figure>
|
|||
|
|
</div>
|
|||
|
|
<dl class="snapshot" aria-label="Repères de l’historique étudié">
|
|||
|
|
<div><dt>641</dt><dd>commits dans l’historique</dd></div><div><dt>86</dt><dd>jours calendaires couverts</dd></div><div><dt>8</dt><dd>chapitres pour suivre le fil</dd></div><div><dt>82</dt><dd>preuves au dernier rapport</dd></div>
|
|||
|
|
</dl>
|
|||
|
|
</div>
|
|||
|
|
</section>
|
|||
|
|
<div class="frame">
|
|||
|
|
<section class="opening" aria-labelledby="ouverture">
|
|||
|
|
<div><span class="kicker">Le fil conducteur</span><h2 id="ouverture">Posséder le code.<br>Pouvoir en repartir.</h2></div>
|
|||
|
|
<p>Au fil de l’été, la question s’élargit. Comment configurer une machine ? Comment reconstruire une flotte ? Puis : <strong>qui détient les moyens de le faire, et que devient l’écosystème quand son créateur s’en va ?</strong> Chaque réponse laisse une trace dans Git.</p>
|
|||
|
|
</section>
|
|||
|
|
<section class="activity" aria-labelledby="rythme">
|
|||
|
|
<div class="activity-title"><h2 id="rythme">Le rythme de la construction</h2><span>57 jours avec des commits · une barre par jour</span></div>
|
|||
|
|
<div id="activity-chart"><svg viewBox="0 0 1032 112" preserveAspectRatio="none" role="img" aria-labelledby="activity-title activity-description">
|
|||
|
|
<title id="activity-title">641 commits du 24 juin au 17 septembre 2026</title>
|
|||
|
|
<desc id="activity-description">86 jours calendaires, dont 57 avec des commits. Juin : 21 ; juillet : 151 ; août : 310 ; septembre : 159. La hauteur représente le nombre de commits dans la journée.</desc>
|
|||
|
|
<rect x="2" y="104" width="7" height="4" rx="1" fill="#8bc8f2"><title>2026-06-24 : 1 commit</title></rect>
|
|||
|
|
<rect x="14" y="104" width="7" height="4" rx="1" fill="#8bc8f2"><title>2026-06-25 : 1 commit</title></rect>
|
|||
|
|
<rect x="26" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-06-26 : 0 commit</title></rect>
|
|||
|
|
<rect x="38" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-06-27 : 0 commit</title></rect>
|
|||
|
|
<rect x="50" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-06-28 : 0 commit</title></rect>
|
|||
|
|
<rect x="62" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-06-29 : 0 commit</title></rect>
|
|||
|
|
<rect x="74" y="54.800000000000004" width="7" height="53.199999999999996" rx="1" fill="#8bc8f2"><title>2026-06-30 : 19 commits</title></rect>
|
|||
|
|
<rect x="86" y="80" width="7" height="28" rx="1" fill="#a3e9c2"><title>2026-07-01 : 10 commits</title></rect>
|
|||
|
|
<rect x="98" y="57.60000000000001" width="7" height="50.39999999999999" rx="1" fill="#a3e9c2"><title>2026-07-02 : 18 commits</title></rect>
|
|||
|
|
<rect x="110" y="21.200000000000003" width="7" height="86.8" rx="1" fill="#a3e9c2"><title>2026-07-03 : 31 commits</title></rect>
|
|||
|
|
<rect x="122" y="32.39999999999999" width="7" height="75.60000000000001" rx="1" fill="#a3e9c2"><title>2026-07-04 : 27 commits</title></rect>
|
|||
|
|
<rect x="134" y="54.800000000000004" width="7" height="53.199999999999996" rx="1" fill="#a3e9c2"><title>2026-07-05 : 19 commits</title></rect>
|
|||
|
|
<rect x="146" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-06 : 0 commit</title></rect>
|
|||
|
|
<rect x="158" y="68.8" width="7" height="39.2" rx="1" fill="#a3e9c2"><title>2026-07-07 : 14 commits</title></rect>
|
|||
|
|
<rect x="170" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-08 : 0 commit</title></rect>
|
|||
|
|
<rect x="182" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-09 : 0 commit</title></rect>
|
|||
|
|
<rect x="194" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-10 : 0 commit</title></rect>
|
|||
|
|
<rect x="206" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-11 : 0 commit</title></rect>
|
|||
|
|
<rect x="218" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-12 : 0 commit</title></rect>
|
|||
|
|
<rect x="230" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-13 : 0 commit</title></rect>
|
|||
|
|
<rect x="242" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-14 : 0 commit</title></rect>
|
|||
|
|
<rect x="254" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-15 : 0 commit</title></rect>
|
|||
|
|
<rect x="266" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-16 : 0 commit</title></rect>
|
|||
|
|
<rect x="278" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-17 : 0 commit</title></rect>
|
|||
|
|
<rect x="290" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-18 : 0 commit</title></rect>
|
|||
|
|
<rect x="302" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-19 : 0 commit</title></rect>
|
|||
|
|
<rect x="314" y="88.4" width="7" height="19.6" rx="1" fill="#a3e9c2"><title>2026-07-20 : 7 commits</title></rect>
|
|||
|
|
<rect x="326" y="94" width="7" height="14" rx="1" fill="#a3e9c2"><title>2026-07-21 : 5 commits</title></rect>
|
|||
|
|
<rect x="338" y="102.4" width="7" height="5.6" rx="1" fill="#a3e9c2"><title>2026-07-22 : 2 commits</title></rect>
|
|||
|
|
<rect x="350" y="68.8" width="7" height="39.2" rx="1" fill="#a3e9c2"><title>2026-07-23 : 14 commits</title></rect>
|
|||
|
|
<rect x="362" y="104" width="7" height="4" rx="1" fill="#a3e9c2"><title>2026-07-24 : 1 commit</title></rect>
|
|||
|
|
<rect x="374" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-25 : 0 commit</title></rect>
|
|||
|
|
<rect x="386" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-26 : 0 commit</title></rect>
|
|||
|
|
<rect x="398" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-27 : 0 commit</title></rect>
|
|||
|
|
<rect x="410" y="102.4" width="7" height="5.6" rx="1" fill="#a3e9c2"><title>2026-07-28 : 2 commits</title></rect>
|
|||
|
|
<rect x="422" y="104" width="7" height="4" rx="1" fill="#a3e9c2"><title>2026-07-29 : 1 commit</title></rect>
|
|||
|
|
<rect x="434" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-30 : 0 commit</title></rect>
|
|||
|
|
<rect x="446" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-07-31 : 0 commit</title></rect>
|
|||
|
|
<rect x="458" y="60.4" width="7" height="47.6" rx="1" fill="#c7b4e7"><title>2026-08-01 : 17 commits</title></rect>
|
|||
|
|
<rect x="470" y="49.2" width="7" height="58.8" rx="1" fill="#c7b4e7"><title>2026-08-02 : 21 commits</title></rect>
|
|||
|
|
<rect x="482" y="35.2" width="7" height="72.8" rx="1" fill="#c7b4e7"><title>2026-08-03 : 26 commits</title></rect>
|
|||
|
|
<rect x="494" y="91.2" width="7" height="16.8" rx="1" fill="#c7b4e7"><title>2026-08-04 : 6 commits</title></rect>
|
|||
|
|
<rect x="506" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-08-05 : 0 commit</title></rect>
|
|||
|
|
<rect x="518" y="71.6" width="7" height="36.4" rx="1" fill="#c7b4e7"><title>2026-08-06 : 13 commits</title></rect>
|
|||
|
|
<rect x="530" y="49.2" width="7" height="58.8" rx="1" fill="#c7b4e7"><title>2026-08-07 : 21 commits</title></rect>
|
|||
|
|
<rect x="542" y="40.8" width="7" height="67.2" rx="1" fill="#c7b4e7"><title>2026-08-08 : 24 commits</title></rect>
|
|||
|
|
<rect x="554" y="26.799999999999997" width="7" height="81.2" rx="1" fill="#c7b4e7"><title>2026-08-09 : 29 commits</title></rect>
|
|||
|
|
<rect x="566" y="66" width="7" height="42" rx="1" fill="#c7b4e7"><title>2026-08-10 : 15 commits</title></rect>
|
|||
|
|
<rect x="578" y="88.4" width="7" height="19.6" rx="1" fill="#c7b4e7"><title>2026-08-11 : 7 commits</title></rect>
|
|||
|
|
<rect x="590" y="57.60000000000001" width="7" height="50.39999999999999" rx="1" fill="#c7b4e7"><title>2026-08-12 : 18 commits</title></rect>
|
|||
|
|
<rect x="602" y="82.80000000000001" width="7" height="25.199999999999996" rx="1" fill="#c7b4e7"><title>2026-08-13 : 9 commits</title></rect>
|
|||
|
|
<rect x="614" y="104" width="7" height="4" rx="1" fill="#c7b4e7"><title>2026-08-14 : 1 commit</title></rect>
|
|||
|
|
<rect x="626" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-08-15 : 0 commit</title></rect>
|
|||
|
|
<rect x="638" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-08-16 : 0 commit</title></rect>
|
|||
|
|
<rect x="650" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-08-17 : 0 commit</title></rect>
|
|||
|
|
<rect x="662" y="91.2" width="7" height="16.8" rx="1" fill="#c7b4e7"><title>2026-08-18 : 6 commits</title></rect>
|
|||
|
|
<rect x="674" y="104" width="7" height="4" rx="1" fill="#c7b4e7"><title>2026-08-19 : 1 commit</title></rect>
|
|||
|
|
<rect x="686" y="99.6" width="7" height="8.4" rx="1" fill="#c7b4e7"><title>2026-08-20 : 3 commits</title></rect>
|
|||
|
|
<rect x="698" y="96.8" width="7" height="11.2" rx="1" fill="#c7b4e7"><title>2026-08-21 : 4 commits</title></rect>
|
|||
|
|
<rect x="710" y="91.2" width="7" height="16.8" rx="1" fill="#c7b4e7"><title>2026-08-22 : 6 commits</title></rect>
|
|||
|
|
<rect x="722" y="80" width="7" height="28" rx="1" fill="#c7b4e7"><title>2026-08-23 : 10 commits</title></rect>
|
|||
|
|
<rect x="734" y="57.60000000000001" width="7" height="50.39999999999999" rx="1" fill="#c7b4e7"><title>2026-08-24 : 18 commits</title></rect>
|
|||
|
|
<rect x="746" y="60.4" width="7" height="47.6" rx="1" fill="#c7b4e7"><title>2026-08-25 : 17 commits</title></rect>
|
|||
|
|
<rect x="758" y="91.2" width="7" height="16.8" rx="1" fill="#c7b4e7"><title>2026-08-26 : 6 commits</title></rect>
|
|||
|
|
<rect x="770" y="94" width="7" height="14" rx="1" fill="#c7b4e7"><title>2026-08-27 : 5 commits</title></rect>
|
|||
|
|
<rect x="782" y="60.4" width="7" height="47.6" rx="1" fill="#c7b4e7"><title>2026-08-28 : 17 commits</title></rect>
|
|||
|
|
<rect x="794" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-08-29 : 0 commit</title></rect>
|
|||
|
|
<rect x="806" y="91.2" width="7" height="16.8" rx="1" fill="#c7b4e7"><title>2026-08-30 : 6 commits</title></rect>
|
|||
|
|
<rect x="818" y="96.8" width="7" height="11.2" rx="1" fill="#c7b4e7"><title>2026-08-31 : 4 commits</title></rect>
|
|||
|
|
<rect x="830" y="94" width="7" height="14" rx="1" fill="#eed4a0"><title>2026-09-01 : 5 commits</title></rect>
|
|||
|
|
<rect x="842" y="88.4" width="7" height="19.6" rx="1" fill="#eed4a0"><title>2026-09-02 : 7 commits</title></rect>
|
|||
|
|
<rect x="854" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-09-03 : 0 commit</title></rect>
|
|||
|
|
<rect x="866" y="106" width="7" height="2" rx="1" fill="#29353e"><title>2026-09-04 : 0 commit</title></rect>
|
|||
|
|
<rect x="878" y="91.2" width="7" height="16.8" rx="1" fill="#eed4a0"><title>2026-09-05 : 6 commits</title></rect>
|
|||
|
|
<rect x="890" y="104" width="7" height="4" rx="1" fill="#eed4a0"><title>2026-09-06 : 1 commit</title></rect>
|
|||
|
|
<rect x="902" y="104" width="7" height="4" rx="1" fill="#eed4a0"><title>2026-09-07 : 1 commit</title></rect>
|
|||
|
|
<rect x="914" y="68.8" width="7" height="39.2" rx="1" fill="#eed4a0"><title>2026-09-08 : 14 commits</title></rect>
|
|||
|
|
<rect x="926" y="57.60000000000001" width="7" height="50.39999999999999" rx="1" fill="#eed4a0"><title>2026-09-09 : 18 commits</title></rect>
|
|||
|
|
<rect x="938" y="46.4" width="7" height="61.6" rx="1" fill="#eed4a0"><title>2026-09-10 : 22 commits</title></rect>
|
|||
|
|
<rect x="950" y="94" width="7" height="14" rx="1" fill="#eed4a0"><title>2026-09-11 : 5 commits</title></rect>
|
|||
|
|
<rect x="962" y="91.2" width="7" height="16.8" rx="1" fill="#eed4a0"><title>2026-09-12 : 6 commits</title></rect>
|
|||
|
|
<rect x="974" y="68.8" width="7" height="39.2" rx="1" fill="#eed4a0"><title>2026-09-13 : 14 commits</title></rect>
|
|||
|
|
<rect x="986" y="10" width="7" height="98" rx="1" fill="#eed4a0"><title>2026-09-14 : 35 commits</title></rect>
|
|||
|
|
<rect x="998" y="88.4" width="7" height="19.6" rx="1" fill="#eed4a0"><title>2026-09-15 : 7 commits</title></rect>
|
|||
|
|
<rect x="1010" y="77.2" width="7" height="30.8" rx="1" fill="#eed4a0"><title>2026-09-16 : 11 commits</title></rect>
|
|||
|
|
<rect x="1022" y="88.4" width="7" height="19.6" rx="1" fill="#eed4a0"><title>2026-09-17 : 7 commits</title></rect>
|
|||
|
|
</svg></div>
|
|||
|
|
<div class="months"><span>JUIN <b>21 commits</b></span><span>JUILLET <b>151 commits</b></span><span>AOÛT <b>310 commits</b></span><span>SEPTEMBRE <b>159 commits</b></span></div>
|
|||
|
|
</section>
|
|||
|
|
<div class="book" id="recit">
|
|||
|
|
<aside class="contents" aria-label="Sommaire du récit">
|
|||
|
|
<p class="kicker">Huit moments de bascule</p>
|
|||
|
|
<nav aria-label="Chapitres"><ol>
|
|||
|
|
<li><a href="#chapitre-1"><span>01</span> Le plan avant la machine</a></li>
|
|||
|
|
<li><a href="#chapitre-2"><span>02</span> Les services se rencontrent</a></li>
|
|||
|
|
<li><a href="#chapitre-3"><span>03</span> Apprendre à prouver</a></li>
|
|||
|
|
<li><a href="#chapitre-4"><span>04</span> Le matériel répond</a></li>
|
|||
|
|
<li><a href="#chapitre-5"><span>05</span> L’épreuve du réel</a></li>
|
|||
|
|
<li><a href="#chapitre-6"><span>06</span> Transmettre le génome</a></li>
|
|||
|
|
<li><a href="#chapitre-7"><span>07</span> Reconstruire les fondations</a></li>
|
|||
|
|
<li><a href="#chapitre-8"><span>08</span> Remettre les clés</a></li>
|
|||
|
|
</ol></nav>
|
|||
|
|
<p class="duration">Un récit tiré des commits.<br>Des sources à chaque étape.</p>
|
|||
|
|
</aside>
|
|||
|
|
<div class="chapters">
|
|||
|
|
<article class="chapter" id="chapitre-1">
|
|||
|
|
<div class="chapter-top"><span class="chapter-number">CHAPITRE 01</span><span class="chapter-date">24 — 30 juin 2026</span></div>
|
|||
|
|
<h2>Le plan précède<br>la machine.</h2>
|
|||
|
|
<p>L’histoire visible commence le 24 juin. Le premier commit arrive avec <strong>308 fichiers</strong> : des rôles Ansible, un générateur d’inventaire, une interface web et des modèles. Git ouvre donc sur un projet déjà construit en partie. Il ne raconte pas le travail qui l’a précédé.</p>
|
|||
|
|
<p>L’intention, elle, est déjà nette : bâtir un écosystème souverain sur Proxmox, à partir d’un plan. Le gabarit Debian est sa fondation ; l’application et ses relations donnent la forme de l’ensemble. L’inventaire devient un résultat que le moteur produit.</p>
|
|||
|
|
<p>Le 30 juin, les ressources des VM se calculent depuis les logiciels, les instances peuvent se succéder dans le même moteur et leur index commence à ordonner l’adressage. Un plancher <code>/etc/hosts</code> apporte une indépendance essentielle : les machines peuvent se nommer avant que leur DNS soit debout.</p>
|
|||
|
|
<div class="turning-point"><span>Ce qui change</span>Le savoir nécessaire pour reconstruire commence à quitter les machines pour entrer dans le plan.</div>
|
|||
|
|
<div class="source-list"><span>TRACES GIT</span><a href="#sources" data-commit="3dd3f43">3dd3f43 ↗</a><a href="#sources" data-commit="8029083">8029083 ↗</a><a href="#sources" data-commit="a9a1493">a9a1493 ↗</a></div>
|
|||
|
|
</article>
|
|||
|
|
<article class="chapter" id="chapitre-2">
|
|||
|
|
<div class="chapter-top"><span class="chapter-number">CHAPITRE 02</span><span class="chapter-date">1 — 7 juillet 2026</span></div>
|
|||
|
|
<h2>Les services apprennent<br>à vivre ensemble.</h2>
|
|||
|
|
<p>Les premiers déploiements réels font apparaître ce qu’une vérification de syntaxe ne peut voir : paquets manquants, secrets mal raccordés, certificats à remplacer. Les rôles se confrontent à Debian et aux services qu’ils doivent réellement faire fonctionner.</p>
|
|||
|
|
<p>Le courriel oblige à choisir. Un premier prototype utilise Stalwart ; le 2 juillet, le projet documente les obstacles rencontrés et pivote vers <strong>Postfix, Dovecot et rspamd</strong>. Le critère est opérationnel : une configuration maîtrisable, reproductible, adaptée à un service critique. Ce choix appartient à ce moment du projet, pas à un jugement intemporel sur un logiciel.</p>
|
|||
|
|
<div class="mail-route" aria-label="Chaîne de courriel retenue"><b>Postfix</b><span>→</span><b>Dovecot</b><span>+</span><b>rspamd</b><span>↔</span><b>LDAP</b></div>
|
|||
|
|
<p>Keycloak se fédère à l’annuaire. Grafana et Forgejo rejoignent le SSO. Les bases, les certificats et les expositions web sont reliés par le plan. Les sauvegardes restic et la pile Icinga entrent dans l’ensemble. Le 7 juillet, un orchestrateur ordonne le déploiement et les flux réseau commencent à dicter les pare-feu.</p>
|
|||
|
|
<p>La licence change aussi, le 2 juillet : <strong>l’AGPLv3</strong> remplace la licence initiale. Le dépôt affirme un modèle de logiciel libre accompagné de services.</p>
|
|||
|
|
<div class="source-list"><span>TRACES GIT</span><a href="#sources" data-commit="e01adac">e01adac ↗</a><a href="#sources" data-commit="c707b69">c707b69 ↗</a><a href="#sources" data-commit="60b7de9">60b7de9 ↗</a><a href="#sources" data-commit="f05f505">f05f505 ↗</a></div>
|
|||
|
|
</article>
|
|||
|
|
<article class="chapter" id="chapitre-3">
|
|||
|
|
<div class="chapter-top"><span class="chapter-number">CHAPITRE 03</span><span class="chapter-date">20 — 29 juillet 2026</span></div>
|
|||
|
|
<h2>Une affirmation doit<br>pouvoir se vérifier.</h2>
|
|||
|
|
<p>Le 20 juillet, le projet commence à auditer ses propres paroles. Le parcours de démarrage renvoie parfois au mauvais endroit ; le code et la documentation ne sont pas toujours d’accord. Un <strong>registre d’affirmations</strong> relie les promesses publiques à des moyens de les vérifier. <code>make prouver</code> produit un rapport rejouable.</p>
|
|||
|
|
<p>Les premières preuves examinent la cohérence du dépôt. Leur périmètre s’élargit bientôt : les autres instances et les modèles doivent aussi tenir. Un protocole est écrit pour qu’un administrateur extérieur puisse, un jour, éprouver le parcours sans aide de l’auteur.</p>
|
|||
|
|
<p>Le 23 juillet, une autre duplication disparaît : sous-réseaux, passerelles et VLAN cessent d’être des valeurs recopiées dans la nomenclature. Ils sont dérivés d’un index. Le lendemain, le réseau physique de l’hébergeur acquiert sa propre description, distincte du plan des locataires.</p>
|
|||
|
|
<div class="turning-point"><span>Ce qui change</span>La documentation devient un engagement vérifiable. Les données dérivables cessent d’être des réglages à recopier.</div>
|
|||
|
|
<div class="source-list"><span>TRACES GIT</span><a href="#sources" data-commit="835f8ab">835f8ab ↗</a><a href="#sources" data-commit="36a882b">36a882b ↗</a><a href="#sources" data-commit="272f636">272f636 ↗</a></div>
|
|||
|
|
</article>
|
|||
|
|
<article class="chapter" id="chapitre-4">
|
|||
|
|
<div class="chapter-top"><span class="chapter-number">CHAPITRE 04</span><span class="chapter-date">1 — 6 août 2026</span></div>
|
|||
|
|
<h2>Le matériel a<br>le dernier mot.</h2>
|
|||
|
|
<p>Le plan descend jusqu’aux commutateurs et à la frontière OPNsense. Les devis doivent maintenant parler le dialecte du matériel réel. Une commande plausible ne suffit plus : il faut vérifier qu’elle existe, qu’elle est acceptée et qu’elle produit l’effet attendu.</p>
|
|||
|
|
<p>Une limite des commutateurs force une décision d’architecture. Le mécanisme d’isolation envisagé ne peut pas être appliqué comme prévu sur leurs interfaces de routage. Le 3 août, <strong>le routage des locataires est réorienté vers Proxmox SDN et EVPN</strong>, avec des tables de routage séparées. Ce commit fixe une cible ; les suivants construisent et corrigent sa mise en œuvre.</p>
|
|||
|
|
<p>Le pare-feu Proxmox reçoit lui aussi ses règles depuis le registre des flux. Le 6 août, les applicateurs apprennent à créer, modifier et <strong>retirer</strong>. La convergence inclut enfin la disparition de ce que le plan ne demande plus.</p>
|
|||
|
|
<div class="turning-point"><span>Ce qui change</span>Les contraintes mesurées du matériel transforment l’architecture. Une déclaration doit arriver jusqu’au paquet réseau.</div>
|
|||
|
|
<div class="source-list"><span>TRACES GIT</span><a href="#sources" data-commit="c8b43f1">c8b43f1 ↗</a><a href="#sources" data-commit="fd62b59">fd62b59 ↗</a><a href="#sources" data-commit="3ed25ff">3ed25ff ↗</a></div>
|
|||
|
|
</article>
|
|||
|
|
<article class="chapter" id="chapitre-5">
|
|||
|
|
<div class="chapter-top"><span class="chapter-number">CHAPITRE 05</span><span class="chapter-date">7 — 13 août 2026</span></div>
|
|||
|
|
<h2>Le vert du dépôt<br>ne suffit plus.</h2>
|
|||
|
|
<p>Le 8 août marque une bascule de méthode. La politique de mot de passe est déclarée mais mal appliquée. L’autorité sert un certificat expiré depuis plus de huit heures. Le dépôt possède pourtant ses contrôles. <strong>Ils vérifient le code ; ils n’interrogent pas le service.</strong></p>
|
|||
|
|
<p>Les devis de service naissent de cet écart. Ils relèvent l’identité, les certificats réellement servis, les expositions, la base et le courriel, puis comparent le réel au déclaré. La règle devient : écrire, relire, comparer.</p>
|
|||
|
|
<p>Le 9 août, quatorze VM sont détruites et reconstruites. Les cinq devis retrouvent le verdict de référence, avec une intervention sur la base de Grafana consignée dans le commit. Le même jour, un rejeu atteint zéro modification sur la flotte : le nombre de tâches exécutées est contrôlé pour s’assurer que ce zéro ne vient pas d’un déploiement qui n’aurait rien fait.</p>
|
|||
|
|
<div class="evidence"><div><b>0</b><span>tâche modifiée au troisième passage<br>14 hôtes · 9 août</span></div><div><b>37 min</b><span>reconstruction sans intervention<br>43 groupes · 13 août</span></div></div>
|
|||
|
|
<p>Le 13 août, la reconstruction se déroule d’un trait. Les défauts de premier démarrage ont été exposés puis corrigés. <strong>La capacité de repartir de zéro a désormais une épreuve documentée.</strong></p>
|
|||
|
|
<div class="source-list"><span>TRACES GIT</span><a href="#sources" data-commit="5aa5f2e">5aa5f2e ↗</a><a href="#sources" data-commit="5fde136">5fde136 ↗</a><a href="#sources" data-commit="cbb186d">cbb186d ↗</a><a href="#sources" data-commit="c7fe250">c7fe250 ↗</a><a href="#sources" data-commit="671fa1f">671fa1f ↗</a></div>
|
|||
|
|
</article>
|
|||
|
|
<figure class="pullquote"><blockquote>« Le rejeu n’a rien cassé :<br>il a retiré l’état qui masquait. »</blockquote><figcaption>Message du commit <a href="#sources" data-commit="cbb186d">cbb186d</a> · 9 août 2026</figcaption></figure>
|
|||
|
|
<article class="chapter" id="chapitre-6">
|
|||
|
|
<div class="chapter-top"><span class="chapter-number">CHAPITRE 06</span><span class="chapter-date">20 — 31 août 2026</span></div>
|
|||
|
|
<h2>Un écosystème doit<br>pouvoir hériter.</h2>
|
|||
|
|
<p>Le 20 août, une CI est ajoutée. Sa préparation pose une question simple : un clone public, sans l’environnement du mainteneur, passe-t-il ses propres vérifications ? L’essai révèle cinq défauts. La portabilité cesse de se déduire du bon fonctionnement d’une seule installation.</p>
|
|||
|
|
<p>Le lendemain, le projet nomme son <strong>génome</strong> : les dépôts nécessaires à sa reproduction. Puis un runner apprend à l’exécuter. Posséder une copie du code ne suffit pas ; l’écosystème doit avoir les outils et les accès lui permettant de s’en servir.</p>
|
|||
|
|
<div class="power-grid"><div><span>01 / LE PLAN</span><h3>Calculer</h3><p>Produire l’inventaire depuis les déclarations.</p></div><div><span>02 / LE LOCATAIRE</span><h3>Configurer</h3><p>Appliquer les services avec sa propre voûte.</p></div><div><span>03 / LE SITE</span><h3>Matérialiser</h3><p>Créer les VM avec les accès à la fabric.</p></div></div>
|
|||
|
|
<p>Les pouvoirs se séparent entre site et locataire. Le 28 août, un ancien mot de passe partagé entre plusieurs voûtes est remplacé par des clés distinctes. Le même moteur peut tourner partout ; les secrets présents bornent sa portée. L’amorçage d’un nouveau runner est codifié, au lieu de rester une opération connue du seul mainteneur.</p>
|
|||
|
|
<p>La filiation, la mutualisation et l’émancipation deviennent des états explicites. Un petit écosystème peut emprunter des services au site, puis reprendre certaines fonctions chez lui. Dans le même mouvement, Collabora passe en natif : la dernière exception conteneurisée disparaît.</p>
|
|||
|
|
<div class="source-list"><span>TRACES GIT</span><a href="#sources" data-commit="a68b9cd">a68b9cd ↗</a><a href="#sources" data-commit="742bcbf">742bcbf ↗</a><a href="#sources" data-commit="665b07b">665b07b ↗</a><a href="#sources" data-commit="2b55761">2b55761 ↗</a><a href="#sources" data-commit="377462b">377462b ↗</a><a href="#sources" data-commit="90ea474">90ea474 ↗</a><a href="#sources" data-commit="70e5707">70e5707 ↗</a></div>
|
|||
|
|
</article>
|
|||
|
|
<article class="chapter" id="chapitre-7">
|
|||
|
|
<div class="chapter-top"><span class="chapter-number">CHAPITRE 07</span><span class="chapter-date">1 — 12 septembre 2026</span></div>
|
|||
|
|
<h2>Les fondations passent<br>la même épreuve.</h2>
|
|||
|
|
<p>Le gabarit doré avait grossi jusqu’à recopier le socle et son durcissement. Il devient minimal le 1er septembre : quatre rôles, juste ce qui doit exister avant qu’Ansible puisse agir. Le reste revient aux playbooks de conformité. Le 9, cloud-init est retiré des machines après leur naissance, pour qu’il ne réapplique plus une configuration concurrente au démarrage.</p>
|
|||
|
|
<p>Les sauvegardes quittent la flotte du locataire pour le dépôt du site. Leur vérification suit un principe précis : <strong>celui qui détient la clé juge le contenu</strong>. L’hébergeur peut vérifier que son stockage reçoit des écritures ; il ne peut pas lire à la place du locataire ses instantanés chiffrés.</p>
|
|||
|
|
<p>L’observabilité remonte dans l’ordre de déploiement, juste après la confiance PKI. La reconstruction doit être observable pendant qu’elle se déroule. Puis vient l’épreuve des fondations : le 12 septembre, les VM du site d’hébergement sont elles-mêmes reconstruites depuis zéro.</p>
|
|||
|
|
<div class="evidence"><div><b>16</b><span>défauts révélés au premier tour<br>du site · 12 septembre</span></div><div><b>37′24″</b><span>au troisième tour, sans nouveau défaut<br>deux passages documentés</span></div></div>
|
|||
|
|
<p>La première tentative découvre seize obstacles. La deuxième en trouve deux autres et corrige le runbook. La troisième aboutit sans nouveau défaut. Les hyperviseurs et la frontière ne sont pas reconstruits par cette épreuve : son périmètre est celui des machines virtuelles du site.</p>
|
|||
|
|
<div class="source-list"><span>TRACES GIT</span><a href="#sources" data-commit="2f2323b">2f2323b ↗</a><a href="#sources" data-commit="6653f49">6653f49 ↗</a><a href="#sources" data-commit="53d7b4c">53d7b4c ↗</a><a href="#sources" data-commit="a8af541">a8af541 ↗</a><a href="#sources" data-commit="bef0655">bef0655 ↗</a><a href="#sources" data-commit="b9b0d87">b9b0d87 ↗</a></div>
|
|||
|
|
</article>
|
|||
|
|
<article class="chapter" id="chapitre-8">
|
|||
|
|
<div class="chapter-top"><span class="chapter-number">CHAPITRE 08</span><span class="chapter-date">13 — 17 septembre 2026</span></div>
|
|||
|
|
<h2>L’autonomie se joue<br>aussi dans les clés.</h2>
|
|||
|
|
<p>La console devient un service du runner. Sa publication oblige à rendre explicite son authentification : le jeton de la page protège les requêtes, il n’identifie pas l’utilisateur. Une entrée protégée est ajoutée ; la console distingue ensuite ce qu’un site et un locataire ont le pouvoir de faire.</p>
|
|||
|
|
<p>Le 16 septembre, la remise au client prend une forme exécutable. <strong>D’abord l’identité, puis la machine à une échéance inscrite.</strong> La clé du client entre, celle de l’exploitant sort, la voûte change de clé. Un registre nomme le responsable et une preuve surveille les engagements de remise.</p>
|
|||
|
|
<p>Les zones DNS publiques se construisent autour du même partage : le locataire écrit et signe, le site sert. Le matériel rejoint la supervision avec ses températures et ses capteurs. Enfin, l’administration entre par des tunnels WireGuard nominatifs, déclinés par locataire et limités à son réseau.</p>
|
|||
|
|
<p>Le dernier commit du corpus corrige un petit paradoxe : le premier pair VPN ne pouvait pas obtenir d’adresse parce qu’aucun pair n’existait encore. Jusqu’au bout, <strong>le premier usage réel révèle ce que le cas déjà installé ne montre pas</strong>.</p>
|
|||
|
|
<div class="turning-point"><span>Ce qui change</span>La souveraineté prend une forme concrète : des pouvoirs séparés, des accès révocables et une procédure pour les transmettre.</div>
|
|||
|
|
<div class="source-list"><span>TRACES GIT</span><a href="#sources" data-commit="627ef00">627ef00 ↗</a><a href="#sources" data-commit="0cbb9fd">0cbb9fd ↗</a><a href="#sources" data-commit="712ad9f">712ad9f ↗</a><a href="#sources" data-commit="49ceb81">49ceb81 ↗</a><a href="#sources" data-commit="be8c391">be8c391 ↗</a><a href="#sources" data-commit="05b85eb">05b85eb ↗</a></div>
|
|||
|
|
</article>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<section class="archive" id="archives" aria-labelledby="archive-title">
|
|||
|
|
<div class="archive-head"><div><span class="kicker">Les pièces du récit</span><h2 id="archive-title">Chaque commit<br>a laissé une trace.</h2></div><p>Retrouvez une décision, un service ou un incident dans les 641 titres originaux. Du plus récent au plus ancien.</p></div>
|
|||
|
|
<div id="archive-interactive" hidden>
|
|||
|
|
<div class="archive-controls"><div><label for="commit-search">Rechercher dans les titres, dates et identifiants</label><input type="search" id="commit-search" placeholder="Par exemple : sauvegarde, première, DNS…" autocomplete="off" aria-controls="commit-list"></div><div><label for="commit-month">Période</label><select id="commit-month" aria-controls="commit-list"><option value="">Tout l’historique</option value="2026-06">Juin · 21 commits</option><option value="2026-07">Juillet · 151 commits</option><option value="2026-08">Août · 310 commits</option><option value="2026-09">Septembre · 159 commits</option></select></div></div>
|
|||
|
|
<p class="result-count" id="result-count" role="status" aria-live="polite" aria-atomic="true"></p>
|
|||
|
|
<ol class="commit-list" id="commit-list"></ol>
|
|||
|
|
<div class="archive-end"><button type="button" class="more-button" id="show-more">Afficher 12 commits de plus ↓</button><span id="visible-count"></span></div>
|
|||
|
|
</div>
|
|||
|
|
<noscript><p>Le récit et ses repères restent lisibles sans JavaScript. La recherche dans les commits nécessite JavaScript ; l’historique complet se consulte aussi avec <code>git log 05b85eb</code>.</p></noscript>
|
|||
|
|
</section>
|
|||
|
|
<section class="source-method" id="sources" aria-labelledby="sources-title">
|
|||
|
|
<div><span class="kicker">Méthode & provenance</span><h2 id="sources-title">Une histoire située.<br>Des traces consultables.</h2></div>
|
|||
|
|
<div><p>Cette chronique est une lecture éditoriale de l’historique Git, des messages des commits charnières et du changelog. Les huit chapitres sont un découpage du récit, pas des versions officielles du logiciel.</p><p>Le corpus contient les <strong>641 commits accessibles depuis <code>05b85eb</code></strong>, fusions comprises. Les dates sont les dates d’auteur conservées par Git. Les 86 jours couvrent les deux bornes, du 24 juin au 17 septembre 2026 ; ils ne mesurent pas un temps de travail. Le graphique compte les commits par jour, pas leur importance.</p><p>Les liens « Traces Git » affichent le titre original, la date et l’identifiant complet. Depuis un clone du dépôt, <code>git show <identifiant></code> permet de relire le message et le changement. Cette page conserve un instantané ; les commits ultérieurs n’y sont pas ajoutés automatiquement.</p><p>Le premier commit contient déjà un ensemble substantiel. Cette chronique ne reconstitue pas une genèse antérieure que Git ne documente pas. Projet porté par <strong>Daniel Allaire · Chezlepro / Alliance Boréale</strong>.</p></div>
|
|||
|
|
</section>
|
|||
|
|
<section id="reserves" class="honest" aria-labelledby="reserves-title">
|
|||
|
|
<h2>Ce que cette histoire ne prouve pas.</h2>
|
|||
|
|
<p>Les résultats de reconstruction sont ceux <strong>consignés à leur date</strong>. Les 82 preuves du rapport du 17 septembre portent sur la cohérence du dépôt ; elles ne constituent pas un contrôle en direct de la flotte.</p>
|
|||
|
|
<p>Une reconstruction réussie ne démontre ni la tenue sous charge, ni toutes les mises à jour à venir. L’épreuve par un opérateur indépendant reste un protocole dans les documents consultés. La convergence demeure pilotée par un humain : le projet ne revendique pas une boucle d’auto-réparation.</p>
|
|||
|
|
<p>Le récit s’arrête au commit <code>05b85eb</code>. Il laisse visibles les erreurs et les changements de direction qui ont fait évoluer le moteur.</p>
|
|||
|
|
</section>
|
|||
|
|
<section class="close" aria-labelledby="suite-title"><span class="kicker">La suite reste à écrire</span><h2 id="suite-title">Construire. Relire.<br><em>Pouvoir transmettre.</em></h2><p>Au terme de ces 641 commits, Set-OPS porte des services et la mémoire de ce qu’il a fallu apprendre pour les faire tenir ensemble.</p><a class="read-link" href="index.html">Découvrir le moteur <span aria-hidden="true">↗</span></a></section>
|
|||
|
|
</div>
|
|||
|
|
</main>
|
|||
|
|
<footer class="footer"><div class="frame footer-inner"><span>Chezlepro inc. · Saint-Bruno-de-Montarville, Québec</span><span>Chronique 01 · Juin — septembre 2026 · <a href="#top">Retour au début ↑</a></span></div></footer>
|
|||
|
|
<dialog class="commit-dialog" id="commit-dialog" aria-labelledby="dialog-title">
|
|||
|
|
<div class="dialog-top"><span class="kicker">Une trace dans Git</span><form method="dialog"><button class="dialog-close" aria-label="Fermer le détail du commit">Fermer ×</button></form></div>
|
|||
|
|
<p id="dialog-date"></p><h2 id="dialog-title"></h2><code id="dialog-hash"></code>
|
|||
|
|
<p>Titre original du commit. Pour consulter son message complet et les fichiers modifiés, utilisez cette commande depuis le dépôt :</p>
|
|||
|
|
<label for="commit-command">Commande de consultation</label><input id="commit-command" readonly spellcheck="false">
|
|||
|
|
<div class="copy-row"><button class="more-button" type="button" id="copy-command">Copier la commande</button><span id="copy-status" role="status" aria-live="polite"></span></div>
|
|||
|
|
</dialog>
|
|||
|
|
<script id="commit-data" type="application/json">[
|
|||
|
|
{"hash":"3dd3f43ad8e76b5924ac730dab7d1fa426870df0","date":"2026-06-24","subject":"Set-OPS — moteur d'ecosystemes numeriques souverains (Alliance Boreale)"},
|
|||
|
|
{"hash":"c77ec20e4a1da349b2dd80baa9f069ff123e1765","date":"2026-06-25","subject":"Corriger instancier-appliquer FORCE=1 (ne relayait pas --force)"},
|
|||
|
|
{"hash":"5d30a3a60848c538b0be4c4ea80499b5fe3e0a7d","date":"2026-06-30","subject":"Dimensionner les ressources VM depuis les logiciels hébergés"},
|
|||
|
|
{"hash":"6c1d26ebf724839ab057da194b6a49bfd8374a70","date":"2026-06-30","subject":"GUI : panneau Intrants de base, info-bulles, source d'identité partagée"},
|
|||
|
|
{"hash":"9f7bb229f30da462da733797d751736bc00e93c5","date":"2026-06-30","subject":"Docs : présentation de l'écosystème Chezlepro et schéma de la méta-classe"},
|
|||
|
|
{"hash":"441dd284bbb8f3b9abad87febc6720b29c82dac4","date":"2026-06-30","subject":"Documenter les paramètres de make config"},
|
|||
|
|
{"hash":"a21a6b4e02843e879bbf892369da053f98ef1a0e","date":"2026-06-30","subject":"GUI : fluidité d'exploitation et vue Inventaire en lecture seule"},
|
|||
|
|
{"hash":"738fd2b88c73aff5dbdf5bb5b52c8e4841ae0690","date":"2026-06-30","subject":"GUI vue Serveurs : Nœud/Stockage en déroulantes, Intégrations en cases à cocher"},
|
|||
|
|
{"hash":"2f9db3f5166b735d792f64f4ead94f4a2b35da0f","date":"2026-06-30","subject":"GUI : retirer la vue Chaîne redondante"},
|
|||
|
|
{"hash":"5176d714e9d3a6a8c841c9991c9ac42267ec6695","date":"2026-06-30","subject":"GUI : atelier maître-détail unifié + fusion Serveur/Hôte"},
|
|||
|
|
{"hash":"3a3a80e0ac8c3b1fbce37e88c66637829e5e06ed","date":"2026-06-30","subject":"Appliquer chezlepro_timezone (rôle chrony) + nettoyer le CSS mort du GUI"},
|
|||
|
|
{"hash":"c4e73f8712d81509a009a4ec0fc7293e3004aad1","date":"2026-06-30","subject":"Consolider les secrets dans une voûte unique par environnement"},
|
|||
|
|
{"hash":"8b3648e9f9fd5f0899ecfcb50fa28c23453fe5c0","date":"2026-06-30","subject":"Garde-fou de déploiement par instance (setops_production)"},
|
|||
|
|
{"hash":"e2b924cedc018def967ce3a55ad04a0ac2726698","date":"2026-06-30","subject":"Inventaire d'instance neutre et configurable (principal / SETOPS_INVENTAIRE)"},
|
|||
|
|
{"hash":"0e7cefbb2fd80e1417143e6a9119e65afa3bb94c","date":"2026-06-30","subject":"setops_production : garde-fou de prudence, plus un blocage de déploiement"},
|
|||
|
|
{"hash":"e57d2c265aaca05e35ed87c97375a931177e2b3b","date":"2026-06-30","subject":"Bascule d'instance (make instance-utiliser) + identité relative à l'inventaire"},
|
|||
|
|
{"hash":"8cc5ce81121af593e63d954dc75789d7930afb17","date":"2026-06-30","subject":"Doc : cadrage multi-instances (un moteur, N écosystèmes)"},
|
|||
|
|
{"hash":"8029083536c1a7ad4cd5fe0dbdd121424471a361","date":"2026-06-30","subject":"Adressage fédéré : index d'instance (préfixe VMID + supernet)"},
|
|||
|
|
{"hash":"6df94fd713d3b8328d28deb5c61bcbf96454fb5c","date":"2026-06-30","subject":"Doc : formule supernet = 10.(10+index) (Chezlepro 10.11, Technolibre 10.12)"},
|
|||
|
|
{"hash":"a9a1493440a9c1cf179312621fad4880002087bb","date":"2026-06-30","subject":"Plancher de résolution /etc/hosts (indépendant du DNS)"},
|
|||
|
|
{"hash":"614cebcc5537b49ecdb02c9284a32f057971405c","date":"2026-06-30","subject":"GUI : retirer la section « Groupes » du détail (redondante)"},
|
|||
|
|
{"hash":"da85af2a6227c5edf76b03c29bb453b082395d17","date":"2026-07-01","subject":"Corriger 3 bugs trouvés au premier déploiement réel (asgard)"},
|
|||
|
|
{"hash":"7a98678bd9ce859c745b9568bfacf8eb9d80f346","date":"2026-07-01","subject":"GUI : bouton « Pousser » (flux 100 % cliquable)"},
|
|||
|
|
{"hash":"347e739818641565b29a89c19c909ed04966d066","date":"2026-07-01","subject":"GUI : état réel (sonde de vie) + auto-actif"},
|
|||
|
|
{"hash":"213724f566a990eecab7cf2f4c7309fc82818adb","date":"2026-07-01","subject":"GUI : réparer « Appliquer le plan » (forçait pas) + rendre l'auto-actif visible"},
|
|||
|
|
{"hash":"f82630de6c47c6b3cc657193cd89ba82694e1912","date":"2026-07-01","subject":"Rendre le dry-run (--check) fiable sur les rôles applicatifs"},
|
|||
|
|
{"hash":"4d26c151043c06b6adbdd8daa91d848884c294cd","date":"2026-07-01","subject":"GUI : « Vérifier » demande (optionnellement) le mot de passe vault"},
|
|||
|
|
{"hash":"bbcf08790427397f6e7969672cd34c2a61a179af","date":"2026-07-01","subject":"Câbler les secrets des rôles à leur variable de voûte (vault_*)"},
|
|||
|
|
{"hash":"27b8f51f1586835887ae972fb2d3f0089c0cfcc4","date":"2026-07-01","subject":"step_ca : dry-run check-safe (install + init du dépôt Smallstep)"},
|
|||
|
|
{"hash":"937ac700b91defeb39f32df245d82ea9574984c4","date":"2026-07-01","subject":"instancier : déchiffrer la voûte pour ansible-inventory (exit 4)"},
|
|||
|
|
{"hash":"a8319d43673bf60db49ecf4f02eeff4ec9af0bdc","date":"2026-07-01","subject":"serveur_nginx : corriger server_tokens en double (Debian 13)"},
|
|||
|
|
{"hash":"a5903f192bc034f12632365cacacdd14ee60f55c","date":"2026-07-02","subject":"client_pki : SANs explicites sur le certificat d'hôte (mTLS)"},
|
|||
|
|
{"hash":"1e2c3231567ec616104f9973a65f8fc9eb915297","date":"2026-07-02","subject":"docs: cadrage du service de courriel souverain (Stalwart, full self-host)"},
|
|||
|
|
{"hash":"1edd205d13cf50cd706d3050563caabaecfb3435","date":"2026-07-02","subject":"serveur_openldap : TLS via step_ca + organisation en intrant (code prod)"},
|
|||
|
|
{"hash":"6117e2820c71ba8fccd1f9da2492af42ac979871","date":"2026-07-02","subject":"docs(courriel): faits réels du recon DNS + démarche A/B"},
|
|||
|
|
{"hash":"68af9172c363ce2e538ebc08db07f3ddbb858a06","date":"2026-07-02","subject":"deployer : socle en premier dans l'ordre des playbooks"},
|
|||
|
|
{"hash":"1a59af4d5bdd235a89ad2fb908cd43805db82373","date":"2026-07-02","subject":"serveur_openldap : installer debconf-utils (module debconf) — validé en réel"},
|
|||
|
|
{"hash":"e3efbb5b1ad34c779e51c7fc006f004bdcf728a1","date":"2026-07-02","subject":"serveur_stalwart : Phase 1 (install + démarrage), code prod"},
|
|||
|
|
{"hash":"e01adac67b10d436bbd13bbfd685ee6a65dee6b8","date":"2026-07-02","subject":"Courriel : pivot de Stalwart vers Postfix/Dovecot/rspamd"},
|
|||
|
|
{"hash":"f3e78c55e1c3eb1bf51d2883c658dfae5131a3ed","date":"2026-07-02","subject":"docs: architecture d'identité/SSO (OpenLDAP source, Keycloak fédéré)"},
|
|||
|
|
{"hash":"7549c61e75ced56937a78bc916280a2ea885a2cb","date":"2026-07-02","subject":"serveur_dovecot (Dovecot 2.4) : IMAP + auth LDAP + TLS step_ca — prouvé"},
|
|||
|
|
{"hash":"c440b776ab817009358e973260aef27b203c1960","date":"2026-07-02","subject":"docs(courriel): topologie MTA dédié (edge) + boîtes internes"},
|
|||
|
|
{"hash":"a4b25018e623fce7f9412609b1361758f9f40b54","date":"2026-07-02","subject":"serveur_dovecot : LMTP réseau pour un MTA distant (edge-mta)"},
|
|||
|
|
{"hash":"9480e585a5768f787aecda6a592dfa7ea2893479","date":"2026-07-02","subject":"serveur_postfix (Postfix 3.x) : MTA edge-mta — cartes LDAP + LMTP + TLS step_ca"},
|
|||
|
|
{"hash":"e17ae54fda0884f2b74830bb92d7069dc2c10c59","date":"2026-07-02","subject":"serveur_postfix : résolution du plancher /etc/hosts (native + chroot)"},
|
|||
|
|
{"hash":"5846a08667bfbc712078f3520a9ca08dde56636d","date":"2026-07-02","subject":"serveur_dovecot : remise LMTP fonctionnelle — flux courriel interne prouvé"},
|
|||
|
|
{"hash":"8df1db3b4740ecb1d34082fc13e0cfcd4231c3eb","date":"2026-07-02","subject":"serveur_rspamd (rspamd 3.x) : antispam + DKIM en milter Postfix — prouvé"},
|
|||
|
|
{"hash":"defe16d1769d17c2d87776f10deef65219c2e35c","date":"2026-07-02","subject":"docs: bilan des pouvoirs de Set-OPS (docs/pouvoirs-set-ops.md)"},
|
|||
|
|
{"hash":"60b7de980f3763489c547a9787230844f35b1b47","date":"2026-07-02","subject":"Licence : CC BY-NC-SA 4.0 → AGPLv3 (verbatim) + modèle libre/services"},
|
|||
|
|
{"hash":"4454e1e18bff73eed1290b5135db4a3fedb23b3c","date":"2026-07-03","subject":"docs: conception des bindings (relations app/base/serveur/domaine)"},
|
|||
|
|
{"hash":"d95b26c2430012f7e665617212cc87e56282a6c1","date":"2026-07-03","subject":"bindings Phase 1 : résolveur de liens dans instancier (relations déclaratives)"},
|
|||
|
|
{"hash":"2755df44f13b8486183b4170434147a4c749a600","date":"2026-07-03","subject":"docs(bindings): réconcilier la Phase 2 (bases) avec le code réel"},
|
|||
|
|
{"hash":"a8bea83a917095969d65ca84b8042a74dfd21239","date":"2026-07-03","subject":"docs: carte d'orientation (index + mécanismes) + rafraîchir la maturité"},
|
|||
|
|
{"hash":"c33cdf672980aec2580d6c75b652e5a8e391cf1c","date":"2026-07-03","subject":"Keycloak + PostgreSQL éprouvés sur VM réelles (binding app→base prouvé)"},
|
|||
|
|
{"hash":"c707b693c440e498d00e0afbbd99f7f17c1a50d5","date":"2026-07-03","subject":"serveur_keycloak : fédération LDAP (modèle A) automatisée et prouvée"},
|
|||
|
|
{"hash":"5e3e4e0a4670a15c9828349224dfbb74ca0ab041","date":"2026-07-03","subject":"serveur_keycloak : corriger le lint (risky-shell-pipe) de la fédération"},
|
|||
|
|
{"hash":"72619a5be547bac37f4aae276fe242b48260e6dc","date":"2026-07-03","subject":"Edge nginx + exposition (Phase 3 bindings) prouvés avec Keycloak"},
|
|||
|
|
{"hash":"bcd6371243603244c113b0557ebefc4d9f113732","date":"2026-07-03","subject":"Cert de l'edge nginx : snakeoil → step_ca (HTTPS valide)"},
|
|||
|
|
{"hash":"67699e7841cad2410b9a605c82cff2e4ab4d5bdb","date":"2026-07-03","subject":"Grafana branché au SSO OIDC (« Se connecter avec Chezlepro ») — prouvé"},
|
|||
|
|
{"hash":"494dbb32dcb8c3c42c8f5be2e89b63e13059168a","date":"2026-07-03","subject":"serveur_keycloak : enregistrement des clients OIDC codifié (kcadm idempotent)"},
|
|||
|
|
{"hash":"00ba515aadbdb23544b6d45c3b6dbf027263fe31","date":"2026-07-03","subject":"serveur_powerdns : A d'exposition auto-dérivés (DNS de la Phase 3 bindings)"},
|
|||
|
|
{"hash":"a870c9befe38d63562698de9575ea7fabfeebffa","date":"2026-07-03","subject":"hosts_statiques : alias d'exposition dans le plancher /etc/hosts (résolution sûre)"},
|
|||
|
|
{"hash":"fa945de5a7bca6eb59dd90d4524148f0aad1308a","date":"2026-07-03","subject":"client_unbound : résolveur local (DNS dynamique) — éprouvé sur un nœud"},
|
|||
|
|
{"hash":"e214dcf4ed0044b7b16f786d2e109897673f4c9b","date":"2026-07-03","subject":"Forgejo au SSO OIDC (2e app SSO) — éprouvé sur forge-01"},
|
|||
|
|
{"hash":"889e9af97a8bbcc13a3303dadd0158a18146cfad","date":"2026-07-03","subject":"DRY : rôle utilitaire partagé resoudre_base (résolution BD depuis le registre)"},
|
|||
|
|
{"hash":"2eecbc721142cd678912462deae4d1a2bf865e12","date":"2026-07-03","subject":"docs(catalogue): Forgejo éprouvé (SSO OIDC, 2e app)"},
|
|||
|
|
{"hash":"b4438a697e5cc533cc61da8400de50e32b7a4819","date":"2026-07-03","subject":"serveur_redis éprouvé (cache réseau, auth obligatoire)"},
|
|||
|
|
{"hash":"36cf62236dc638af4d145b12722fb55635fc1eb1","date":"2026-07-03","subject":"Cœur Icinga éprouvé (supervision active) + DRY confirmé sur icinga"},
|
|||
|
|
{"hash":"b3b972fb5e404facefde56aa60c3b31c776b4ddd","date":"2026-07-03","subject":"serveur_icingaweb2 : Icinga Web 2 (UI + module IcingaDB) — éprouvé"},
|
|||
|
|
{"hash":"2ed919e914beb6a892d7f2c3b382007c2cac808e","date":"2026-07-03","subject":"Module BPM éprouvé + codifié — pile Icinga complète"},
|
|||
|
|
{"hash":"b60c5dc963fdd3b3caa85b594bfc7bd0bd2774ea","date":"2026-07-03","subject":"serveur_oauth2_proxy : passerelle SSO OIDC générique + Icinga Web 2 au SSO"},
|
|||
|
|
{"hash":"3c1cd3e90edd3e511a65b9608562443ea59b475f","date":"2026-07-03","subject":"Consolider : retirer la cruft (8 dossiers-catégories + 5 échafaudages morts)"},
|
|||
|
|
{"hash":"0a0563c226411e691352450585a032be4cdd08e3","date":"2026-07-03","subject":"Consolider : binding annuaire (resoudre_annuaire) — keycloak/dovecot/postfix"},
|
|||
|
|
{"hash":"7476a54f225b38abdc07946c8a5706b08e53b03f","date":"2026-07-03","subject":"Sauvegardes applicatives (restic) : serveur_backup + client_backup — Tier 0 prouvé"},
|
|||
|
|
{"hash":"0681cdd72fb2d86b7b9210483f24d20233af8ed7","date":"2026-07-03","subject":"Sauvegardes Tier 1 généralisées (5 nœuds) — restauration prouvée"},
|
|||
|
|
{"hash":"457b89927bda297cad01c22174635f690e9433a5","date":"2026-07-03","subject":"Soumission courriel :587 interne (authentifiée) — boucle souveraine bouclée"},
|
|||
|
|
{"hash":"1f1b722a00a3dce3f78ba0e1bc694a8e0ebdbf1b","date":"2026-07-03","subject":"Binding annuaire complété : icingaweb2 + client_ldap → resoudre_annuaire"},
|
|||
|
|
{"hash":"dd10ae80105c49645e7ac3ef83fd9d73e26151ff","date":"2026-07-03","subject":"Thème de connexion Keycloak à l'identité Alliance Boréale"},
|
|||
|
|
{"hash":"53acf1e209f73150528f8e356d7da4a34f116236","date":"2026-07-03","subject":"Thème Keycloak : constellation animée en fond du login"},
|
|||
|
|
{"hash":"987ba88644959b86978f05d8ab7a9656e5479a65","date":"2026-07-03","subject":"Thème Keycloak : console de compte (account) à l'identité Alliance"},
|
|||
|
|
{"hash":"c5434bb33c905cfeb013d7e548261fd1ff985f23","date":"2026-07-04","subject":"Thème login Keycloak : corriger fond, constellation et champs (vrais sélecteurs KC 26)"},
|
|||
|
|
{"hash":"a917bac386dd893750e345d27bc5ca6943ee9525","date":"2026-07-04","subject":"Thème account Keycloak : couvrir PF4+PF5 + fond aurore + constellation"},
|
|||
|
|
{"hash":"e12c40e00cab6931e9a8dc6e3bf741c7610ada7b","date":"2026-07-04","subject":"Keycloak : option cache de thèmes (lab = désactivé, prod = activé)"},
|
|||
|
|
{"hash":"041911475596e85b6d5de5fa3e28930358192520","date":"2026-07-04","subject":"Thème Keycloak : faire apparaître la constellation (attendre le DOM)"},
|
|||
|
|
{"hash":"c785e41520fd2b3da37f3d8f7d700cae5570cd78","date":"2026-07-04","subject":"Thème account Keycloak : lisibilité (texte clair, contraste)"},
|
|||
|
|
{"hash":"ecc7b2767b4c477ea26d4ed5b2a98da1b5a5c6a6","date":"2026-07-04","subject":"docs(keycloak) : documenter le thème Alliance + la compatibilité MAJ"},
|
|||
|
|
{"hash":"346a6a519209279c672dfeeeb8b5d06db0557e80","date":"2026-07-04","subject":"docs(bindings) : taxonomie des liaisons (niveau × modalité)"},
|
|||
|
|
{"hash":"bcab5868459d2a132f7dfe529462918cae102b86","date":"2026-07-04","subject":"Agents observabilité/ops éprouvés — observabilité flotte-complète"},
|
|||
|
|
{"hash":"e006dee69325afc4471a55ad0ef5529bd3366492","date":"2026-07-04","subject":"Retirer 3 rôles legacy (serveur_sendmail, client_dns, client_ldap) + nettoyage"},
|
|||
|
|
{"hash":"a943fa622249fcf1b48b12ff9a264644716d90ba","date":"2026-07-04","subject":"GUI : boutons cohérents (Créer la VM / Déployer), fin de « Pousser » ambigu"},
|
|||
|
|
{"hash":"3964a712b1fb9f4786d1c673e0589041b75a8886","date":"2026-07-04","subject":"wiki : socle pédagogique + unité-pilote « Identité & SSO »"},
|
|||
|
|
{"hash":"b342e5796b9dec21e6af8db8dd03c1f26dedafd0","date":"2026-07-04","subject":"wiki : unités PKI, DNS, Sauvegardes (Fondations complètes + Données)"},
|
|||
|
|
{"hash":"716be304c55629b735c47820e866a14496ccda10","date":"2026-07-04","subject":"wiki : 10 unités restantes (Communication, Données, Observabilité, Socle & méthode)"},
|
|||
|
|
{"hash":"e9ca9434250821cd151109af1c426532824e26a7","date":"2026-07-04","subject":"Forgejo : identité visuelle Alliance (custom/ officiel, léger)"},
|
|||
|
|
{"hash":"4887d2aee8d37cd571fa4dbd95f8afeb84fd8111","date":"2026-07-04","subject":"Grafana : dashboard provisionné « Journaux de la flotte » (Loki, Viewer-friendly)"},
|
|||
|
|
{"hash":"c5df8fac4a74f40902241feca4b16502354b0616","date":"2026-07-04","subject":"RBAC via SSO : rôle de realm Keycloak → niveau Grafana (authZ)"},
|
|||
|
|
{"hash":"94c9277c3df6806a4339d6a2de543997a722954b","date":"2026-07-04","subject":"client_pki : recharger le vrai consommateur au renouvellement de cert"},
|
|||
|
|
{"hash":"b6952759f5e015ded427cbfdc8103bf9cef114a0","date":"2026-07-04","subject":"Doc à jour : unité wiki Autorisation & RBAC + leçon renouvellement + runbooks"},
|
|||
|
|
{"hash":"5aa7fcafdbd91f7016eca1470c46a4d9701f298f","date":"2026-07-04","subject":"PostgreSQL : servir le cert step-ca (TLS vérifiable), non-bloquant"},
|
|||
|
|
{"hash":"fa6ef8b031e54d9f9669c8fa238f008f64020811","date":"2026-07-04","subject":"Zéro-confiance : Keycloak→PG en verify-full + root_ca lisible (0644)"},
|
|||
|
|
{"hash":"a51ddc6296ae1c5a86a6975765789c2448a6909c","date":"2026-07-04","subject":"Zéro-confiance : Forgejo→PG en verify-full"},
|
|||
|
|
{"hash":"d26651a4321fa87aea60ff15626e73a41669c892","date":"2026-07-04","subject":"Zéro-confiance : IcingaDB→PG en TLS vérifié (cert step-ca)"},
|
|||
|
|
{"hash":"204910edbf9ed0ca532d6ec674174ed7ba568d91","date":"2026-07-04","subject":"Zéro-confiance PG : verrou hostssl + détection de version robuste"},
|
|||
|
|
{"hash":"e648009b8771a9196c4df3c04da4c2476b2ec6ea","date":"2026-07-04","subject":"Zéro-confiance : flux Métriques chiffré (node_exporter TLS + scrape https)"},
|
|||
|
|
{"hash":"660aee91fa341b36abaffa94f6c5a62023933c54","date":"2026-07-04","subject":"Zéro-confiance : flux Logs chiffré (Loki HTTPS + Alloy push https)"},
|
|||
|
|
{"hash":"20329895f7c47ce6bc037aff55f59ec962aa97dc","date":"2026-07-04","subject":"Zéro-confiance : flux Courriel chiffré (LMTP verify + client_smtp STARTTLS)"},
|
|||
|
|
{"hash":"f7b8438cbd38c95948ba7320cd97efb50bf43c18","date":"2026-07-04","subject":"nomenclature : VMID 9 chiffres ip-miroir (opt-in, fédération)"},
|
|||
|
|
{"hash":"5108a6c04d95cb27605563baeff492a81a9cfcbc","date":"2026-07-05","subject":"Références par FQDN partout : fin des IP codées en dur"},
|
|||
|
|
{"hash":"867e2f8cdc893329302c20b7e1fe8c547082244e","date":"2026-07-05","subject":"Découplage instance : realm centralisé + vars génériques"},
|
|||
|
|
{"hash":"4037eafb63aab4cc358932a35410cd46b1226992","date":"2026-07-05","subject":"Modèle integral rafraîchi : 6 zones, fonctions éprouvées, VMID ip-miroir, nouveaux intrants"},
|
|||
|
|
{"hash":"6eb178598f5a1691e1b76b19bb002aa28d7d284b","date":"2026-07-05","subject":"Modèles partiels rafraîchis (socle/identite/observabilite/forge) + presence-web flaggé"},
|
|||
|
|
{"hash":"5f3af67322774f830309e4f254494a0f71e16738","date":"2026-07-05","subject":"CHANGELOG 2026-07-05 : zéro-confiance (métriques/logs/courriel), VMID ip-miroir, Technolibre, FQDN, découplage tenant, modèles"},
|
|||
|
|
{"hash":"04d807c78d6087d0a23fdded618c8eda861913f1","date":"2026-07-05","subject":"Module Collaboration : squelette serveur_nextcloud (defaults/meta/README)"},
|
|||
|
|
{"hash":"c98bc8393f5729e9b24f054930ba3450d3b44751","date":"2026-07-05","subject":"Registre des flux : schéma meta/flux.yml + pilote (postgresql/metrique/nginx)"},
|
|||
|
|
{"hash":"79d05296865df8d50c5f57ae4d5457e19b308404","date":"2026-07-05","subject":"serveur_nextcloud : rôle codifié depuis le spike (13 gotchas encodés)"},
|
|||
|
|
{"hash":"da4976aa981ae58c1eca7ab42228cefe76e040a5","date":"2026-07-05","subject":"serveur_collabora : rôle codifié depuis le spike (Docker, WOPI)"},
|
|||
|
|
{"hash":"0d2bc2c2e9f0c9af429946575317575486529b88","date":"2026-07-05","subject":"Machinerie d'exposition : SAN auto-dérivés + vhost WebSocket-aware"},
|
|||
|
|
{"hash":"1f9cc0a0d38a4b36a7faba55b19c297cf9bbe690","date":"2026-07-05","subject":"Modèles : nouveau modèle 'collaboration' + collaboration dans 'integral'"},
|
|||
|
|
{"hash":"f453f7726838dd34ba4ae193a79a89566c42b72e","date":"2026-07-05","subject":"web_frontal : rôle sites statiques (1re brique plateforme webapp, 100% natif)"},
|
|||
|
|
{"hash":"72b7579c6e29761885cae3e1faa18b1935d8796a","date":"2026-07-05","subject":"web_frontal : git clone superficiel (depth 1) + git installé + fix nom de tâche"},
|
|||
|
|
{"hash":"eee7dbd108e391dbe497069dd7715b99db0751cf","date":"2026-07-05","subject":"web_dorsal : rôle webapps dynamiques (2e brique plateforme, 100% natif)"},
|
|||
|
|
{"hash":"c8ccbb5e97232c3d432143edc51b0c85dc2302d5","date":"2026-07-05","subject":"client_pki : ré-émettre le cert sur dérive de SAN (fin du rm manuel)"},
|
|||
|
|
{"hash":"af13fc37c9fb8fa1e975156e726717ec05ebf669","date":"2026-07-05","subject":"Rôles web : renommer web_frontal/dorsal -> serveur_web_frontal/dorsal (convention)"},
|
|||
|
|
{"hash":"61a6526ffba4f2e1568cd3fcbc39373c893aa94d","date":"2026-07-05","subject":"Modèle presence-web : complété (rôles web existent) — expose + group_vars d'exemple"},
|
|||
|
|
{"hash":"a1cfe77b4a930b02276663a2f766feb3fcd2b090","date":"2026-07-05","subject":"Modèles : extraire les modèles assemblés vers un dépôt privé (Set-OPS-modeles)"},
|
|||
|
|
{"hash":"02bbba61b37cab3cf8a2cbcd2e06e270a4281aca","date":"2026-07-05","subject":"Nomenclature : VLAN dérivé (index × 10 + zone) pour réseau convergé"},
|
|||
|
|
{"hash":"f05f505b8833d46ee5c87212d6dd1d7d280cd3c6","date":"2026-07-07","subject":"Reconstruction propre : orchestrateur ordonné, registre des flux + pare-feu"},
|
|||
|
|
{"hash":"77dcc72aa6ac44ac3cea653bc6a329f9140ef5fc","date":"2026-07-07","subject":"Recette d'acceptation : make valider (phase 4, v1)"},
|
|||
|
|
{"hash":"3e7c85506c5ccce4912557bfda5c39b3cb51e429","date":"2026-07-07","subject":"Recette : valider — courriel bout-en-bout"},
|
|||
|
|
{"hash":"89d0e4e8213efa22b1d4c0e2932390728bd0745f","date":"2026-07-07","subject":"Recette : valider — restauration de sauvegarde restic"},
|
|||
|
|
{"hash":"72a5fdbbc4e36af41659b4c2ad35cd9ccd4cb66b","date":"2026-07-07","subject":"Portabilité from-zero : 4 correctifs débusqués par la reconstruction"},
|
|||
|
|
{"hash":"0363c3255c7b699f5e474e350474cec4a4dbf074","date":"2026-07-07","subject":"GUI : intégrer l'intrant nftables_admin_ssh + retirer l'empreinte obsolète"},
|
|||
|
|
{"hash":"b5e2edd3de2394711e49540839faf0261db1b037","date":"2026-07-07","subject":"GUI : vues Flux + Couches (lecture seule)"},
|
|||
|
|
{"hash":"55847b6df0baed7a12d1d7ae57fde63af30b0908","date":"2026-07-07","subject":"GUI : compléter la checklist des secrets attendus"},
|
|||
|
|
{"hash":"b4ca67289a9d3a2e7356ed12dcd0bf3a7b793264","date":"2026-07-07","subject":"GUI : persister les journaux d'exécution"},
|
|||
|
|
{"hash":"3cc00ad6601ac840192d1b23435b32bc78576c12","date":"2026-07-07","subject":"GUI : éditeur Domaines (6e onglet éditable)"},
|
|||
|
|
{"hash":"e8aba1ab74a355a04247c1ff2d0962d45d7c51fb","date":"2026-07-07","subject":"GUI : erreurs de déploiement en langage clair"},
|
|||
|
|
{"hash":"4de04ec0e17e025484511f193a699de9e5215ddc","date":"2026-07-07","subject":"Nomenclature ip-miroir : socle VLAN 1000 -> longueurs uniformes"},
|
|||
|
|
{"hash":"97670dd27c7b429c474d4150cd99e379dbf1c73d","date":"2026-07-07","subject":"make devis-reseau : config switch derivee du plan"},
|
|||
|
|
{"hash":"0580c931a727e73cef4679d78358482dc4b18bfc","date":"2026-07-07","subject":"GUI : vue Reseau (devis switch) + bouton Copier"},
|
|||
|
|
{"hash":"835f8ab6d027c685f6617e20264de0e324c4aedf","date":"2026-07-20","subject":"Mise en conformité prouvable : registre d'affirmations + make prouver"},
|
|||
|
|
{"hash":"b92521d28a7661a800b4768edac401da2c1ea04c","date":"2026-07-20","subject":"Merge pull request 'Mise en conformité prouvable : registre d'affirmations + make prouver' (#1) from conformite-prouvable into main"},
|
|||
|
|
{"hash":"6cfbc2ba87551e33201bef6aa3eb2c1c29b161af","date":"2026-07-20","subject":"Preuve complète (16/16) + détail P16 lisible"},
|
|||
|
|
{"hash":"6c4eb6c39037bbd1d51f70fff924ff61c93c7aa6","date":"2026-07-20","subject":"Merge pull request 'Preuve complète (16/16) + détail P16 lisible' (#2) from preuve-p16-complete into main"},
|
|||
|
|
{"hash":"5a53332f961a40c48feab2da3818104abc38a64e","date":"2026-07-20","subject":"make verifier inclut les preuves (make prouver --verifier)"},
|
|||
|
|
{"hash":"abb0a85d089c7a18693e9700a9a6315cba07a3e4","date":"2026-07-20","subject":"Merge pull request 'make verifier inclut les preuves (make prouver --verifier)' (#3) from prouver-dans-verifier into main"},
|
|||
|
|
{"hash":"8348a5173bc4576e59f673dc61cf8a184819e881","date":"2026-07-20","subject":"Ajoute la page de présentation (promo/index.html)"},
|
|||
|
|
{"hash":"ea2d490e207036a5fb62eb563e6526053588b678","date":"2026-07-21","subject":"Protocole d'épreuve de l'opérateur indépendant (AFF-002)"},
|
|||
|
|
{"hash":"917a2835ce50446560c0b5e77ccc243da9071f3f","date":"2026-07-21","subject":"Ajoute la page de valeur (promo/valeur.html)"},
|
|||
|
|
{"hash":"6458469098af3b1e91abb5187d57b27ec3fcabfc","date":"2026-07-21","subject":"Ajoute les pages offres et tarifs (promo/)"},
|
|||
|
|
{"hash":"7cc6b1e8789f837d95e5a796377e40bddb3dc721","date":"2026-07-21","subject":"Rend les quatre pages promo cohérentes"},
|
|||
|
|
{"hash":"f8e754c0b0e306e177b363b88735ddcdcf2dca10","date":"2026-07-21","subject":"Aurore rose-mauve et vert fluo ; thème Forgejo étendu au wiki"},
|
|||
|
|
{"hash":"131a30075d5d49512562c5ff89671cf6a39dcff4","date":"2026-07-22","subject":"Aurore : opacites reduites ; etat de forge-01 elucide"},
|
|||
|
|
{"hash":"7e190e0a5793c84fc63b739c412ac2a2579949f9","date":"2026-07-22","subject":"Trois preuves qui regardent au-dela d'une seule instance + champ liens/websocket au GUI"},
|
|||
|
|
{"hash":"36a882b125fa94847cd4ae3a9c87b3db273523fa","date":"2026-07-23","subject":"Adressage derive du seul seed index (rupture, mode compact retire)"},
|
|||
|
|
{"hash":"d2345272d4c385bd87151c0df4897d40551b532f","date":"2026-07-23","subject":"devis-reseau : noms uniques par tenant + drapeau federe"},
|
|||
|
|
{"hash":"b1460a6ddefa7637cf9e8a2e96592f9c030e609b","date":"2026-07-23","subject":"Multi-instances : make instances (vue + collision) + preuve P21"},
|
|||
|
|
{"hash":"dbc78f69ec0495bf5e34871a807a23d421cd766e","date":"2026-07-23","subject":"Aligne le GUI et la doc sur le multi-instances"},
|
|||
|
|
{"hash":"1ad7b484830a919099c5be07e2bd966a798a769a","date":"2026-07-23","subject":"GUI : bascule d'instance (vraiment multi-instance)"},
|
|||
|
|
{"hash":"9223e0823ebba43a7114c81ccc2e7e8a98fb3d7f","date":"2026-07-23","subject":"docs : figure annotée de la vue Serveurs"},
|
|||
|
|
{"hash":"40cead2a664fa721b99bd9c029a76ec79dfdb9cc","date":"2026-07-23","subject":"gitignore : ignore .claude (config Claude Code locale)"},
|
|||
|
|
{"hash":"d8474d1c9fa00d03ef617d92f1b0e04e69ee5905","date":"2026-07-23","subject":"Créer une instance depuis un modèle (CLI + GUI)"},
|
|||
|
|
{"hash":"4180913c25b117544bc301f8e8adb50ae559e1e6","date":"2026-07-23","subject":"Créer un modèle (make model-creer) — base + promotion d'instance"},
|
|||
|
|
{"hash":"ac7fe93165aa3d05d1d89ff4728c9cf82288e5f5","date":"2026-07-23","subject":"wiki : l'axe « méthode » (plan dérivé, multi-instance, preuve, glossaire)"},
|
|||
|
|
{"hash":"150121089d16c95e8a89658d6db2df4c783730ff","date":"2026-07-23","subject":"wiki : unité « Le GUI (console d'exploitation) »"},
|
|||
|
|
{"hash":"58015f56e0a25f0e33b73766e2b251a2cf011bc1","date":"2026-07-23","subject":"Plan de recette (P22) : le pendant manuel de make prouver"},
|
|||
|
|
{"hash":"412448ba557874f79caaf3bf37d540cdfc321712","date":"2026-07-23","subject":"Devis switch : dialecte cisco|binardat (masque ACL + remark)"},
|
|||
|
|
{"hash":"02f3122b3d6065e10a8be8c99771cf9ffae180cb","date":"2026-07-23","subject":"wiki : dialecte de CLI du commutateur (cisco|binardat) sur la page reseau"},
|
|||
|
|
{"hash":"272f6369d8be925ee43bfe02642e959ef9392ced","date":"2026-07-24","subject":"Underlay : fabric physique cluster-global (mgmt/iSCSI/Ceph) + preuve P23"},
|
|||
|
|
{"hash":"bbd0972f58002038bd4f26a9662f67ba2e8e66d3","date":"2026-07-28","subject":"docs : figures annotées des 7 autres vues du GUI (série complète)"},
|
|||
|
|
{"hash":"8c401f95cf834e99ce1585f6d67b25177ea1f5b7","date":"2026-07-28","subject":"wiki : intègre les 8 vues annotées à « Le GUI (console d'exploitation) »"},
|
|||
|
|
{"hash":"4a1d0836d044c797395ca87c33494accc9762bec","date":"2026-07-29","subject":"docs : un README par rôle (12 manquants) + carte remise à l'état du code"},
|
|||
|
|
{"hash":"3698152b6ab541b8aa8436af541b39c9bf182e2a","date":"2026-08-01","subject":"frontière nord/sud : devis dérivé, lien de transit et les deux routes"},
|
|||
|
|
{"hash":"069e5491608ab3ec0c22be53749a818d8ac25657","date":"2026-08-01","subject":"frontière : le prochain saut dérive du transit, il n'est plus saisi"},
|
|||
|
|
{"hash":"0d64d284026b305498c427603e22c0367bfebf53","date":"2026-08-01","subject":"devis switch : le port vers la frontière, et l'ordre d'application"},
|
|||
|
|
{"hash":"7b2ba07ffc2ad580aed87426cede0ae40ec0ecca","date":"2026-08-01","subject":"ACL de switch : les tenants n'atteignent plus la fabric physique"},
|
|||
|
|
{"hash":"2d2c5c69fa6c69f3606098f65c2d31a448773038","date":"2026-08-01","subject":"devis switch : un seul routeur, les autres en L2 pur"},
|
|||
|
|
{"hash":"7e852b5eefb410f434449d87208c9dc598190ddf","date":"2026-08-01","subject":"underlay : le routeur porte le SVI, et le transit sort de la partie B"},
|
|||
|
|
{"hash":"b613873c3a1d06bd50ad4c7bab847e1ea23e2eaf","date":"2026-08-01","subject":"nommage : bifrost aux frontières, sleipnir à la fabric interne"},
|
|||
|
|
{"hash":"e1bbeb78f8d0791da458802e01d5120f7f02f97b","date":"2026-08-01","subject":"transit : bifrost-1/-2 en .1/.2, le SVI du switch remonte en .6"},
|
|||
|
|
{"hash":"31e5121d68ae776d4a45976e3fb3a06c8b30ed10","date":"2026-08-01","subject":"underlay : chaque réseau déclare sa fabric physique"},
|
|||
|
|
{"hash":"42cd269d2967471e002490b52832a32c8e6e7f5e","date":"2026-08-01","subject":"devis switch : le roster d'hôtes se limite à la fabric configurée"},
|
|||
|
|
{"hash":"8f61721cb3e7187f701808286b1dba9496329e22","date":"2026-08-01","subject":"spanning-tree : RSTP dérivé de la topologie déclarée (étoile)"},
|
|||
|
|
{"hash":"92d31c0406ce613b83c5fee2f715587fb6d0caf7","date":"2026-08-01","subject":"devis switch : les rayons de l'étoile ne sont pas des ports de bord"},
|
|||
|
|
{"hash":"f80b53b592ddfec77f06a752598e1db506f9982a","date":"2026-08-01","subject":"devis switch : une interface, un bloc"},
|
|||
|
|
{"hash":"76e82bfb968931d14e6cd96fa691350a4d088f2c","date":"2026-08-01","subject":"underlay : les ports physiques entrent dans le modèle"},
|
|||
|
|
{"hash":"d00b60149dd06bebb75fba4f662a5a1e184fd416","date":"2026-08-01","subject":"GUI : section « Fabric » — l'underlay se règle depuis la console"},
|
|||
|
|
{"hash":"8bc8589163b2f58f47619c1cbaa8a04f2e4d0d72","date":"2026-08-01","subject":"GUI : le rappel des secrets dérive de voute.py"},
|
|||
|
|
{"hash":"7dc7720b4b0af30d8cb89da9def3ebb6b1f42ebf","date":"2026-08-01","subject":"client_pki : l'empreinte du root CA n'est pas un secret de voûte"},
|
|||
|
|
{"hash":"9804573f12e74dd4ec6f86269694c2ecbf9f013b","date":"2026-08-02","subject":"frontière : les intrants d'interface demandent l'identifiant OPNsense"},
|
|||
|
|
{"hash":"4d37570c0c58fbf15e960dc3643feb64d5c31acf","date":"2026-08-02","subject":"frontière : la sortie générale est déclarée, pas subie"},
|
|||
|
|
{"hash":"53f6af3f1a216a7eef17b4683e52e1c458e2f2ec","date":"2026-08-02","subject":"frontière : les règles couvrent tous les tenants fédérés"},
|
|||
|
|
{"hash":"26090e8acd6ea98148e12834ce8b61fd38df2432","date":"2026-08-02","subject":"frontière : chaque règle porte son interface d'arrivée"},
|
|||
|
|
{"hash":"91bbad0cdf76eac246751afda60bf393b67d1722","date":"2026-08-02","subject":"frontière : les routes de retour couvrent tous les tenants, et la case WAN"},
|
|||
|
|
{"hash":"0eae97c6ec70eedc99af87ef31c2d3457c692230","date":"2026-08-02","subject":"underlay : monté par symlink depuis le dépôt de l'hébergeur"},
|
|||
|
|
{"hash":"7256486c9cee3fd430f67e6b596ca93f38ae509f","date":"2026-08-02","subject":"modèles : l'underlay devient modélisable, et P17 le valide"},
|
|||
|
|
{"hash":"517119c7ac46f8c941eab46e8b69f84952b7ff6b","date":"2026-08-02","subject":"frontière : ses intrants appartiennent à l'hébergeur, pas au tenant actif"},
|
|||
|
|
{"hash":"351e1c1e58fa0eed005a6043c06bb3354e60943d","date":"2026-08-02","subject":"docs : recette de migration d'un tenant entre hébergeurs"},
|
|||
|
|
{"hash":"041e36ca7c4226e37b39bb7f98bd26347ad90e13","date":"2026-08-02","subject":"docs : le retour arrière de la migration, et deux renvois faux"},
|
|||
|
|
{"hash":"6f04f4c6fc109f9a3ac6d994391c4d2d91d110f4","date":"2026-08-02","subject":"docs : le responsable désigné du tenant, et la réversibilité nuancée"},
|
|||
|
|
{"hash":"38dc21407785f05f8d34e1fc1cd5f7d85e863186","date":"2026-08-02","subject":"docs : le recouvrement de la clé du responsable"},
|
|||
|
|
{"hash":"0a1a46c0092e4fe2095b3d6206b36b3d2f059ede","date":"2026-08-02","subject":"docs : le responsable prend sa section, et la symétrie est dite"},
|
|||
|
|
{"hash":"24959359e2ebbadaa095c7cffc99b32b78f44bba","date":"2026-08-02","subject":"devis switch : syntaxe des routes vérifiée sur le matériel Binardat"},
|
|||
|
|
{"hash":"34e65259ac85222f9e01f0ec5bed2b8ea4aade29","date":"2026-08-02","subject":"devis switch : le trunk ne restreignait rien"},
|
|||
|
|
{"hash":"38965824d6489b9c482393c5b73009db262722c9","date":"2026-08-02","subject":"docs : le spanning-tree du matériel — MSTP, actif, priorité par défaut"},
|
|||
|
|
{"hash":"0c55986e813eb51dbfa46c0017d2668e9aa1cbc9","date":"2026-08-02","subject":"devis switch : le mode STP se dérive, et le devis dit son incertitude"},
|
|||
|
|
{"hash":"1150a8e9c893cfcf1b570284ff667699675abe0b","date":"2026-08-02","subject":"docs : syntaxe des ACL vérifiée sur le matériel Binardat"},
|
|||
|
|
{"hash":"ed5fb25b14519d1117ea8d0eb5a4c24dfaefe597","date":"2026-08-02","subject":"devis switch : spanning-tree vérifié, les six familles de syntaxe sont closes"},
|
|||
|
|
{"hash":"b39a3a47357b27192cedf63dc2c58ee7e2d06da2","date":"2026-08-02","subject":"docs : rectification — trois syntaxes d'interface restent non vérifiées"},
|
|||
|
|
{"hash":"b5ca369ae7d481ada897e7a04739ab2a89d62d58","date":"2026-08-02","subject":"devis switch : la liaison des ACL n'existe pas sur une interface VLAN"},
|
|||
|
|
{"hash":"059d76a536aeaf73a31d2f4143173abcca7dac1f","date":"2026-08-03","subject":"devis switch : l'ACL inter-tenant devient une capacité déclarée"},
|
|||
|
|
{"hash":"c8b43f1a700f33351c715cdb5d2051d71bfff14e","date":"2026-08-03","subject":"docs : décision SDN EVPN — le routage passe aux hyperviseurs"},
|
|||
|
|
{"hash":"e5ce2b93b1f441a4753e2089c840fcfaa48bf695","date":"2026-08-03","subject":"devis switch : le SDN prend le routage tenant, le devis se vide"},
|
|||
|
|
{"hash":"87697597fb50cecdcb1c4e56f381e0a23c23dd3a","date":"2026-08-03","subject":"devis switch : la partie B déclarait encore les VLAN tenants"},
|
|||
|
|
{"hash":"58fdaa55408c97ddf1f23da5f6d28ba32bedb0aa","date":"2026-08-03","subject":"frontière : le devis rattrape la bascule SDN, et deux devis se contredisaient"},
|
|||
|
|
{"hash":"940e319285dbe1be578573040c3d50445d2e7fc3","date":"2026-08-03","subject":"frontière : la description du lien réutilisait le marqueur du prochain saut"},
|
|||
|
|
{"hash":"a85255dc35ccd757e2f935f7b629fb73534e97ba","date":"2026-08-03","subject":"GUI : le panneau présente les deux devis, et son aide n'est plus périmée"},
|
|||
|
|
{"hash":"39fab4c465a06a2147c850b6215c62c4dc1c0ba0","date":"2026-08-03","subject":"wiki : la page réseau enseignait le modèle périmé"},
|
|||
|
|
{"hash":"19175451260731799e1a80ea709e023937d276e5","date":"2026-08-03","subject":"audit : les preuves réseau étaient accrochées à la mauvaise affirmation"},
|
|||
|
|
{"hash":"625694092fb446f17de3b7f830ed2b790cb9fe19","date":"2026-08-03","subject":"docs : un index des décisions d'architecture"},
|
|||
|
|
{"hash":"67fc7012b47af2f6e1b0f8f930eec26f0ac3f9fe","date":"2026-08-03","subject":"docs : les dates du registre étaient déduites, pas vérifiées"},
|
|||
|
|
{"hash":"70fe6de557cd6aad78d5f9a5e09360f27b159d66","date":"2026-08-03","subject":"flux : l'ICMP entre au registre — l'overlay à 1450 l'exige"},
|
|||
|
|
{"hash":"6a80e5b55cafd8971c371e151152d6e3e7046736","date":"2026-08-03","subject":"underlay : un rôle par hôte, et les hyperviseurs au modèle"},
|
|||
|
|
{"hash":"89dc5ed3d436d8274a53810a0b4dec3616d612e3","date":"2026-08-03","subject":"underlay : le MTU du modèle était faux, et la garde le validait"},
|
|||
|
|
{"hash":"fd62b5998936ceae210b2384dce06172abb9fdb6","date":"2026-08-03","subject":"pare-feu Proxmox : le filtrage est-ouest intra-tenant, dérivé (P25)"},
|
|||
|
|
{"hash":"6de44736ff426ce0e04cbafb4400f751dbe068b1","date":"2026-08-03","subject":"pare-feu Proxmox : l'affectation variait selon l'état du tenant"},
|
|||
|
|
{"hash":"ece250ae491df58afdd7e7807e6c442bcca55324","date":"2026-08-03","subject":"pare-feu Proxmox : un seul schéma de nommage"},
|
|||
|
|
{"hash":"dbb4465602186d03e34097dc5935aad7a96623bc","date":"2026-08-03","subject":"pare-feu Proxmox : des IPSets partout où c'est possible, et rien d'inutile"},
|
|||
|
|
{"hash":"7b2c9272d773063320e02e90ebd28ffaff7a2f4b","date":"2026-08-03","subject":"pare-feu Proxmox : une règle par rôle source, plus aucune adresse en dur"},
|
|||
|
|
{"hash":"e9786700aad6a4b7b454f9ba73809cc674b3482a","date":"2026-08-03","subject":"pare-feu Proxmox : le SSH inter-nœud était perdu"},
|
|||
|
|
{"hash":"b0e56cbfc0df663eea4637b5edeb30e6a6c08a09","date":"2026-08-03","subject":"intégrations : le rôle déclare sa politique ; le cluster passe à l'hébergeur"},
|
|||
|
|
{"hash":"60a60b6fb1926b1d13c0b2309490158ef8ce3d04","date":"2026-08-03","subject":"pools Proxmox : un par tenant, dérivé de l'index (D-37, P28)"},
|
|||
|
|
{"hash":"4dd3d46412df39f84c88097eebadb9595818be18","date":"2026-08-03","subject":"proxmox : pools créés, jeton normalisé, reliquat de voûte supprimé"},
|
|||
|
|
{"hash":"6bef0e034333531b3017efc3ea1c54b62d735a3f","date":"2026-08-03","subject":"voûte : génération des secrets Nextcloud de Technolibre"},
|
|||
|
|
{"hash":"6a62f0a4c743d3d9038212c0475851253d7f33e5","date":"2026-08-03","subject":"authentification : SSO Keycloak devant, secours par sudo, formulaire local fermé"},
|
|||
|
|
{"hash":"22ef279464455e1dacad29f83cc8f7279d206f85","date":"2026-08-03","subject":"authentification : chaque rôle déclare sa position, gardé par P29"},
|
|||
|
|
{"hash":"3b1d9b66608a45a1f053f3ddc4711d0d847c7b4e","date":"2026-08-04","subject":"SDN : make devis-sdn — zone, VNets et sous-réseaux dérivés du seed (D-43/44, P30)"},
|
|||
|
|
{"hash":"d645532c88a42e482edd67095047eff140c1c31e","date":"2026-08-04","subject":"séparation des plans réseau + où vont les services de l'hébergeur (D-46 à D-48)"},
|
|||
|
|
{"hash":"1bc516fd927c8d8063488185dfebbabcad4670b1","date":"2026-08-04","subject":"routage : plus aucun commutateur ne route, la frontière est le seul L3 (D-49 à D-51)"},
|
|||
|
|
{"hash":"63aa79e7109ae50e567d7269e340d0dba759fc84","date":"2026-08-04","subject":"underlay : l'invariant du dernier octet retrouve sa portée (D-04, D-52 à D-54)"},
|
|||
|
|
{"hash":"89f33c5b43e6368afd5b4cf83bb87e1a5c13867c","date":"2026-08-04","subject":"réseau : le VNet d'une VM se dérive, un hyperviseur a plusieurs pattes (D-55 à D-59)"},
|
|||
|
|
{"hash":"e6c259be4d9d91b3918ee2f678b4864b2605aaa7","date":"2026-08-04","subject":"nommage : bifrost-N, où N est le dernier octet (D-60 ; D-12 renversée)"},
|
|||
|
|
{"hash":"f8977d2d29b56900674107e1840446ec4c150c3c","date":"2026-08-06","subject":"frontière : le nœud de sortie dérive, l'identifiant d'interface est vérifié"},
|
|||
|
|
{"hash":"b526160cbc6243e3faacc7aae8d8386d04694051","date":"2026-08-06","subject":"flux : réseau d'administration = VLAN 10, et make flux réparé"},
|
|||
|
|
{"hash":"510568e3b45e075480e0ba9ac9d9e3672a3e5b16","date":"2026-08-06","subject":"frontiere : l'interface d'une regle se derive de l'attachement (D-61)"},
|
|||
|
|
{"hash":"081c1ac5459fb13b63eb76b46502fc52e806035a","date":"2026-08-06","subject":"frontiere : un reconciliateur qui sait aussi RETIRER"},
|
|||
|
|
{"hash":"fa69ec7c0fb4d938f885bd8a509aca645ee51b6e","date":"2026-08-06","subject":"sortie des tenants : un saut emprunte (D-62) et le NAT derive (D-63)"},
|
|||
|
|
{"hash":"917b22ccc81339125bb22b4309d994109899c182","date":"2026-08-06","subject":"sdn : emet le noeud de sortie PRIMAIRE, et trois noeuds pour t17"},
|
|||
|
|
{"hash":"3ed25ff703a76a84caf7c1d74f80b53cd949d091","date":"2026-08-06","subject":"sdn : un applicateur qui cree, met a jour et RETIRE"},
|
|||
|
|
{"hash":"b3447d5a96f42d6899d416dbe169370918394b6d","date":"2026-08-06","subject":"proxmox-fw : un applicateur, et un refus assume"},
|
|||
|
|
{"hash":"d61c187dcf6ebe9cd5999f4d50fdc116e32e6cee","date":"2026-08-06","subject":"proxmox-fw : le DROP se pose par VM, jamais au datacenter (D-64)"},
|
|||
|
|
{"hash":"83c05b832076a4e0ecb74a53b447653a7d76e143","date":"2026-08-06","subject":"premiere VM tenant : quatre defauts leves sur le chemin"},
|
|||
|
|
{"hash":"e276e76f32ed889655307597280e8fb5280a9e49","date":"2026-08-06","subject":"dns : client_unbound universel, et un resolveur d'amorcage"},
|
|||
|
|
{"hash":"3786cc055b099f65755776d4acdba786b5d3cd72","date":"2026-08-06","subject":"flux : l'ICMP n'a pas de port — nftables n'avait jamais demarre"},
|
|||
|
|
{"hash":"f18715bc78a5d0de5dba5686c023bed9bf5e8349","date":"2026-08-06","subject":"deployer : l'ordre des couches, et l'autorite qui se signe elle-meme"},
|
|||
|
|
{"hash":"41413c7f04a1bdfe03804a848ba5cd67f6358aa6","date":"2026-08-07","subject":"deploiement : deux attentes de premier demarrage, et trois defauts leves"},
|
|||
|
|
{"hash":"7cb358dab6961deaf494b8af295edaf733b886e9","date":"2026-08-07","subject":"instancier : emet `setops_supernet`, derive du seed"},
|
|||
|
|
{"hash":"249fba702a573445d97cfd83831e3dda64930f67","date":"2026-08-07","subject":"sso : l'issuer et le nom d'hote se derivent de l'exposition declaree"},
|
|||
|
|
{"hash":"8260f2f9149ed599914f57382e0ea3b3eb0b1a8e","date":"2026-08-07","subject":"annuaire : l'hote se derive du plan, il ne s'ecrit plus"},
|
|||
|
|
{"hash":"84afa6a2aff11c8b3c226f336dc37f3ca0d53967","date":"2026-08-07","subject":"docs : l'autorisation devient une doctrine (D-65, D-66)"},
|
|||
|
|
{"hash":"be20ab43a979908a17a6a22e2a3b79e735503564","date":"2026-08-07","subject":"docs : Set-OPS amorce les acces, le sysadmin gouverne (D-65 a D-67)"},
|
|||
|
|
{"hash":"ba70b801977f8ce9f3990dd4d1816d9b0137392c","date":"2026-08-07","subject":"amorcage_acces : le role qui cree UN acces puis se retire"},
|
|||
|
|
{"hash":"69536a2b1a617e5e641ee2e5979a64cbad4f77a0","date":"2026-08-07","subject":"openldap : charge ppolicy — le jeton d'amorcage devient a usage unique"},
|
|||
|
|
{"hash":"6f2acafdb64dceb5cf2dd32409dfc5ed6d3389d9","date":"2026-08-07","subject":"acces : les cinq meta/acces.yml, et le mecanisme qui manque a chacun"},
|
|||
|
|
{"hash":"74a2456f091d9952ed8527cbeca459f6606f8b1d","date":"2026-08-07","subject":"keycloak : group-ldap-mapper — le role s'attache au GROUPE"},
|
|||
|
|
{"hash":"a08c61bb4e0d4f8fdc09b2cd0c1b5e38bcdd9310","date":"2026-08-07","subject":"acces : Forgejo et Nextcloud cables, et le claim `groups` emis"},
|
|||
|
|
{"hash":"6699935dc72222bf250dfe205ce77dbcc1dc039a","date":"2026-08-07","subject":"resoudre_idp : le nom invente etait dans QUATRE roles"},
|
|||
|
|
{"hash":"cc6026641f637f8ae962ecd9901f23f6222300c4","date":"2026-08-07","subject":"empreintes muettes, courses de premier demarrage, collision de noms"},
|
|||
|
|
{"hash":"c79aae200d29331aae7c0c4fee88c126e9d35c6e","date":"2026-08-07","subject":"flux : `admin` devient un pair, et `make ca-racine` livre la racine"},
|
|||
|
|
{"hash":"c21ed62237b65c51627100af5c1b73bb12e359b1","date":"2026-08-07","subject":"runbook : nommer les deux consoles Keycloak"},
|
|||
|
|
{"hash":"71ed179b0c6b19d050044ca48394f4639eedc8d1","date":"2026-08-07","subject":"keycloak : federation LDAP en WRITABLE, et reconciliee"},
|
|||
|
|
{"hash":"1b16e67cdcabe10a1b83cc8f957df078a7efa4a4","date":"2026-08-07","subject":"keycloak : realm-admin par appartenance, et la boucle de mot de passe"},
|
|||
|
|
{"hash":"df8ffb68d63f52a946f589f299115f1ca9dc3473","date":"2026-08-07","subject":"icingaweb2 : habilitation par groupe d'annuaire, plus par liste d'uid"},
|
|||
|
|
{"hash":"91d3a736e7e33178cc051361a954538e90f0530e","date":"2026-08-07","subject":"rotation : les comptes de secours peuvent enfin changer de mot de passe"},
|
|||
|
|
{"hash":"b51933566bcf13844b7d43fb3a5ddfe377514ee1","date":"2026-08-07","subject":"rotation : vault_keycloak_admin, et la contrainte d'ordre"},
|
|||
|
|
{"hash":"35602546eb494ba237392eb4eeaa988587f8e626","date":"2026-08-07","subject":"rotation : vault_forgejo_oidc, et la reconciliation des secrets OIDC"},
|
|||
|
|
{"hash":"4642ffec0ab64ae42598a137ed93941c65b0ef94","date":"2026-08-08","subject":"rotation : vault_openldap_admin, quatre consommateurs et deux pieges"},
|
|||
|
|
{"hash":"775df924cbd2988a54933be055f964825f8a77b0","date":"2026-08-08","subject":"identite : « mot de passe oublie » — raccord SMTP derive du plan"},
|
|||
|
|
{"hash":"419ecaba631ec0d675e3840a856a79e8319befda","date":"2026-08-08","subject":"identite : une declaration de politique de mot de passe, deux executants"},
|
|||
|
|
{"hash":"5aa5f2e47933396d95e866d417c1556d72788a6e","date":"2026-08-08","subject":"devis d'identite : comparer le deploye au declare"},
|
|||
|
|
{"hash":"5fde136e9f80629c283f7f9cb523ba151069cb96","date":"2026-08-08","subject":"devis des certificats : disque contre memoire, et l'AC etait expiree"},
|
|||
|
|
{"hash":"0cc04177fb15c583c66351f6ba22b427c4b5d586","date":"2026-08-08","subject":"devis des expositions : une vraie requete, depuis deux points de vue"},
|
|||
|
|
{"hash":"4bfcf4944fb1310c862e11782269cda21ea910b0","date":"2026-08-08","subject":"devis PostgreSQL et courriel : la serie des devis de service est complete"},
|
|||
|
|
{"hash":"a90dff7ba74e8bc6bd4e21eaea9956a54d8d39d5","date":"2026-08-08","subject":"courriel : routage local par identifiant, et la livraison interne remise en marche"},
|
|||
|
|
{"hash":"dd84ed011cba1a7f0a403e084b281a6593072607","date":"2026-08-08","subject":"keycloak : journaliser les evenements du realm"},
|
|||
|
|
{"hash":"eef44c2dce3a40e4a9851c93d588e98d32d502c9","date":"2026-08-08","subject":"nginx : dimensionner les tampons d'en-tetes pour les sessions OIDC"},
|
|||
|
|
{"hash":"44ee6d4d36e730ad65cb19208f7f5b1c52bb24a0","date":"2026-08-08","subject":"keycloak : URI de retour apres deconnexion, derivees de web_origins"},
|
|||
|
|
{"hash":"c9d84e48d90b860687207b719385a48fb85c2d7d","date":"2026-08-08","subject":"doctrine : D-68 et D-69 — relire ce qu'on ecrit, pas « toujours l'API »"},
|
|||
|
|
{"hash":"c5fd3aa70bbea813d15d5d229fef5c5ac8d93414","date":"2026-08-08","subject":"docs : tisser les devis dans les points d'entree, et corriger trois faits perimes"},
|
|||
|
|
{"hash":"5308574730c8b853dfb818270d1964f9defe6a0f","date":"2026-08-08","subject":"D-70 / P31 : l'exigence de documentation devient une preuve"},
|
|||
|
|
{"hash":"107518d2691c473bc5c111bb2c5d88b8685efb22","date":"2026-08-08","subject":"audit : rejuger les 11 affirmations fausses — onze sur onze resolues"},
|
|||
|
|
{"hash":"7dcbc6a0a4b54176151a6a4fc755d9ce37de29a7","date":"2026-08-08","subject":"audit : figer l'etat de reference avant la reconstruction from-zero"},
|
|||
|
|
{"hash":"a430edf014a00b6f85cf32e0e905c2ffc6aafd29","date":"2026-08-08","subject":"make raser : la seule commande destructive du moteur, avec ses quatre verrous"},
|
|||
|
|
{"hash":"872d590031ef1f966b5cfc8adc36afd57f974856","date":"2026-08-08","subject":"P31 : le motif laissait passer toute cible contenant une majuscule"},
|
|||
|
|
{"hash":"1295eeaf4e57669297186063dd7411a01d6f139d","date":"2026-08-08","subject":"D-71 : PKI et DNS debout avant tout, et la zone inverse manquait"},
|
|||
|
|
{"hash":"a1accdd49efcec5c2ccbf52f20ebbb74974d4e63","date":"2026-08-08","subject":"amorcage du socle eprouve : AC auto-signee, zones directe et inverse qui repondent"},
|
|||
|
|
{"hash":"3bf99fa7bee3998e4b88abe0ba48ad0aa5cbef2a","date":"2026-08-08","subject":"keycloak : les roles de realm sont un prerequis de la projection des groupes"},
|
|||
|
|
{"hash":"8b0eaaec0a61ff7bfe434e6156712d7404dd9dd3","date":"2026-08-08","subject":"keycloak : le claim de groupes exige les clients — troisieme defaut d'ordre"},
|
|||
|
|
{"hash":"059953e621171f7b6b1d9ff38a84c497972daf96","date":"2026-08-08","subject":"keycloak : rendre patiente l'ecriture qui suit la synchronisation LDAP"},
|
|||
|
|
{"hash":"043ca6480f57111a5d1fb059b12db8658ca130c8","date":"2026-08-08","subject":"grafana : rendre patiente la pose du mot de passe de secours"},
|
|||
|
|
{"hash":"57e3bd3d017996cb337e8f5e47b441d0f9144c88","date":"2026-08-09","subject":"client_journal : imposer et DECLARER le port d'Alloy — collision avec le SASL de Dovecot"},
|
|||
|
|
{"hash":"cbb186d2fa7d070c56cef8cb205d46582fa58a45","date":"2026-08-09","subject":"reconstruction from-zero PROUVEE : cinq devis sur cinq, identiques a la reference"},
|
|||
|
|
{"hash":"d52f2563664067dd6dca7e64d5900f492455eaa9","date":"2026-08-09","subject":"P32 / D-72 : tout intrant exige par un role est fourni par l'instance"},
|
|||
|
|
{"hash":"28e0c4569644f45e106136c634214f9a6a89d3b4","date":"2026-08-09","subject":"P33 / D-73 : aucune collision de port entre roles co-localises"},
|
|||
|
|
{"hash":"70a0698ba71fb9195c015e8e99ed1c2bcc3738b3","date":"2026-08-09","subject":"gabarit : deriver le domaine de recherche, et vider resolv.conf a la capture"},
|
|||
|
|
{"hash":"711676ca69f10ab5d39fdc50f8eef52dc7404de4","date":"2026-08-09","subject":"test : epingler SETOPS_DOMAINE dans le contrat de parametres-proxmox"},
|
|||
|
|
{"hash":"ff3ca3bf2607b9568345fbdc57d9096d51620d9a","date":"2026-08-09","subject":"modeles_vm : trois commandes qui ne pouvaient rien faire"},
|
|||
|
|
{"hash":"3618dfc1291c208e35e7c26ec59e7a357d2c8268","date":"2026-08-09","subject":"gabarit recapture : copie de travail preparee, nettoyee, convertie"},
|
|||
|
|
{"hash":"9cdfcc5deb5353d92b5c4410ee6fd6f667a9774b","date":"2026-08-09","subject":"bascule du plan sur le gabarit recapture, prouvee par une VM reelle"},
|
|||
|
|
{"hash":"0de5294a20958d9286cbf090d02bb1e57f132732","date":"2026-08-09","subject":"client_unbound : survivre a la perte de connexion sans la masquer"},
|
|||
|
|
{"hash":"b08130dfdde5f824b8f6fff5a0f2a0b35428c10f","date":"2026-08-09","subject":"gabarit : ancien supprime, le nouveau porte son nom"},
|
|||
|
|
{"hash":"ed6087d5de6a9f838e1eb88e7387b2d08284bd66","date":"2026-08-09","subject":"ansible : pipelining + ControlPersist — la course « banner exchange » comprise"},
|
|||
|
|
{"hash":"9feaf212c7cc31b9baf3c912d63e3e2846813997","date":"2026-08-09","subject":"reconstruction complete sans echec, et correction : ssh_hardening declarait deja"},
|
|||
|
|
{"hash":"2ec9cec76ac020e2618f096d17dbcdb8f91b9912","date":"2026-08-09","subject":"forgejo : ne pas retelecharger un binaire deja pose"},
|
|||
|
|
{"hash":"26dc0469be08f70acc25f6d6caff25323066820b","date":"2026-08-09","subject":"get_url : garder les artefacts epingles a une version"},
|
|||
|
|
{"hash":"a0dc3da4a6a06adc3d0c65e520a5fcbaef9b132d","date":"2026-08-09","subject":"get_url : plus aucun sans garde — la dependance externe tombe a zero"},
|
|||
|
|
{"hash":"fba0df26c3ad0e8063ddc2a3a8e5d27d19e23660","date":"2026-08-09","subject":"metriques : node_exporter mourait a chaque renouvellement de certificat"},
|
|||
|
|
{"hash":"ffb515cf3caee5506cbc065adb3fec09cc66c9d8","date":"2026-08-09","subject":"idempotence : Prometheus trie ses cibles, Forgejo conserve son secret JWT"},
|
|||
|
|
{"hash":"c7fe2505205b2c20f004fddb61ad48b676c0bb2e","date":"2026-08-09","subject":"idempotence de la flotte : zero changed, et le zero est verifie"},
|
|||
|
|
{"hash":"85fed974a4b2b5de66ffecde6793d1bcfdf7919f","date":"2026-08-09","subject":"wiki : rattraper la reconstruction, et une unite sur la verification du deploye"},
|
|||
|
|
{"hash":"91d9bd19f4c77e9e1c5f3fef77a2560d95365728","date":"2026-08-09","subject":"recette : regenerer le plan apres l'ajout de l'unite de wiki (P22)"},
|
|||
|
|
{"hash":"78f2f7fd6fc41d10759f28e49721ea6ef6414310","date":"2026-08-09","subject":"SDN : un puits sur le supernet du tenant dans son propre VRF"},
|
|||
|
|
{"hash":"df05d90059f6fecd6185fa8319cbd18a5d75900c","date":"2026-08-09","subject":"frontiere : ne router que les sous-reseaux REELLEMENT attribues"},
|
|||
|
|
{"hash":"3ef470be76d3c6d1470de3670ffef5c63ec81654","date":"2026-08-09","subject":"frontiere : ne declarer que ce qui existe, et reconcilier les routes"},
|
|||
|
|
{"hash":"67565aade6d61521df3235f2323a74778d6d7d2e","date":"2026-08-09","subject":"frontiere : « vers Internet » n'est plus « vers n'importe ou »"},
|
|||
|
|
{"hash":"a546b03c3a34ce630f474f494876c117fa2b8d44","date":"2026-08-09","subject":"devis : sixieme instrument — « ce qui n'est pas declare est-il refuse ? »"},
|
|||
|
|
{"hash":"91355bcdef419ab4899c8367a98f24e7f70476be","date":"2026-08-09","subject":"frontiere : etanche — CONFORME sur 56 lignes, dans les deux sens"},
|
|||
|
|
{"hash":"4624f86becde39f8dd9f6fded9fda2e2a2892dad","date":"2026-08-09","subject":"wiki : « Reprendre l'ecosysteme » — la porte qui manquait"},
|
|||
|
|
{"hash":"b95a82251b4f0101b2f2f27291ab5fad97146196","date":"2026-08-09","subject":"doc : pas de page « ce qui va te mentir » — les pieges ont trouve leur domicile"},
|
|||
|
|
{"hash":"01ecea901b1dc699e460f53c15b894c839739b33","date":"2026-08-10","subject":"doc : l'aiguillage — quatre situations, quatre portes"},
|
|||
|
|
{"hash":"ac85278366a017be405fd3e9b116b09661f85625","date":"2026-08-10","subject":"preuve : P34 — chaque document declare son lecteur (D-74)"},
|
|||
|
|
{"hash":"3b16b8845d03f12e64fc326d704a690384d9cef8","date":"2026-08-10","subject":"portabilite : monter un SECOND tenant revele trois defauts invisibles"},
|
|||
|
|
{"hash":"9c1c790f9de7e373fb2f9e11525ea57a2856cf05","date":"2026-08-10","subject":"portabilite : le repli nftables survivait a la bascule et annulait tout"},
|
|||
|
|
{"hash":"777bea8408643b203ed86fb1f76e9e992266ee68","date":"2026-08-10","subject":"portabilite : Technolibre debout, six devis, et P35"},
|
|||
|
|
{"hash":"6173d5bfe938ac16c7b64f66d9de780536e120de","date":"2026-08-10","subject":"mtu : le 1450 de la zone n'atteignait pas les invites"},
|
|||
|
|
{"hash":"19871894edb8e91e1161e3d25b375a5776d72c06","date":"2026-08-10","subject":"keycloak : un jeton frais la ou on s'en sert ; grafana : un echec lisible"},
|
|||
|
|
{"hash":"d0b0e80b55bc11fd47fa040cb246f025c9f80fe2","date":"2026-08-10","subject":"perf : forks=20 et creation des VM en parallele"},
|
|||
|
|
{"hash":"840b21bfb6ecec1973fde1952e91346722e6a550","date":"2026-08-10","subject":"artefacts : le controleur telecharge et pousse, la cible ne tire plus"},
|
|||
|
|
{"hash":"776f087f707c51e3027d0acd9c15a75ff1104b37","date":"2026-08-10","subject":"clonage : attendre la fin reelle de la tache, pas seulement l'avoir demandee"},
|
|||
|
|
{"hash":"a1908f2c6379c9a3a46a1318d21e012f91c4fd17","date":"2026-08-10","subject":"raser : lire le RESULTAT de la destruction, pas son accuse de reception"},
|
|||
|
|
{"hash":"a86a82b7ae28d0ef6ba2855a0a65f3906c51f1e4","date":"2026-08-10","subject":"devis : make versions-mesurer — l'ecart avec l'amont devient lisible"},
|
|||
|
|
{"hash":"0f1bd7605a819b8f18392b6a2c9188a4d43936ea","date":"2026-08-10","subject":"nextcloud : epingle 34.0.2 (correctif amont)"},
|
|||
|
|
{"hash":"3d62a044f735937aed0506297d88fa0e368040f7","date":"2026-08-10","subject":"keycloak : epingle 26.7.1 (sept versions mineures d'ecart)"},
|
|||
|
|
{"hash":"dea7769ff3b45bfdaa1d568fd9de000c2244bee5","date":"2026-08-10","subject":"keycloak : verifier la signature PGP contre une empreinte epinglee"},
|
|||
|
|
{"hash":"9e4101723bb30547fcb97813e5eab264511cc3e7","date":"2026-08-11","subject":"preuve : P31 ignorait les scripts invoques par un role ou un playbook"},
|
|||
|
|
{"hash":"e9b9e9b7eac5d1a3f4f17b7f5a484fe0923484f5","date":"2026-08-11","subject":"forgejo : epingle 16.0.2, et le verificateur accepte la cle PRIMAIRE"},
|
|||
|
|
{"hash":"037577fcd26100163c991c45dbdf1d67e92f1486","date":"2026-08-11","subject":"preuve : les epinglages eprouves en vrai par une reconstruction ciblee"},
|
|||
|
|
{"hash":"ce4ff0cec5fa9b81eb852e5ef5bc624f91a5420a","date":"2026-08-11","subject":"keycloak : l'ancre de confiance existe — publiee hors du canal de livraison"},
|
|||
|
|
{"hash":"334fc65d606c2402a8d5bfa23d4b01c28e0230f7","date":"2026-08-11","subject":"doc : l'effet du rasage sur le jeton — et la sauvegarde vide qu'il a revelee"},
|
|||
|
|
{"hash":"8eedeaf31f93caa0f405ec8b747b225b3d6d2365","date":"2026-08-11","subject":"sauvegarde : le catalogue derive du groupe, et P36 le prouve"},
|
|||
|
|
{"hash":"f1a7e43645a472ddfc7a2c8bde63682ff01dc9d7","date":"2026-08-11","subject":"supervision : c'est le DEPOT qui dit ou en sont les sauvegardes"},
|
|||
|
|
{"hash":"4dd4d3755d6b00b39de45087f96656944a7fd311","date":"2026-08-12","subject":"icinga : le pair est verifie — mais pas avec un certificat step-ca"},
|
|||
|
|
{"hash":"81a4cd28f402fbc0bb9337d9dad452e9bfe84444","date":"2026-08-12","subject":"preuve : rapport du 2026-08-12"},
|
|||
|
|
{"hash":"f802e96b42183ed739a6ef50a7408dd67e0a660c","date":"2026-08-12","subject":"recette : la donnee REVIENT — restauration eprouvee, pas seulement sauvegarde"},
|
|||
|
|
{"hash":"77809477b2b64bdf59962dba324a83b0545fc1f0","date":"2026-08-12","subject":"gabarit : modeleChezlepro -> modeleSetOPS, et une porte pour l'hebergeur"},
|
|||
|
|
{"hash":"f67c3f726c54518020678f42af917659fdd116f0","date":"2026-08-12","subject":"D-76 : le gabarit doit se fabriquer par le depot — differee apres Technolibre"},
|
|||
|
|
{"hash":"79cd23dd86a698f1214aa11ca8c5928f8ae3d81c","date":"2026-08-12","subject":"hebergeur : l'adressage derive d'un NUMERO DE SITE, et le lien inter-sites"},
|
|||
|
|
{"hash":"0c93569dd7e1d4a344017d3da3a3b5cb594be73a","date":"2026-08-12","subject":"D-77 : l'underlay derive du meme index que son tenant, le stockage sort en 192.168"},
|
|||
|
|
{"hash":"b7239149bb795a0a9a8e8565e2fdc77e9b839c8f","date":"2026-08-12","subject":"P23 : la bande basse de D-77 devient une regle outillee"},
|
|||
|
|
{"hash":"5ace6bdb95df748db48b39fc0c6f1563a5e91b58","date":"2026-08-12","subject":"adressage : le decalage de +10 est retire, l'index se lit dans l'adresse"},
|
|||
|
|
{"hash":"8b4ad276caef12fc12e4688b3d5b948d2c0c39e7","date":"2026-08-12","subject":"adressage : l'index est borne [0-255] — 10.300.0.0/16 n'est pas un reseau"},
|
|||
|
|
{"hash":"2c7849f6b3d4e366c71b0ddff7a2e54c279ff5b4","date":"2026-08-12","subject":"P03 : la preuve du diff-vide peut enfin echouer — et elle echoue"},
|
|||
|
|
{"hash":"65fbb0aef4c96581e2d217b95a70dd75b9c97b84","date":"2026-08-12","subject":"runbook : la frontiere porte deux adresses de gestion (transition D-77)"},
|
|||
|
|
{"hash":"db083df3f6c757d8e4e51a8cbc9a04ac89db916b","date":"2026-08-12","subject":"preuve : rapport du 2026-08-12 apres renumerotage (P03 verte, honnetement)"},
|
|||
|
|
{"hash":"a694cb1487b5f305fd1f02cddfcb68ff72243888","date":"2026-08-12","subject":"frontiere : un tenant perime injectait ses vieilles adresses dans le pare-feu partage"},
|
|||
|
|
{"hash":"93a92aae86613fdd7fe029b7c91585bb80ed13e7","date":"2026-08-12","subject":"P03 : la preuve regarde TOUTES les instances — et trouve une collision d'emblee"},
|
|||
|
|
{"hash":"f95e2113a404b4c57c0cc38c3a4173b4d1488f89","date":"2026-08-12","subject":"D-78 : destination ou chemin — et le VLAN 50 pour eviter une collision"},
|
|||
|
|
{"hash":"eadaa3a5ee2ce0808f123313047ce965d5f4da1e","date":"2026-08-12","subject":"index : Technolibre 11->23, lab 1->13 — sortir des plages occupees par le materiel"},
|
|||
|
|
{"hash":"03aa035cabd85ef5de740838a28f0acf4f2ba970","date":"2026-08-12","subject":"D-79 : l'hyperviseur filtre encore en iptables legacy — dette, pas option"},
|
|||
|
|
{"hash":"f8a84b78d54219890d0b7c7f0f3e9bd128bee0c8","date":"2026-08-13","subject":"reconstruction from-zero : sept defauts, tous invisibles sur une flotte debout"},
|
|||
|
|
{"hash":"671fa1fc60d202307f69e8ee13b169b617ddbf77","date":"2026-08-13","subject":"reconstruction d'un trait : 43 groupes, 0 echec, 37 minutes"},
|
|||
|
|
{"hash":"199783f5fde14e1144a578072fe05a680662821d","date":"2026-08-13","subject":"D-80 : un tenant est agnostique de son underlay, a trois cles pres"},
|
|||
|
|
{"hash":"3af607e8b592e1ff2d435d436b8b42949c3b0306","date":"2026-08-13","subject":"placement : un devis confronte les QUATRE objets au cluster — dont le gabarit"},
|
|||
|
|
{"hash":"e5bf7eb7b7401ace6f4ccaf0eb85cd850dd4343b","date":"2026-08-13","subject":"GUI : le « pont reseau » n'est pas un reglage de la flotte — l'intitule le dit"},
|
|||
|
|
{"hash":"eab4975ab16774667f009624449b20c354aa0425","date":"2026-08-13","subject":"doc : la machine d'epreuve jetable — une doctrine qui n'avait pas son instrument"},
|
|||
|
|
{"hash":"83e9d09f5bd7e6a4bafdb2ad2d769df1a92e956c","date":"2026-08-13","subject":"audit : rapport de preuve du jour (Technolibre aligne sur Chezlepro)"},
|
|||
|
|
{"hash":"1d875f50ec29fa36ec1c7e619b4e23c778035e3e","date":"2026-08-13","subject":"doc : implanter un tenant sur un site neuf — le runbook de l'intervention"},
|
|||
|
|
{"hash":"073c5b6b697fe54ba1de5bfa8aaacaf8c91cedaa","date":"2026-08-13","subject":"frontiere : poster en formulaire encode — independant de la version du boitier"},
|
|||
|
|
{"hash":"7339cc64b46f908a89ae3ec709943d1bd08e33be","date":"2026-08-14","subject":"frontiere : une frontiere ne police que les tenants de SON site"},
|
|||
|
|
{"hash":"29148831bf5aea9a3437d71355c10b7690c7eba4","date":"2026-08-18","subject":"CHANGELOG : les trois entrees manquantes des 13 et 14 aout"},
|
|||
|
|
{"hash":"4462c13b3da600401b434e317ee48c30bf0ad3a5","date":"2026-08-18","subject":"P03 : la preuve comparait chaque instance a l'inventaire d'UNE SEULE"},
|
|||
|
|
{"hash":"ed84494c40ae8170786b4ab7ef3bc9a0d5e80664","date":"2026-08-18","subject":"GUI : le panneau d'intrants effacait la memoire ecrite du depot"},
|
|||
|
|
{"hash":"577c78e659cd496a4b093a840109fecf94ed4164","date":"2026-08-18","subject":"correction : 94 lignes de commentaire perdues, pas 121"},
|
|||
|
|
{"hash":"3445ccb836b143a0e0b71f4f1161a322cd1ff809","date":"2026-08-18","subject":"portee : les trois devis d'un site partagent enfin la meme regle"},
|
|||
|
|
{"hash":"98ab74d04722234116e687571bfc0736d1d5e4e7","date":"2026-08-18","subject":"underlay : les tenants declares sont confrontes aux dossiers reels"},
|
|||
|
|
{"hash":"f01f06df5e088c321b15537b6fa2eef9ffbf6668","date":"2026-08-19","subject":"catalogue : la carte des services avait quatre mois de retard sur le moteur"},
|
|||
|
|
{"hash":"a68b9cd10ed0380d3a3b127251acf7d040654dcc","date":"2026-08-20","subject":"CI : le harnais ne se declenchait que par memoire"},
|
|||
|
|
{"hash":"254268d5f2b8c749492065be485742131135e1a9","date":"2026-08-20","subject":"devis de placement : mourir n'est pas un diagnostic"},
|
|||
|
|
{"hash":"61488777eed7d77db4e1eafb5e35cd3d95fab5ca","date":"2026-08-20","subject":"placement : le devis validait un pont que la flotte n'utilise pas"},
|
|||
|
|
{"hash":"1f47e9bca85bf010aada0fd05abae634bb223605","date":"2026-08-21","subject":"glossaire : le metier n'etait explique nulle part"},
|
|||
|
|
{"hash":"643604c3e3e2a780a05f0753781580202e618c1b","date":"2026-08-21","subject":"signatures : qui a le droit de parler au nom de cette lignee"},
|
|||
|
|
{"hash":"742bcbf4b0e1322bfa5e0dee14c94bcad6898c53","date":"2026-08-21","subject":"genome : les quatre depots sans lesquels un ecosysteme ne renait pas"},
|
|||
|
|
{"hash":"79461fdc38288b8ad65b1b8c1ed5f5522b0dce29","date":"2026-08-21","subject":"filiation : signer, inscrire la parente, et compter les temoins"},
|
|||
|
|
{"hash":"bd1b8978153888b573d4c4dc7c833bf51a5d9fc1","date":"2026-08-22","subject":"forgejo : apprendre SQLite, et retirer ce qui ne servait pas"},
|
|||
|
|
{"hash":"c18debc25e78d61d947a0c62704cb7eee7ee39c4","date":"2026-08-22","subject":"resolution d'instance : une seule, partagee — au lieu de neuf copies"},
|
|||
|
|
{"hash":"5bb503be4546cb93a3d1108f4766fc19192d5041","date":"2026-08-22","subject":"doc : enseigner la classe de defaut, pas seulement la corriger"},
|
|||
|
|
{"hash":"5be3fbd5e1820e0ae0a543e5736279336df30164","date":"2026-08-22","subject":"dependances : un ecosysteme minimal n'est pas un ecosysteme incomplet"},
|
|||
|
|
{"hash":"9f36f08db05f3c8ff1314596f97bc80abdbda0c8","date":"2026-08-22","subject":"underlay : la frontiere entre les deux mondes, et l'instrument qui la mesure"},
|
|||
|
|
{"hash":"caee04385b3f364b02fdcfccb3ed1e48074dcf18","date":"2026-08-22","subject":"voutes : le monde physique a la sienne, les tenants n'en portent plus les cles"},
|
|||
|
|
{"hash":"d1db332ed3489ce4897b1188f13069bd27ddbd9a","date":"2026-08-23","subject":"frontiere : lire ses reglages a la racine du depot de site"},
|
|||
|
|
{"hash":"4af1fcd0e2fa66ef65b86a214861f27d28cfb655","date":"2026-08-23","subject":"frontiere : un boitier injoignable etait lu comme un boitier vide"},
|
|||
|
|
{"hash":"15cdb7d4546f2ca279c03d9c236f7fed4cc03b4f","date":"2026-08-23","subject":"patient 0 debout — et quatre defauts que seul un ecosysteme DIFFERENT pouvait montrer"},
|
|||
|
|
{"hash":"7d71f37528fc2d13529a27192169faf5b02fd495","date":"2026-08-23","subject":"genome : les cinq depots vivent sur la forge de patient 0"},
|
|||
|
|
{"hash":"8e125b71cbcfb4ab31a225b81f16341d61b13518","date":"2026-08-23","subject":"plancher : nommer ce qui est hors de l'ecosysteme"},
|
|||
|
|
{"hash":"665b07ba8248d68e556839e84aeab1509dee6c2e","date":"2026-08-23","subject":"serveur_ops : la difference entre une archive et une matrice"},
|
|||
|
|
{"hash":"d94fca490f44fab0f748bf76c264b4612133a606","date":"2026-08-23","subject":"poste : le second symlink, celui qui separe exploiter d'engendrer"},
|
|||
|
|
{"hash":"3ec376879939af3c26ecbaf369cbb705dfb823f5","date":"2026-08-23","subject":"miroirs : les quatre depots utiles du genome suivent leur amont"},
|
|||
|
|
{"hash":"a3f496a49684f584a8c2a9b23ac31d135ba2e02b","date":"2026-08-23","subject":"resolveur : patient 0 ne pose plus ses questions a personne"},
|
|||
|
|
{"hash":"32e1f6fbcd6f04832b062525cdc8425cac96e30f","date":"2026-08-23","subject":"artefacts : la forge sert le code, il manquait qui sert les binaires"},
|
|||
|
|
{"hash":"e6c5f9f539ef96e2eed4940f447cce55cb77908f","date":"2026-08-24","subject":"instancier : refuser une machine dont la fonction n'est pas declaree"},
|
|||
|
|
{"hash":"f248bb084f642824bb4599580664ae8f2cc34758","date":"2026-08-24","subject":"filiation : nommer les trois ages d'un ecosysteme"},
|
|||
|
|
{"hash":"2b55761fba5e2bd725f031d3e5c5efcbabc06127","date":"2026-08-24","subject":"runner : separer le pouvoir de configurer de celui de materialiser"},
|
|||
|
|
{"hash":"1363ebff59e9419e454139f35aba13b64b0abcb9","date":"2026-08-24","subject":"acces : le runner peut enfin entrer, et trois silences fermes"},
|
|||
|
|
{"hash":"70e57076e8ea71ba0ce9a9c89437e3adc07679df","date":"2026-08-24","subject":"collabora : en natif, la derniere exception conteneurisee tombe"},
|
|||
|
|
{"hash":"db2d6f6bf0372019d32483630d5f7bff265462c1","date":"2026-08-24","subject":"resolveur : un par tenant, et non plus un par machine"},
|
|||
|
|
{"hash":"12d938cdb0a62a95e1c709597e700cc677eaac4d","date":"2026-08-24","subject":"artefacts : le cache existe dans chaque ecosysteme, plus seulement chez patient 0"},
|
|||
|
|
{"hash":"6547eb2fac0c0b61763d29b9ca1430aabb52db16","date":"2026-08-24","subject":"flux : le mot `voisins_site`, et l'aveu de ce qui manque pour s'en servir"},
|
|||
|
|
{"hash":"c391d1ed30ee895abcb1316d1ec455d64ccd76d7","date":"2026-08-24","subject":"frontiere : rendre les flux inter-tenants, sans encore les declarer"},
|
|||
|
|
{"hash":"fa7e6568440674edc7b0a554a3c80a300445a6fc","date":"2026-08-24","subject":"artefacts : le chainage des caches, et la regle qui appartient au SITE"},
|
|||
|
|
{"hash":"a1997774be7daa45679a2194e3737e2afbd9b9f9","date":"2026-08-24","subject":"frontiere : appliquee, et la contrainte de nommage d'OPNsense consignee"},
|
|||
|
|
{"hash":"bf8e27ef859789db37c0bdf3e89e946692101cf3","date":"2026-08-24","subject":"pare-feu est-ouest : applique, et le port `derive` enfin compris des deux cotes"},
|
|||
|
|
{"hash":"da211bd81bbf017bf16a56701b92f9eeb2c6d288","date":"2026-08-24","subject":"modeles : extraire le denominateur commun de patient 0"},
|
|||
|
|
{"hash":"9c173f52ba07e4c4ab25d495140c09739ec2ad9d","date":"2026-08-24","subject":"forge du genome : mutualisee par site, avec une confiance limitee a une url"},
|
|||
|
|
{"hash":"85ef6e107e03c59f7732eb93427e9749b92454b5","date":"2026-08-24","subject":"voute : demander le mot de passe une fois, pas quinze"},
|
|||
|
|
{"hash":"9960cfd68e20bc0990ea47270a82b9d034f351c1","date":"2026-08-24","subject":"instancier : accepter un adressage declare, pour les plans sans index"},
|
|||
|
|
{"hash":"93dde5b4f2efaf292fea76d48927f739a9189569","date":"2026-08-24","subject":"site : un SITE n'est pas un plan — ses machines vivent dans l'underlay"},
|
|||
|
|
{"hash":"6e126dd8a953a23bdc5b805121bba8c0bd5dcda0","date":"2026-08-24","subject":"site : le chemin qui materialise les machines de l'hebergeur"},
|
|||
|
|
{"hash":"bf35b4f52816f841755cf88ad538f188a05c0a6c","date":"2026-08-25","subject":"site : les machines de l'hebergeur sur leur propre reseau de fabric"},
|
|||
|
|
{"hash":"dc92f01fe4f6dd31e9f39364fa9c6197f6b977c3","date":"2026-08-25","subject":"frontiere : le devis voit le site — `fabric`, alias et regles"},
|
|||
|
|
{"hash":"6715f0d5c55527b18eff848ec2e809800731c8a4","date":"2026-08-25","subject":"clonage : quatre defauts que la premiere VM placee hors du noeud du gabarit a reveles"},
|
|||
|
|
{"hash":"0b6c036f8cba511c0257aa9e21b18061dde35b56","date":"2026-08-25","subject":"ssh : retirer les drop-ins d'une nomenclature abandonnee"},
|
|||
|
|
{"hash":"a6713ffdcdab4800083398025d9dc24bde074af0","date":"2026-08-25","subject":"doctrine : patient 0 n'est pas un tenant — corriger la raison, garder le geste"},
|
|||
|
|
{"hash":"fcde343ef0a1a57d1e61e47e6b19ffdf749eebb5","date":"2026-08-25","subject":"devis reseau : un segment non etiquete n'appartient a aucune fabric de switch"},
|
|||
|
|
{"hash":"a530d5f70ef025586a834914e896148acf31a512","date":"2026-08-25","subject":"federation : c'est le SITE qui determine l'index d'un tenant"},
|
|||
|
|
{"hash":"467b05cbc0427215302ee0b430e96e59343eac3d","date":"2026-08-25","subject":"site : un ecosysteme complet — PKI, DNS, forge, cache, runner"},
|
|||
|
|
{"hash":"add94f2cbdf1262919603e3b885f3cd9f41e8b95","date":"2026-08-25","subject":"underlay : un SITE n'a pas d'index — le vestige est retire"},
|
|||
|
|
{"hash":"43666cff6e5fb9f7c77d9ebe83090b20115caf10","date":"2026-08-25","subject":"site : un SITE a bien un plan — et huit defauts que lui seul pouvait reveler"},
|
|||
|
|
{"hash":"b60946f19f7f8b7c22e397798153dd868a9d0e90","date":"2026-08-25","subject":"forgejo : verifier l'etat du compte, ne pas faire confiance au drapeau"},
|
|||
|
|
{"hash":"ea67b75a15cc4fb108a847cd8cfbb6f6f3421f17","date":"2026-08-25","subject":"dns : le site resout chez lui, et le socle cesse de le defaire"},
|
|||
|
|
{"hash":"158c3b314ae1399ab5fa812305b936bc4793fb36","date":"2026-08-25","subject":"preuve : P43 — la frontiere voit-elle les machines du site ?"},
|
|||
|
|
{"hash":"1a7c042e5bcc145b126b74b26a1304dbdc94ec03","date":"2026-08-25","subject":"site : quatre zones d'autorite, et l'ordre inscrit dans les integrations"},
|
|||
|
|
{"hash":"ac48b7650bb9f4bd423f205febb839ce832840a7","date":"2026-08-25","subject":"proxmox : le pare-feu ne s'arme que dans le SDN — et 45e preuve"},
|
|||
|
|
{"hash":"a74e35bf2145b385bbede1a8a59a30b3a16b874b","date":"2026-08-25","subject":"site : le plancher survit au redemarrage, et la zone dit les vraies adresses"},
|
|||
|
|
{"hash":"e5841ea684bc4d5ed9dbdf68c90dff02a66211a1","date":"2026-08-25","subject":"dns : quatre zones inverses pour le site, et rien de plus"},
|
|||
|
|
{"hash":"6a5a49f924ef5d4035032e6d3b1dee6cf6a6fc9f","date":"2026-08-26","subject":"site : le runner travaille, et le genome remonte chez lui"},
|
|||
|
|
{"hash":"87716cefc79e4fd99721df2b44112772e46125ec","date":"2026-08-26","subject":"genome : la forge du SITE fait autorite (D-81), et `make genome-etat` le verifie"},
|
|||
|
|
{"hash":"9e8679215d757c0c56597ee0ccab54151f32d7e4","date":"2026-08-26","subject":"carte : P48 — l'index du mainteneur ne peut plus mentir"},
|
|||
|
|
{"hash":"8890c997afaa234013b8239dde63178da5d8022c","date":"2026-08-26","subject":"runner : `serveur_ops_tenant` — le runner d'un tenant recoit enfin sa voute"},
|
|||
|
|
{"hash":"8195d6b8144d8e25c0a647b795a71e580fd3ea7c","date":"2026-08-26","subject":"poste : l'outillage sur le chemin de celui qui l'exploite"},
|
|||
|
|
{"hash":"561c034eb447f6d86aab6a33f8f2e7c65cf214e3","date":"2026-08-26","subject":"flux : P49 — le registre des flux avait derive sans bruit"},
|
|||
|
|
{"hash":"14fa129731f8d8698e6c2372bfe325c69e1d7c17","date":"2026-08-27","subject":"audit : rapport de preuve du jour (49 OK, apres correction du retour du site)"},
|
|||
|
|
{"hash":"3b65384b0f4ea0ab82423801cdbeba10b76f9598","date":"2026-08-27","subject":"frontiere : le devis sait desormais refuser SANS consigner"},
|
|||
|
|
{"hash":"3fa6e4c3e15357555da1bbac1c1cc2c169d34356","date":"2026-08-27","subject":"collections : epingler les versions — le runner echouait la ou le poste reussissait"},
|
|||
|
|
{"hash":"5d0f82792acf9286dcbdd151c74dc0d26f93ea5c","date":"2026-08-27","subject":"portabilite : declarer ce dont le moteur depend — quatre defauts reveles par le runner"},
|
|||
|
|
{"hash":"6fe62f74e197d1ae13dadfa0b7f816b86d689933","date":"2026-08-27","subject":"creer-vm : prouver la materialisation sans entrer chez le tenant"},
|
|||
|
|
{"hash":"35853ff5fb73541f052974490339945af0eb1d59","date":"2026-08-28","subject":"journal : les cinq commits du 27 n'avaient pas d'entree"},
|
|||
|
|
{"hash":"c6f2cb1dd94c54439552729fef0183b439045b17","date":"2026-08-28","subject":"filiation : nommer l'insemination, et rendre a l'humain l'acte d'emancipation"},
|
|||
|
|
{"hash":"d3ba5205004469f775848e2703e7a88a9f7c86df","date":"2026-08-28","subject":"insemination : declarer le lien, l'emettre d'un seul cote, et un test rouge"},
|
|||
|
|
{"hash":"ef832d11d6a44f33fa6e21ead6d3f06c974f847d","date":"2026-08-28","subject":"insemination : la cle d'amorcage, bornee au meme groupe que le flux"},
|
|||
|
|
{"hash":"377462b1416331f31dbdc1684953acbc8a006121","date":"2026-08-28","subject":"voutes : une voute, une cle — separer avant de distribuer"},
|
|||
|
|
{"hash":"45aaf2808dfdd27ae42201c45e4c2a54260956a4","date":"2026-08-28","subject":"runner : armer un runner est un acte declare, jamais un defaut"},
|
|||
|
|
{"hash":"5e4d711b974c1c4ce6ddbbd68a405af6c42d57e3","date":"2026-08-28","subject":"socle : la source d'artefacts d'amorcage — nourrir la premiere machine"},
|
|||
|
|
{"hash":"ceb832eeac0fcedde4a17d166517eaec3ad3df74","date":"2026-08-28","subject":"journal : l amorcage des artefacts, et deux diagnostics faux corriges par la mesure"},
|
|||
|
|
{"hash":"aca63011ea7db23a86705ca906752dad9ebc9fab","date":"2026-08-28","subject":"roues : pip par le meme chemin que les collections — le controleur telecharge, la cible n installe rien du dehors"},
|
|||
|
|
{"hash":"58ce3dfea4243d198718a024e099e3b6c67ab8be","date":"2026-08-28","subject":"forge du site : le marqueur manquant — le genome n etait ouvert a personne"},
|
|||
|
|
{"hash":"89c911ef05bd6f91b48e6641b2936eefeb675bbd","date":"2026-08-28","subject":"journal : l insemination aboutit — un runner de tenant, ne d un runner de site"},
|
|||
|
|
{"hash":"4beb7e07242f078d9f8d75840d206d81d899edaa","date":"2026-08-28","subject":"flux : l interne refuse a voix haute, la bordure se tait (P53)"},
|
|||
|
|
{"hash":"c918a50257688b9a51f6cff0f26022522a5846da","date":"2026-08-28","subject":"journal : le REJECT est instantane — quatre RST en quatre secondes"},
|
|||
|
|
{"hash":"0595bf03c1be250dbec023de398da40b5bbfc8be","date":"2026-08-28","subject":"sonder : rapporter ce qui distingue, au lieu d un echec"},
|
|||
|
|
{"hash":"90ea4747454709e9e805dc98c41a47d7767623e7","date":"2026-08-28","subject":"inseminer : le geste sort de mes mains et entre dans le depot"},
|
|||
|
|
{"hash":"732aff9c70ff4fc07d5759904b81c138e22e1537","date":"2026-08-28","subject":"sdn : le puits avalait le plan d administration — une route, et le chemin existe"},
|
|||
|
|
{"hash":"5c59f19530f6ee02295fa6632eb0eef0de0cb523","date":"2026-08-28","subject":"voutes : une cle absente n est pas une faute — elle est souvent la bonne reponse"},
|
|||
|
|
{"hash":"f2f6cccd3e9e5d7e5bba5fc6504b981185040cd5","date":"2026-08-30","subject":"clonage : l hyperviseur juge le demarrage, plus le chronometre du module"},
|
|||
|
|
{"hash":"bb63865a3799aa9242d73ae12b8e014becd0fa72","date":"2026-08-30","subject":"cles : le terrain etait inoccupable — la cle du tenant nait avec ses machines"},
|
|||
|
|
{"hash":"6f4833e65c76d601258442c90fec38fc4a82aa45","date":"2026-08-30","subject":"nftables : armer le pare-feu coupait la main qui l arme"},
|
|||
|
|
{"hash":"fc76a4e2527ef8a1d98e30b496e53bb419f3cf23","date":"2026-08-30","subject":"step-ca : la cle de signature versionnee — plus aucun appel sortant pour l obtenir"},
|
|||
|
|
{"hash":"a5c9a88f0019dfd52b7f458d9ebd7f81d9360028","date":"2026-08-30","subject":"resolveur du site : le troisieme service prete pendant la jeunesse d un tenant"},
|
|||
|
|
{"hash":"fde0903ed89f89992e03b61310b6c79638892950","date":"2026-08-30","subject":"flux + postfix : un port symbolique dans le pare-feu, un rechargement qui n applique rien"},
|
|||
|
|
{"hash":"e2bc2351325907b5e111d8e3b0a67d51c2c9edb8","date":"2026-08-31","subject":"audit + timers : deux services en echec sur les quinze machines, muets depuis toujours"},
|
|||
|
|
{"hash":"0dd57ba995ac0ea1798423d2c4b4c7f1c990f5d8","date":"2026-08-31","subject":"artefacts : deux filets — un cache mort ne doit plus rendre un tenant irreparable"},
|
|||
|
|
{"hash":"35f38812182a81d0a499a1d6728cbf00b4afe79d","date":"2026-08-31","subject":"recette : un depot occupe n est pas une sauvegarde cassee"},
|
|||
|
|
{"hash":"89ca92b132ed3e350a28674f936626064fa5b9a6","date":"2026-08-31","subject":"D-82 : patient 0 n est le parent de personne — le dilemme est tranche"},
|
|||
|
|
{"hash":"0b653170fafe564d08dbe9fceb17aafda916caaf","date":"2026-09-01","subject":"emancipation : l instrument de la quatrieme ligne — couper, pas sonder"},
|
|||
|
|
{"hash":"2f2323bd3e8abb2fd6cecbfc39f3f82bc9e7a17d","date":"2026-09-01","subject":"gabarit : minimal — il etait un cache du socle, et il perimait sans le dire"},
|
|||
|
|
{"hash":"9aef3614abe48d6126c634049dc3ac2bd7bc2153","date":"2026-09-01","subject":"gabarit : refabrique, minimal, et puise aux ressources du SITE"},
|
|||
|
|
{"hash":"4abf875e5fb1df6be9fce109b62883bb7147947a","date":"2026-09-01","subject":"gabarit : q35 n est pas un reglage, c est la raison de la procedure manuelle"},
|
|||
|
|
{"hash":"3ea0c95492e62076c76d568ac66b9656585a59af","date":"2026-09-01","subject":"sauvegarde : l etat d un locataire quitte enfin sa propre flotte"},
|
|||
|
|
{"hash":"0854b2a93cd504916f673a84e9310ac06a14a145","date":"2026-09-02","subject":"reconstruction : quatre defauts que seule une flotte rasee pouvait montrer"},
|
|||
|
|
{"hash":"53c5f41a1a3fed9da0c724d448a191c546f2e444","date":"2026-09-02","subject":"durcissement : le site recoit enfin serveur_durci"},
|
|||
|
|
{"hash":"cf9abe74b60cd38240c4eac33d75689516b9abd7","date":"2026-09-02","subject":"sauvegarde : le site protege enfin son propre etat"},
|
|||
|
|
{"hash":"4e12c3a8029b3cb191e29266d9f18a0852df7f45","date":"2026-09-02","subject":"supervision du site, et la panne qui dormait dans un mot"},
|
|||
|
|
{"hash":"cccb4e5b43f8a66af44a00d687d0414c93442383","date":"2026-09-02","subject":"supervision : declarer a qui elle parle"},
|
|||
|
|
{"hash":"6653f49f2e980e996ac487ff10c25390b726ec43","date":"2026-09-02","subject":"sauvegarde : la verification suit la cle, pas le depot"},
|
|||
|
|
{"hash":"872b5e91aa0b2f0e0b3bd3bd815fff43ea08c08a","date":"2026-09-02","subject":"forgejo : laisser le premier demarrage finir avant de l interrompre"},
|
|||
|
|
{"hash":"42becd0c02d64eea4bf3e87b77cfd32d33875ce4","date":"2026-09-05","subject":"paquets tiers : passer par le cache du controleur, plus par Internet"},
|
|||
|
|
{"hash":"bebdb8421291169f5ac44d418ed083753e09e8c0","date":"2026-09-05","subject":"cles : sortir du poste ce qui n existe qu au poste"},
|
|||
|
|
{"hash":"3eff217bd50d438f1ee3421a8b5116d26485d868","date":"2026-09-05","subject":"cles : un chmod refuse ne doit pas annuler une verification reussie"},
|
|||
|
|
{"hash":"dcbb57db69981b55b07c2babf31dbd5ad443bae7","date":"2026-09-05","subject":"cles : la cle USB se suffit a elle-meme, et la restauration est prouvee"},
|
|||
|
|
{"hash":"9a823a5ea219dc9c5534e20fadeed39770db5a69","date":"2026-09-05","subject":"depot hors site : sortir du site ce que le site garde pour tout le monde"},
|
|||
|
|
{"hash":"00cee67f023bcad75747f4aa62e42a9c916c3cf0","date":"2026-09-05","subject":"depot hors site : trois pieges payes en une manoeuvre"},
|
|||
|
|
{"hash":"5bc3bceac18876ec6e7bccc8cbf9b11c9ebe3cd6","date":"2026-09-06","subject":"documentation : la tournee des 74 documents, parce qu un balayage ne lit pas"},
|
|||
|
|
{"hash":"36b6926e216a8618f01e87c470d1a51382ea0cc6","date":"2026-09-07","subject":"patient 0 : il n existe plus, et le depot le disait encore au present"},
|
|||
|
|
{"hash":"c9d31e9a60462512f3df709b3e8026764a15be2a","date":"2026-09-08","subject":"preuves : trois gardes pour ce que ma lecture ne tiendra pas"},
|
|||
|
|
{"hash":"e2935edd3d57296c25343f96dda541a6f34bb829","date":"2026-09-08","subject":"wiki : publie, et le temoin le prouve — P60 passe au vert"},
|
|||
|
|
{"hash":"cbdc6c523d59d92bbce28dd81c38fa3ef267b8f9","date":"2026-09-08","subject":"wiki-publier : un wiki vide se clone tres bien, et le garde-fou ne le voyait pas"},
|
|||
|
|
{"hash":"6da1032cebce36c3612e4b87f5cc6ef1e7a4baae","date":"2026-09-08","subject":"positionnement : le gel tient, c est la carte des seuils qui etait fausse"},
|
|||
|
|
{"hash":"6077b179afd92fe3cabc2a4a51677e5b255e9ed9","date":"2026-09-08","subject":"plan : l ecriture des registres devient atomique — tout, ou rien"},
|
|||
|
|
{"hash":"0eaceb1048e12c58a600ccae3b0e246f17165f50","date":"2026-09-08","subject":"schema du plan : la forme des registres devient derivee, et gardee"},
|
|||
|
|
{"hash":"03c628d5e1dfdcef9a643ed0ec04387b66b9a7f6","date":"2026-09-08","subject":"GUI : le formulaire des bases est GENERE depuis le schema"},
|
|||
|
|
{"hash":"34b7ec3886e05b3e0151097b2d27b50ab58fdabe","date":"2026-09-08","subject":"schema : le marqueur du champ requis, et l entree de CHANGELOG qui manquait"},
|
|||
|
|
{"hash":"88033f37b81da11b2a8fbe401e0996e392482990","date":"2026-09-08","subject":"GUI : la vue Nomenclature, et deux fautes que mes bancs ne voyaient pas"},
|
|||
|
|
{"hash":"00a8dc52836f93d39cbae38840626fcdae95a2ee","date":"2026-09-08","subject":"wiki : publie, avec la vue Nomenclature"},
|
|||
|
|
{"hash":"935a64a1bf361f455c6fee80d7631a4af6990a80","date":"2026-09-08","subject":"plan : sauvegarder n emportait plus quarante lignes de commentaire"},
|
|||
|
|
{"hash":"c0ea0c8e710d3eb21460cb7421ce6dc16dd7ed01","date":"2026-09-08","subject":"wiki : publie (formulaires generes, ecritures preservantes)"},
|
|||
|
|
{"hash":"2887b57f0c58702fd896afc69b293f1810fcb262","date":"2026-09-08","subject":"GUI : les six registres ont un formulaire genere, et la sauvegarde aussi"},
|
|||
|
|
{"hash":"765d97b5c931908b2457c1f62fc330e58df6154b","date":"2026-09-08","subject":"wiki : publie (les six registres generes)"},
|
|||
|
|
{"hash":"53d7b4c4c2fced9459042264d083d7eee724c37c","date":"2026-09-09","subject":"durcissement : cloud-init nait avec la VM et ne lui survit pas"},
|
|||
|
|
{"hash":"a6457a161b09be7ba03be1ff5cb46fa67ad3c261","date":"2026-09-09","subject":"wiki : publie (cloud-init retire au durcissement)"},
|
|||
|
|
{"hash":"f89b097b2659bf94537bd8f6410f8b0d803a2869","date":"2026-09-09","subject":"D-85 : ce que le retrait de cloud-init NE ferme pas"},
|
|||
|
|
{"hash":"0b0d9ca708aabfaa61ee5872db9ee6abfc02e74a","date":"2026-09-09","subject":"wiki : publie (ce que le retrait de cloud-init ne ferme pas)"},
|
|||
|
|
{"hash":"2d9dc866a9d3a75973d7cbca45ea65d879823e05","date":"2026-09-09","subject":"cloud-init retire de la flotte : 14/14, 0 echec"},
|
|||
|
|
{"hash":"36aba372009dfc0e4da8479f86b2b1048a189b11","date":"2026-09-09","subject":"wiki : les deux forges servent le meme wiki (origin rattrape)"},
|
|||
|
|
{"hash":"f4bb40c4f24f8553e013da7782ad609986508637","date":"2026-09-09","subject":"metriques : le client installait un pilote IPMI qui echoue a chaque demarrage"},
|
|||
|
|
{"hash":"e9b22b0be0a7de0c8728f47b2222e3abc8dfb401","date":"2026-09-09","subject":"site : cloud-init retire des sept machines de l hebergeur"},
|
|||
|
|
{"hash":"f27ac9762e8a7ec4a8c18c3a8565fed27b60bee5","date":"2026-09-09","subject":"site : site-backup-01 a recu la PKI qui lui manquait"},
|
|||
|
|
{"hash":"6d23121dc2ddec1f51a7b81c90138bc649406668","date":"2026-09-09","subject":"supervision : systemctl --failed entre dans Icinga (role client_sante)"},
|
|||
|
|
{"hash":"018d55ec6c07b45fe98fa2e9eee7e1a444e968fa","date":"2026-09-09","subject":"supervision : le site rapporte aussi — et deux corrections pour que ca MARCHE"},
|
|||
|
|
{"hash":"69b84f4e2c1dbf91173e7f3151267b45bf21d6af","date":"2026-09-09","subject":"client_sante : retrait d une garde qui ne pouvait pas se declencher"},
|
|||
|
|
{"hash":"90228cb55ef19bb7a5080d2fdf968187e33705cd","date":"2026-09-09","subject":"supervision : la sonde se declare dans le role, comme le flux"},
|
|||
|
|
{"hash":"988d35745e1ffe448151301ecec1449a4fcdf70e","date":"2026-09-09","subject":"sondes : le contrat ETAIT celui de Nagios, sans le savoir"},
|
|||
|
|
{"hash":"a070c339eedea3913b951ea66d1fc62e9c5b49e0","date":"2026-09-09","subject":"icinga : l hote de supervision saturait par sa propre demonstration"},
|
|||
|
|
{"hash":"843d39e7aa056366da1e959dd5a0c24e3828d09f","date":"2026-09-09","subject":"frontiere : un type ICMP n est pas un port symbolique"},
|
|||
|
|
{"hash":"5b423cf954dfe5692e8258ca7f3c1287870f1f25","date":"2026-09-09","subject":"correction : le PMTUD du site n etait pas casse, il etait non protege"},
|
|||
|
|
{"hash":"a8af5410598239b3a9099351da050d9eb4f58893","date":"2026-09-09","subject":"D-86 : la supervision se deploie juste apres la PKI, pas a la fin"},
|
|||
|
|
{"hash":"1832530f298351f98cb6a60e82ce89c561da8161","date":"2026-09-10","subject":"sondes : les six premieres, et le patron qui les rend eprouvables"},
|
|||
|
|
{"hash":"6120e6f006998a2f71e7a3e8666b384d43e82297","date":"2026-09-10","subject":"sondes : quatorze, une par role, derivees en objets Icinga"},
|
|||
|
|
{"hash":"3e8e052670a3175af654f7f32c65bc8bd4e5946a","date":"2026-09-10","subject":"supervision : la regle qui decide COMBIEN de sondes"},
|
|||
|
|
{"hash":"a5d9040a114937284accf48a764c47bc12cde1fa","date":"2026-09-10","subject":"cache-apt scindee — et la scission a revele que moteur aurait alarme a tort"},
|
|||
|
|
{"hash":"6e46ace4de89ee2a68ae76c9ba620118d077787f","date":"2026-09-10","subject":"sondes : les cinq qui manquaient le plus (autorite, base, annuaire, zones, edge)"},
|
|||
|
|
{"hash":"5880b22d5ae9a719d09149328b67d10ab0bbacd7","date":"2026-09-10","subject":"D-87 : ce que l hebergeur n a pas le droit de VOIR"},
|
|||
|
|
{"hash":"f2c580235d8b05a7d4d52b60715285f4ed323846","date":"2026-09-10","subject":"observabilite : le site cesse de ne rien voir de lui-meme"},
|
|||
|
|
{"hash":"84b5ecc71d9c4741595baf65e23e79b998014a9e","date":"2026-09-10","subject":"frontiere posee, et cinq sondes qui disaient faux"},
|
|||
|
|
{"hash":"4ef3a1d5539311c1934ee94b4045e7a751777cf1","date":"2026-09-10","subject":"D-86 mis a l epreuve : Chezlepro rasee et refaite depuis zero"},
|
|||
|
|
{"hash":"2cf68c2d305f24036bef429c1ef3637a9eb09a81","date":"2026-09-10","subject":"hosts_statiques : une garde qui survit a ce qu elle gardait"},
|
|||
|
|
{"hash":"9685e0bdbeac950c989424852028c023a0dca271","date":"2026-09-10","subject":"reconstruction de confirmation : 0 echec, 34 minutes"},
|
|||
|
|
{"hash":"c6a7150c603b6092dd059ced02d889e25085be37","date":"2026-09-10","subject":"les depots tiers passent par le cache, et le tenant n a plus le sien"},
|
|||
|
|
{"hash":"1410fe41ec4ed094d952c4d68d7db337002ae3b1","date":"2026-09-10","subject":"les cles de signature passent aussi par le cache"},
|
|||
|
|
{"hash":"a60b69f0722d7df82bd05cde1f56dd7466a2df81","date":"2026-09-10","subject":"un fichier vide existe, et une sonde pour les correctifs"},
|
|||
|
|
{"hash":"009325ee512f75cf36579a48ac533bd067da3578","date":"2026-09-10","subject":"D-88 : le noeud du gabarit, point unique de la REPRODUCTION"},
|
|||
|
|
{"hash":"5abf20102d96ad2ff652a96de80bcaf02df6ffbf","date":"2026-09-10","subject":"le site surveille enfin sa fabric"},
|
|||
|
|
{"hash":"0778979b89a22f9549d6edb4814d97153fda1d10","date":"2026-09-10","subject":"une source vide n est pas « tout le monde »"},
|
|||
|
|
{"hash":"c733d2df1c0c3138ddbc3500825f17b538fbffb4","date":"2026-09-10","subject":"la frontiere journalise a nouveau, et une garde veille cette fois"},
|
|||
|
|
{"hash":"2450c9ea654ac55c388f6b53fc061de3ce4d7c3c","date":"2026-09-10","subject":"observatoire : un seul nom pour la console, des deux cotes"},
|
|||
|
|
{"hash":"f5b5899284d3d75ecd81c7a5d1d9a0c8fd639f8e","date":"2026-09-10","subject":"wiki : temoin de publication apres le renommage"},
|
|||
|
|
{"hash":"d1ae41cfdf2dda66abef8a7765d25c432847f827","date":"2026-09-10","subject":"nom public : il vient du plan, plus de la devinette du role"},
|
|||
|
|
{"hash":"53e2f781485c2f6f7739fb523311d186410e3062","date":"2026-09-10","subject":"vigie : la console de supervision porte enfin un nom de fonction"},
|
|||
|
|
{"hash":"1b89e83b0c1f0dc203c5a97ac426fbe9027b4270","date":"2026-09-11","subject":"reconstruction a froid : les noms derives naissent justes, et une cle vide tombe"},
|
|||
|
|
{"hash":"5f5af70a9c0b5a0deabf7355f4300436712da69d","date":"2026-09-11","subject":"audit : la piste sort de la machine auditee, et quelqu un regarde"},
|
|||
|
|
{"hash":"989398f3cf44ea99fb2d583df6eec7882b001c6f","date":"2026-09-11","subject":"expositions-etat : le certificat SERVI, pas celui du disque"},
|
|||
|
|
{"hash":"6786d15068c282bf7b6ad27260d2f929701f2aab","date":"2026-09-11","subject":"l heure vient de la frontiere : la derniere dependance vivante tombe"},
|
|||
|
|
{"hash":"904ece3004fb8704aadc9cdc0e0011a47e18d2c2","date":"2026-09-11","subject":"les correctifs de securite reviennent au quotidien, sans personne"},
|
|||
|
|
{"hash":"5419ee2d717647ecd3e94b4fe310c47d4b667d02","date":"2026-09-12","subject":"un site prend son propre index, et la garde les compte enfin"},
|
|||
|
|
{"hash":"0c55aafc40d5906e6c26639767a37d65763fe755","date":"2026-09-12","subject":"le site prend l index 37, et la capacite de le raser existe enfin"},
|
|||
|
|
{"hash":"bef06551127e4c68dec86aca3f4fc5bc9c65798b","date":"2026-09-12","subject":"le site reconstruit depuis zero : 7/7, 0 echec, et seize corrections"},
|
|||
|
|
{"hash":"b9b0d87db263a66055616799260cd0db3da992df","date":"2026-09-12","subject":"trois reconstructions : trouver, verifier, prouver — 37 min 24 au tour 3"},
|
|||
|
|
{"hash":"56d202a8bb663f2e84f4188c7c05198f60d4c86d","date":"2026-09-12","subject":"pools nommes comme les depots, et les cles sortent du poste"},
|
|||
|
|
{"hash":"5812e0c6ca288445ebcf95e1b4d2e3ad3df449a7","date":"2026-09-12","subject":"depot de binaires : le site tient ce que les runners allaient chercher"},
|
|||
|
|
{"hash":"db4223904d084b7a12f62a259f26650572640960","date":"2026-09-13","subject":"pools : le genome ne nait plus chez un locataire"},
|
|||
|
|
{"hash":"b4e35205619ec89ea36e2f2414ebbea0e26f9a03","date":"2026-09-13","subject":"annuaire : un compte de service par consommateur, et la porte se ferme"},
|
|||
|
|
{"hash":"025776064acf4fb26397b6a67eee3b8078aafb73","date":"2026-09-13","subject":"intrants du site : ce qu un locataire doit savoir pour l habiter, derive"},
|
|||
|
|
{"hash":"a154893fc1ccb5c4090811c9872baefee79b741d","date":"2026-09-13","subject":"restauration : lire aussi l archive en clair, pas seulement la chiffree"},
|
|||
|
|
{"hash":"ab0e74d84313326bd33262c208bbb7b9fe19deb4","date":"2026-09-13","subject":"schemas de flux : l index, et la regle qui les gouverne"},
|
|||
|
|
{"hash":"94bfa224ff1e8246c833a1184ddee255b709fd51","date":"2026-09-13","subject":"gabarit dore : une seule declaration, et les deux souches se rejoignent"},
|
|||
|
|
{"hash":"bd0e40753be4a7b7e2e0f42fa18db7cee4a4e643","date":"2026-09-13","subject":"memoire : ce que l hote a le droit de reprendre, et pourquoi il ne le pouvait pas"},
|
|||
|
|
{"hash":"77cf63f1cfe746149a1e2df4aeb192f8048aec5e","date":"2026-09-13","subject":"flux : un dossier genere doit aussi savoir supprimer"},
|
|||
|
|
{"hash":"224ac2fe320209d3b57ec9ba07a380c006c2a2cb","date":"2026-09-13","subject":"clonage : le plancher se perdait au troisieme maillon"},
|
|||
|
|
{"hash":"4b759110bf837b0e37f506e44678bf6924f312df","date":"2026-09-13","subject":"pages publiees : la liste entiere, et la page qui affirme un prix"},
|
|||
|
|
{"hash":"db1cb652b778811cfbac3e52043fe493c7fac9ea","date":"2026-09-13","subject":"insemination : le runner verifie SA cle avant de partir"},
|
|||
|
|
{"hash":"8a9ac18462d048b3236bd87513d572622bb57d78","date":"2026-09-13","subject":"intrants du site : la table comparait cinq valeurs sur sept"},
|
|||
|
|
{"hash":"220e1e3e28e97d074503f67a505be961494cab3a","date":"2026-09-13","subject":"deployer-tout : le genome est-il a jour avant de poser quoi que ce soit"},
|
|||
|
|
{"hash":"af3fb1c0f15ad88d6a641aee9ff90a78c2f1631c","date":"2026-09-13","subject":"sondes : deux roles ecrivaient dans un repertoire qu ils ne creaient pas"},
|
|||
|
|
{"hash":"0b848fddc9399145f1bf69625250827c24071841","date":"2026-09-14","subject":"postfix : l ordre des handlers decidait de la panne"},
|
|||
|
|
{"hash":"f199888f86a3793214db77faca9a89e8b3d24986","date":"2026-09-14","subject":"redis : la correction d un fait faux, et la methode qui l a produit"},
|
|||
|
|
{"hash":"050b8b267e2bdbb515e1a4b2a89055b50c108955","date":"2026-09-14","subject":"serveur_redis : la sonde qui manquait, et la panne qu elle voit"},
|
|||
|
|
{"hash":"af93a4129e84ea014573b7e62d4eed77b5075798","date":"2026-09-14","subject":"redis : le controle negatif rejoue, et trace"},
|
|||
|
|
{"hash":"f815b069f7ecebc5d17aa87651d2a920d0a1b81e","date":"2026-09-14","subject":"supervision : le lot check_http, et les greffons qui manquaient a la flotte"},
|
|||
|
|
{"hash":"07216a5d301434f2ab9a8c590a17911fa9b16e31","date":"2026-09-14","subject":"supervision : les trois controles negatifs rejoues sur TechnoLibre"},
|
|||
|
|
{"hash":"7348eb93d125f3459187cb04a2c2a001e72393d7","date":"2026-09-14","subject":"serveur_backup : ce qu un depot peut affirmer sans pouvoir lire"},
|
|||
|
|
{"hash":"63437b57261f9cc766db26aede8e3a85eb1aaf13","date":"2026-09-14","subject":"le site pouvait inseminer un locataire, pas se configurer lui-meme"},
|
|||
|
|
{"hash":"b7884217cef33ca3524a2612de5afbf678417930","date":"2026-09-14","subject":"le rebond se decide par le NOM, pas par l adresse"},
|
|||
|
|
{"hash":"9709817be60eadaf7f79190c2fb2a8fb828632ce","date":"2026-09-14","subject":"site : le rebond ET la cle decrivent le controleur, pas le site"},
|
|||
|
|
{"hash":"52b9d31a5d5f9fadff10b02613f7b637562d728d","date":"2026-09-14","subject":"sonde depot : prouvee, et le chemin qu il a fallu ouvrir pour y arriver"},
|
|||
|
|
{"hash":"8eb482e0c61aefeea4ffb2e99a87b57d6fa3c2ea","date":"2026-09-14","subject":"site-deployer-tout : l orchestration existait, rien ne la lancait"},
|
|||
|
|
{"hash":"f4d57009abadc2796a58eb3920f177aab6734afe","date":"2026-09-14","subject":"meta/metriques.yml : le role declare son exportateur, le moteur derive"},
|
|||
|
|
{"hash":"a431c130254c6e96efb8a7541ff4ea6ee62fc64d","date":"2026-09-14","subject":"metriques : la chaine complete, de la declaration au graphe"},
|
|||
|
|
{"hash":"818a100ded2097117db4d167e3e0272426a4a934","date":"2026-09-14","subject":"docs : metriques-conception, l autre moitie d une phrase deja ecrite"},
|
|||
|
|
{"hash":"a4a8fc60655d966ff2fd3f130f80b6ee11ee7820","date":"2026-09-14","subject":"fiche_role : la fiche d un role, generee depuis ce qu il declare"},
|
|||
|
|
{"hash":"1b718848718ecc5b5f490314b27ab4aa4e077a4d","date":"2026-09-14","subject":"make fiches : les 68, et la cible qui les regenere"},
|
|||
|
|
{"hash":"d76ce574f094109c3f7c52ba9a536d1496e6b049","date":"2026-09-14","subject":"fiches de role au wiki : 68 generees, l index, et trois gardes qui ont mordu"},
|
|||
|
|
{"hash":"70193af24d6a4492e61943c09cbbfffc1ca338b1","date":"2026-09-14","subject":"wiki : publie, et le temoin pointait une forge vide"},
|
|||
|
|
{"hash":"8574b7b54088c75c9e88d201b17890115a2de6be","date":"2026-09-14","subject":"wiki : chaque runner publie pour SA forge"},
|
|||
|
|
{"hash":"f307a23345537288df708160a164cf02ce867956","date":"2026-09-14","subject":"le wiki suit le genome : un locataire n en est pas depositaire"},
|
|||
|
|
{"hash":"4290b566b4b468659e68e497bf945cec67533581","date":"2026-09-14","subject":"la decision de la forge appliquee a toute la flotte"},
|
|||
|
|
{"hash":"aac74f6043495c777632f219dbafc191f7faba5d","date":"2026-09-14","subject":"supervision : les huit derniers roles, et deux defauts que l epreuve a trouves"},
|
|||
|
|
{"hash":"baa9d12054ba4038eb7790149ccebcc38676a7bb","date":"2026-09-14","subject":"wiki : WIKI_REMOTE etait documente cinq fois et jamais lu"},
|
|||
|
|
{"hash":"311f33d6f64cc92a445143d5d61377107917d227","date":"2026-09-14","subject":"grafana : les panneaux declares deviennent des tableaux"},
|
|||
|
|
{"hash":"392da4d3f5dd7addfa36f079562cdfcb06a7ff03","date":"2026-09-14","subject":"fiche : les panneaux etaient caches derriere l exportateur"},
|
|||
|
|
{"hash":"b02d3c900e6bb1722aeb7428cb75e5ca3755e2ec","date":"2026-09-14","subject":"temoin du wiki"},
|
|||
|
|
{"hash":"bb88f1f981cb0693acac4b1cc617875afa972e39","date":"2026-09-14","subject":"voute du site : vault_pg_exportateur, et la chaine est complete"},
|
|||
|
|
{"hash":"d4bc3e48b7203656e4c48424da0d4c8f026269b7","date":"2026-09-14","subject":"nom public : la garde ne regardait qu un cote de la cloture"},
|
|||
|
|
{"hash":"c308c9c5b0945f7f20ba0b5d4ae671c93f14895a","date":"2026-09-14","subject":"TLS des bases : le consommateur suit son serveur, il ne le devine plus"},
|
|||
|
|
{"hash":"5ecce4282a59ed331150c1c08f7adefb590a9fe1","date":"2026-09-14","subject":"une console pour le site, et un repli qui ouvrait vers l Internet"},
|
|||
|
|
{"hash":"627ef00ec7986b7731b25c8b2ce6fe6ffea81d4c","date":"2026-09-14","subject":"la console d exploitation devient un service, et elle n avait aucune serrure"},
|
|||
|
|
{"hash":"09a6a490897fdff783ae0413b66249998908de0f","date":"2026-09-14","subject":"le site gagne un edge, et P23 a nomme le geste qui manque"},
|
|||
|
|
{"hash":"4f68182ac66e068ba1af962b43ff3f96a4f3578b","date":"2026-09-14","subject":"l edge du site est debout, et quatre replis silencieux l ont retarde"},
|
|||
|
|
{"hash":"fae3cc8838addfce698fb053a3da7716d8468363","date":"2026-09-14","subject":"l edge servait du snakeoil, et deux ecritures d une meme regle"},
|
|||
|
|
{"hash":"95dc225037132559c8a17ccb8dcf0e07e39f111e","date":"2026-09-15","subject":"l edge publie : trois noms en TLS verifie de bout en bout"},
|
|||
|
|
{"hash":"51dae506fb89f513e6df515fe7d63ef7b5e95a31","date":"2026-09-15","subject":"icingaweb2 : le backend natif remplace un vestibule de trop"},
|
|||
|
|
{"hash":"504840f378aefe6a8ec179a2270f135876cd73bb","date":"2026-09-15","subject":"console : deux bases confondues, et un etat sans domicile"},
|
|||
|
|
{"hash":"0529951381c4abf77df20baafeba303faf31dc92","date":"2026-09-15","subject":"la console d exploitation est allumee, et publiee par l edge"},
|
|||
|
|
{"hash":"e93e8f4c1da89ac28e9a4bdb866a9608917d7eed","date":"2026-09-15","subject":"console chez les locataires, collision de noms, et un fichier ecrase"},
|
|||
|
|
{"hash":"ae212c02523102586a686ab64fe7130eb522777a","date":"2026-09-15","subject":"les trois consoles repondent, chacune derriere sa propre serrure"},
|
|||
|
|
{"hash":"85c7f9710b0ad167c7fc9af0e35fd10031729284","date":"2026-09-15","subject":"P79 : une derivation qui ne trouve rien ne passe plus pour un succes"},
|
|||
|
|
{"hash":"0cbb9fdb4a1904edc8ae05f3befa4c8537e936dd","date":"2026-09-16","subject":"remise au client : deux temps, un outil, une garde"},
|
|||
|
|
{"hash":"a5152a5162af193b4f7bdd602cb296ca9b602831","date":"2026-09-16","subject":"responsabilites : deduites des pouvoirs, et lues par les documents remis"},
|
|||
|
|
{"hash":"e46fa198fd0cdfae00600bdd3892f2ca4f8b0fce","date":"2026-09-16","subject":"la console dit sa portee : un site n affichait aucune de ses machines"},
|
|||
|
|
{"hash":"8456d298bf7a257e8e5be41c0c3b93fe83db7f92","date":"2026-09-16","subject":"la page cesse de proposer ce que le serveur refuse"},
|
|||
|
|
{"hash":"788c5073dc1fe562fbd5bb795ed6016e2015cd0b","date":"2026-09-16","subject":"DNS public, phase 1 : le locataire ecrit, le site sert"},
|
|||
|
|
{"hash":"19bbadfb11b2bb47ced2bb56dabe1074a79c29ee","date":"2026-09-16","subject":"DNS public en production : cinq fautes que seule la production montrait"},
|
|||
|
|
{"hash":"63780645a70f3741ae08dc523689b2d84ab97ea1","date":"2026-09-16","subject":"zones publiques : le courriel dans la zone, et un devis avant de basculer"},
|
|||
|
|
{"hash":"712ad9f6308ae6d2e8d4e7b52627a294bcfca883","date":"2026-09-16","subject":"DNSSEC : le locataire signe, avec la cle de sa voute"},
|
|||
|
|
{"hash":"53cfe71c7e9320c9a4159826ea474279f7ab71bc","date":"2026-09-16","subject":"DNS public : dnsdist devant PowerDNS, debit et refus eprouves"},
|
|||
|
|
{"hash":"c1d0d9b1a79417c7b6d82324f5b5ab81439c5920","date":"2026-09-16","subject":"frontiere : publier un service du site, port public et redirection"},
|
|||
|
|
{"hash":"0eefc5cf4d0fff0106d6afcdf30a72ba66a50396","date":"2026-09-16","subject":"DNS public expose : mesure depuis l'exterieur, rien ne manque sauf le second serveur de noms"},
|
|||
|
|
{"hash":"8ac9f53f054ffedcd14ff2ee856f3696940c0deb","date":"2026-09-17","subject":"pdns public : la boucle locale n'obtient pas la zone sans TSIG (mesure), et comment l'imprimer"},
|
|||
|
|
{"hash":"49ceb81a4dd775ac23eeb28977d8eddffcd577ba","date":"2026-09-17","subject":"materiel : un catalogue de capteurs, un tableau Grafana, un verdict Icinga"},
|
|||
|
|
{"hash":"ee386dca002e71a6e151b7e006472fcb7d2c609b","date":"2026-09-17","subject":"materiel : la frontiere expose ses temperatures, seul le Prometheus du site les lit"},
|
|||
|
|
{"hash":"d90513ca915812e1115908878ea14befc1cde3b1","date":"2026-09-17","subject":"acces d'administration : un tunnel WireGuard nominatif, pas le runner en rebond"},
|
|||
|
|
{"hash":"2a276fb6b4994fb742023e615efde24568821b58","date":"2026-09-17","subject":"tunnel d'administration : le SSH du site et la console de la frontiere manquaient"},
|
|||
|
|
{"hash":"be8c3917e5104b1db4aed98b766178e7d6b67bac","date":"2026-09-17","subject":"acces d'administration : un tunnel par locataire, declare par lui, borne a lui"},
|
|||
|
|
{"hash":"05b85ebd27de44d178fe8e8e36c876ba7cba9d0c","date":"2026-09-17","subject":"tunnel d'administration : TechnoLibre servi, et l'oeuf et la poule du premier pair"}
|
|||
|
|
]</script>
|
|||
|
|
<script>
|
|||
|
|
(() => {
|
|||
|
|
"use strict";
|
|||
|
|
const commits = JSON.parse(document.getElementById("commit-data").textContent);
|
|||
|
|
const commitMap = new Map(commits.map(commit => [commit.hash.slice(0, 7), commit]));
|
|||
|
|
const search = document.getElementById("commit-search");
|
|||
|
|
const month = document.getElementById("commit-month");
|
|||
|
|
const list = document.getElementById("commit-list");
|
|||
|
|
const more = document.getElementById("show-more");
|
|||
|
|
const dialog = document.getElementById("commit-dialog");
|
|||
|
|
const command = document.getElementById("commit-command");
|
|||
|
|
const copyStatus = document.getElementById("copy-status");
|
|||
|
|
const pageSize = 12;
|
|||
|
|
let shown = pageSize;
|
|||
|
|
let filtered = [];
|
|||
|
|
const normalize = value => value.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[’']/g, " ");
|
|||
|
|
const searchable = [...commits].reverse().map(commit => ({ ...commit, searchable: normalize(`${commit.hash} ${commit.date} ${commit.subject}`) }));
|
|||
|
|
const dateFormat = new Intl.DateTimeFormat("fr-CA", { day: "numeric", month: "long", year: "numeric", timeZone: "UTC" });
|
|||
|
|
|
|||
|
|
function render() {
|
|||
|
|
const terms = normalize(search.value.trim()).split(/\s+/).filter(Boolean);
|
|||
|
|
filtered = searchable.filter(commit => (!month.value || commit.date.startsWith(month.value)) && terms.every(term => commit.searchable.includes(term)));
|
|||
|
|
const fragment = document.createDocumentFragment();
|
|||
|
|
filtered.slice(0, shown).forEach(commit => {
|
|||
|
|
const item = document.createElement("li");
|
|||
|
|
const button = document.createElement("button");
|
|||
|
|
button.type = "button";
|
|||
|
|
button.className = "commit-row";
|
|||
|
|
button.dataset.commit = commit.hash.slice(0, 7);
|
|||
|
|
const date = document.createElement("time");
|
|||
|
|
date.dateTime = commit.date;
|
|||
|
|
date.textContent = commit.date;
|
|||
|
|
const hash = document.createElement("code");
|
|||
|
|
hash.textContent = commit.hash.slice(0, 7);
|
|||
|
|
const subject = document.createElement("span");
|
|||
|
|
subject.className = "subject";
|
|||
|
|
subject.textContent = commit.subject;
|
|||
|
|
const arrow = document.createElement("span");
|
|||
|
|
arrow.className = "arrow";
|
|||
|
|
arrow.textContent = "↗";
|
|||
|
|
arrow.setAttribute("aria-hidden", "true");
|
|||
|
|
button.append(date, hash, subject, arrow);
|
|||
|
|
item.append(button);
|
|||
|
|
fragment.append(item);
|
|||
|
|
});
|
|||
|
|
list.replaceChildren(fragment);
|
|||
|
|
document.getElementById("result-count").textContent = filtered.length ? `${filtered.length} commit${filtered.length > 1 ? "s" : ""} · ${month.selectedOptions[0].textContent}${search.value ? ` · recherche : « ${search.value} »` : ""}` : "Aucun commit ne correspond. Essayez un autre mot ou une autre période.";
|
|||
|
|
document.getElementById("visible-count").textContent = `${Math.min(shown, filtered.length)} / ${filtered.length} affichés`;
|
|||
|
|
more.hidden = shown >= filtered.length;
|
|||
|
|
more.textContent = `Afficher ${Math.min(pageSize, Math.max(0, filtered.length - shown))} commits de plus ↓`;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
search.addEventListener("input", () => { shown = pageSize; render(); });
|
|||
|
|
month.addEventListener("change", () => { shown = pageSize; render(); });
|
|||
|
|
more.addEventListener("click", () => {
|
|||
|
|
const firstNewIndex = Math.min(shown, filtered.length);
|
|||
|
|
shown += pageSize;
|
|||
|
|
render();
|
|||
|
|
list.children[firstNewIndex]?.querySelector("button").focus({ preventScroll: true });
|
|||
|
|
});
|
|||
|
|
document.addEventListener("click", event => {
|
|||
|
|
const source = event.target.closest("[data-commit]");
|
|||
|
|
if (!source) return;
|
|||
|
|
const commit = commitMap.get(source.dataset.commit);
|
|||
|
|
if (!commit || typeof dialog.showModal !== "function") return;
|
|||
|
|
event.preventDefault();
|
|||
|
|
document.getElementById("dialog-title").textContent = commit.subject;
|
|||
|
|
document.getElementById("dialog-date").textContent = dateFormat.format(new Date(`${commit.date}T12:00:00Z`));
|
|||
|
|
document.getElementById("dialog-hash").textContent = commit.hash;
|
|||
|
|
command.value = `git show ${commit.hash.slice(0, 7)}`;
|
|||
|
|
copyStatus.textContent = "";
|
|||
|
|
dialog.showModal();
|
|||
|
|
});
|
|||
|
|
document.getElementById("copy-command").addEventListener("click", async () => {
|
|||
|
|
try {
|
|||
|
|
await navigator.clipboard.writeText(command.value);
|
|||
|
|
copyStatus.textContent = "Commande copiée.";
|
|||
|
|
} catch {
|
|||
|
|
command.focus();
|
|||
|
|
command.select();
|
|||
|
|
copyStatus.textContent = "Commande sélectionnée : utilisez Copier.";
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
dialog.addEventListener("click", event => {
|
|||
|
|
if (event.target !== dialog) return;
|
|||
|
|
const bounds = dialog.getBoundingClientRect();
|
|||
|
|
if (event.clientX < bounds.left || event.clientX > bounds.right || event.clientY < bounds.top || event.clientY > bounds.bottom) dialog.close();
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const chapterLinks = [...document.querySelectorAll(".contents a")];
|
|||
|
|
const chapters = chapterLinks.map(link => document.querySelector(link.getAttribute("href")));
|
|||
|
|
const progress = document.querySelector(".progress");
|
|||
|
|
let framePending = false;
|
|||
|
|
function updateReading() {
|
|||
|
|
const distance = document.documentElement.scrollHeight - window.innerHeight;
|
|||
|
|
progress.style.width = `${distance > 0 ? Math.min(100, window.scrollY / distance * 100) : 0}%`;
|
|||
|
|
let active = -1;
|
|||
|
|
chapters.forEach((chapter, index) => { if (chapter.getBoundingClientRect().top <= window.innerHeight * .4) active = index; });
|
|||
|
|
chapterLinks.forEach((link, index) => { if (index === active) link.setAttribute("aria-current", "location"); else link.removeAttribute("aria-current"); });
|
|||
|
|
framePending = false;
|
|||
|
|
}
|
|||
|
|
function scheduleReading() { if (!framePending) { framePending = true; requestAnimationFrame(updateReading); } }
|
|||
|
|
window.addEventListener("scroll", scheduleReading, { passive: true });
|
|||
|
|
window.addEventListener("resize", scheduleReading);
|
|||
|
|
document.getElementById("archive-interactive").hidden = false;
|
|||
|
|
render();
|
|||
|
|
updateReading();
|
|||
|
|
})();
|
|||
|
|
</script>
|
|||
|
|
</body>
|
|||
|
|
</html>
|