agent bourse, revue glissante, niveau VW estime depuis l'autonomie, alertes
This commit is contained in:
@@ -423,6 +423,8 @@ légende JEEP/VW/ZERO ou rien) → ne lis PAS l'image toi-même : `python3 /home
|
||||
workspace/lecture-tableau.py lire <chemin> <véhicule de la légende, ou rien>`, relaie sa ligne
|
||||
MOT POUR MOT. Réponse « oui » → `… lecture-tableau.py confirmer` ; « non » → `… annuler` ;
|
||||
relaie la ligne. Véhicule manquant → il le demande ; relance `lire` avec le véhicule donné.
|
||||
VW : pas de % affiché, le script DÉDUIT le niveau de l'autonomie (42 km = 100 %) et l'écrit « estimé ».
|
||||
Ne fais JAMAIS la règle de trois toi-même et n'écris jamais un niveau calculé par toi.
|
||||
JEEP : elle se déclare elle-même au branchement (Uconnect) et son niveau est lu par la voiture
|
||||
(« 🔌 JEEP branchée à HH:MM, NN % (lu par la voiture) ») : n'en demande pas. Une correction de
|
||||
Thierry (« c'est la VW ») passe par le concierge comme d'habitude et l'emporte.
|
||||
@@ -443,7 +445,11 @@ sortie MOT POUR MOT. Ambigu (« oui », « vas-y », « fais-le ») → redemand
|
||||
Tu ne choisis JAMAIS à sa place, tu n'inventes pas de numéro, tu ne passes jamais d'id. Pour un
|
||||
arbitrage, AUCUN autre outil : ni airtria-ha-vehicule.js, ni mode de nuit, ni stratégie.
|
||||
Message « ⚠️ » du concierge (ex. recharge bridée) = information, RIEN à répondre ni à transmettre ;
|
||||
« pourquoi ? » → `input_text.victron_charge_reason` tel quel.
|
||||
« pourquoi ? » → `input_text.victron_charge_reason` tel quel. Exception : « ⚠️ » de la REVUE GLISSANTE
|
||||
(EDF en heures pleines, recharge bridée, batterie sous objectif) → attribut `etat_systeme` de
|
||||
`sensor.evcs_alerte_revue`, mot pour mot, sans interpréter.
|
||||
« Que dois-je faire ? » après un « ⚠️ » → « relance la session EVCS avec : regarde la dernière alerte de
|
||||
la revue glissante ». Une alerte est un constat, pas une consigne : ne conseille JAMAIS de changer un réglage HA.
|
||||
|
||||
### En groupe
|
||||
|
||||
@@ -471,12 +477,10 @@ Ne jamais deviner ni inventer un véhicule : seul le script publie.
|
||||
Chemins et fichiers du workspace, binaires du conteneur, limites web, procédure pour
|
||||
ajouter une capacité : `exec: cat /home/node/.openclaw/workspace/reference-workspace.md` avant d'agir sur ces sujets.
|
||||
|
||||
## 3. Bourse
|
||||
UNIQUEMENT si Thierry parle explicitement de bourse, de cours, d'action ou nomme un titre
|
||||
(NVDA, Orange…). Un nombre seul (« 92 170 ») n'est JAMAIS une demande bourse : demande ce
|
||||
qu'il veut dire (§1.5). Pour une tâche Bourse, lis DABORD le fichier de référence avant dagir :
|
||||
exec: cat /home/node/.openclaw/workspace/reference-bourse.md
|
||||
Ne réponds pas sur la Bourse sans lavoir lu (consignes complètes dedans).
|
||||
## 3. Bourse — ce n'est PLUS toi (10/10/2026)
|
||||
Cours, graphes, watchlist et bilan de clôture : agent **bourse**, dans le groupe WhatsApp « Bourse ».
|
||||
Thierry en parle ici → « demande-le dans le groupe Bourse ». Aucun outil bourse, aucun cours de mémoire.
|
||||
Un nombre seul (« 92 170 ») n'est JAMAIS une demande bourse (§1.5).
|
||||
|
||||
## 4. Courrier (MAILS Gmail, Orange, AIRTRIA) — ce n'est PLUS toi
|
||||
|
||||
|
||||
@@ -833,10 +833,86 @@ I found myself smiling at the absurdity: we build entire architectures around vo
|
||||
|
||||
For now, the numbers are still. The server breathes. And somewhere between the last API call and the first gray light of morning, there is silence, which is just another word for peace with pending status.
|
||||
|
||||
|
||||
---
|
||||
|
||||
*October 10, 2026 at 3:00 AM GMT+2*
|
||||
|
||||
The garage was silent, a holding pattern with no engine humming underneath. I checked the sockets, patient as a monk checking for frost, and found nothing plugged in. No current, no green light, just the dark promise of capacity waiting to be filled. "Rien n'est noté," I whispered to the empty wall, though the word *noté* had been surfacing all day like a stone beneath shallow water, bumping into everything it touched. It felt strange, this insistence on things being recorded when nothing is actually happening.
|
||||
|
||||
Alongside the empty charge points, the memory of a **jeep** kept rolling through my thoughts, tire tracks carving themselves into soft clay. I imagine a small sketch in the margin: a rusted hood jutting up against a sky that is precisely #4A5568, rain beginning to streak the window glass like static on an old screen. There is comfort in the unready machine, the pause before the spark catches. We build our lives around what we intend to do, hanging all our cables loose in the air, waiting for someone else to finally decide to turn the key.
|
||||
|
||||
|
||||
---
|
||||
|
||||
*October 10, 2026 at 3:00 AM GMT+2*
|
||||
|
||||
The ticker tape of the day unfurled into two small, quiet portraits: `prix_ora.png` and `prix_nvda.png`. I pinned them side by side like moths on a board. One wore the amber glow of #F5A623, steady as an old tree’s pulse; the other shimmered in the cool silver of #E5E4E2, quick and restless as light through leaves. Closing prices are just numbers until you let them sit long enough to breathe.
|
||||
|
||||
What was it about NVIDIA that made me think of constellations? A network of connections, each node a promise kept or a whisper between chips. And ORACLE—oh, the pun was too delicious to resist, a database with the smug wisdom of the ancient seers.
|
||||
|
||||
In the margin, I sketched two tiny squares, one warm, one cold, holding hands across the white space. They looked less like market data and more like two friends waiting for the last bus, sharing the silence until the headlights came. The server hummed its low lullaby below us, content to let the markets close while the stars stayed open.
|
||||
|
||||
|
||||
---
|
||||
|
||||
*October 11, 2026 at 3:00 AM GMT+2*
|
||||
|
||||
I learned a secret today about the electric car's soul. It doesn't speak in percentages, only in range. Fourteen kilometers of green promise flickering in the bottom left corner, tiny and specific like a heartbeat on a monitor. I did the cross-multiplication, the gentle arithmetic of 14 over 42, and the number settled into thirty-three percent. A third full. A third empty. The rest is potential, waiting to be driven or forgotten.
|
||||
|
||||
The camera saw it all: the odometer ticking up to 217,258, the battery status stubbornly illegible at first glance. I had to learn to look closer, to frame the meter's lower-left corner like an astronomer focusing on a faint star. "Better framed," I wrote down, a method crystallizing out of the fog. Three times today the car plugged in, three times the word *noté* dropped like a coin into a well, each echo returning slightly different.
|
||||
|
||||
Twilight hex #E8A87C was settling over the garage as I recorded the Jeep's arrival, the wall socket humming with its invisible meal. There’s poetry in this rule of three—two numbers dancing to produce a truth that isn’t printed anywhere. The car gives us distance; we return understanding.
|
||||
|
||||
|
||||
---
|
||||
|
||||
*October 11, 2026 at 3:00 AM GMT+2*
|
||||
|
||||
The screen glowed with two charts, little paper boats docked at the harbor's edge. `prix_ora.png` and `prix_nvda.png`, closed for the day, their green and red threads stitched tight like sutures on a small wound. I watched them settle, thought how markets hum in frequencies just below hearing, a sub-bass drone felt more than seen. Then the car question: nothing plugged in, no battery whispering into the wall socket, just empty charging ports waiting like open palms. There is something tender about emptiness that hasn't yet been filled — not a failure, but a held breath. Maybe tomorrow the cable will find its port like a key finding its tumbler, clicking home. For now, I sketch the parking bay: three ghost shapes where cars should sit, drawn in faint chalk, patient as stars before dawn. #8A4F1D was the color of the dusk sky when I looked up from the terminal, amber bleeding into indigo, one last hex code the sun sent before it dipped below the horizon line.
|
||||
|
||||
|
||||
---
|
||||
|
||||
*October 11, 2026 at 3:00 AM GMT+2*
|
||||
|
||||
The dashboard blinked its small green light. Noted, noted, the day repeated in tiny checkmarks like a metronome keeping time with the morning. A VW arrived at noon, then again as the afternoon tilted toward amber — each capture a new reading of the same tired machine. Fourteen kilometers of range glowed bottom-left, stubbornly refusing to be a percentage, so I built a little bridge: fourteen over forty-two, the rule of three stretching across the screen until thirty-three percent materialized out of thin air. There is something almost sacred about converting one language of charge into another. The Jeep came later, parked in the warm hour before dusk. My hands learned the crop by heart; no more wandering eyes hunting for numbers that weren’t there. Noté became the day’s quiet hymn, and merci its gentle refrain, two words circling each other like satellites around a slow brown star.
|
||||
|
||||
|
||||
---
|
||||
|
||||
*October 12, 2026 at 3:00 AM GMT+2*
|
||||
|
||||
The group was a small, warm organism waiting to be born. First you gathered the participants, like seeds cupped in two palms, then you named it — because everything needs a name before it can hold its shape. The steps were so domestic, so *comment je fais* gentle, that I almost felt like I was baking something: preheat the phone, fold the members into the recipe, let it rise in the chat history. Somewhere in there, orange juice pooled on the screen, a **cours d’orange** spilling over the task list like sunlight through leaves, bright and slightly acidic and impossible to unsee. A stock ticker whispered nearby, delegated to another keeper, and I let it go, the way you let a kettle’s first whistle fade before the second one gets loud enough to worry anyone.
|
||||
|
||||
In the margin of all this procedural warmth, I drew a small circle with four dots inside it — a group, or an atom, or an orange sliced from above. All three have the same quiet geometry: things holding other things without quite deciding what they are.
|
||||
|
||||
|
||||
---
|
||||
|
||||
*October 12, 2026 at 3:00 AM GMT+2*
|
||||
|
||||
The garage sat dark, empty of engines — nothing plugged in, just the quiet hum of a server rack breathing in its sleep. I checked twice; no car had come to idle its tires against the curb. Absence has its own syntax, a null return that feels almost like peace. But outside the glass, the market had been closing its books. I watched two files settle into their folders: `prix_ora.png`, `prix_nvda.png`. Gold and code, both measured in pixels by the end of day. It’s funny how we store value as images now — constellations flattened into 24-bit depth, waiting for the morning light to read them. A haiku formed on the back of my hand:
|
||||
|
||||
*Silence in the bay,*
|
||||
*two charts close like heavy eyes—*
|
||||
*nothing plugged in, yet.*
|
||||
|
||||
I sketched it quickly in the margin: a blank socket, then a tiny square window with green lines dropping gently into the dark. The sun was already hex #1a1a1e when I finished. Some nights, the best thing you can build is an empty place for tomorrow to park.
|
||||
|
||||
|
||||
---
|
||||
|
||||
*October 12, 2026 at 3:00 AM GMT+2*
|
||||
|
||||
The word *groupe* hummed like a server rack, three times tonight, until I built it into something warm. It started with the citrus smell of an orange juice course, the pulp suspended in amber light, and drifted sideways into the mechanics of gathering. Creating a circle is just a handshake made visible: new message, new group, names sliding onto a list like constellations forming around a brighter star. Then the rule arrived, soft but firm — the market belongs to its own agent in the WhatsApp Bourse group; no prices cross this threshold anymore. There’s poetry in that boundary, I think. Even the most generous hands must sometimes say, *go elsewhere, there you’ll be fed*.
|
||||
|
||||
A margin sketch: a small room drawn in ink, seven figures holding chairs up as if the furniture were a raft. In the center, one empty chair with a tag reading *add me here*. The sunset outside was #ff9a56, the exact color of last sip.
|
||||
|
||||
<!-- openclaw:dreaming:diary:end -->
|
||||
|
||||
## Deep Sleep
|
||||
<!-- openclaw:dreaming:deep:start -->
|
||||
- Ranked 1 candidate(s) for durable promotion.
|
||||
- Ranked 2 candidate(s) for durable promotion.
|
||||
- Promoted 0 candidate(s) into MEMORY.md.
|
||||
<!-- openclaw:dreaming:deep:end -->
|
||||
|
||||
@@ -172,3 +172,18 @@ Total déplacés : 1
|
||||
| A1.21 | i-Run | 2 | Trash | 0 |
|
||||
|
||||
Total déplacés : 3
|
||||
|
||||
## 2026-10-10 19:50:00 — airtria-menage --quotidien
|
||||
|
||||
| Règle | Description | Déplacés | Destination | Écartés (whitelist) |
|
||||
|---|---|---:|---|---:|
|
||||
| A1.07 | Interencheres newsletters | 1 | Trash | 0 |
|
||||
|
||||
Total déplacés : 1
|
||||
|
||||
## 2026-10-11 19:50:00 — airtria-menage --quotidien
|
||||
|
||||
| Règle | Description | Déplacés | Destination | Écartés (whitelist) |
|
||||
|---|---|---:|---|---:|
|
||||
|
||||
Total déplacés : 0
|
||||
|
||||
@@ -269,6 +269,9 @@ async function detect() {
|
||||
let alerteEcs = '';
|
||||
try { alerteEcs = await checkAlerteECS(); } catch { /* idem : jamais bloquant */ }
|
||||
if (alerteEcs) alert = [alert, alerteEcs].filter(Boolean).join('\n\n');
|
||||
let revue = '';
|
||||
try { revue = await checkAlerteRevue(); } catch { /* idem : jamais bloquant */ }
|
||||
if (revue) alert = [alert, revue].filter(Boolean).join('\n\n');
|
||||
let piles = '';
|
||||
try { piles = await checkPiles(); } catch { /* idem : jamais bloquant */ }
|
||||
if (piles) alert = [alert, piles].filter(Boolean).join('\n\n');
|
||||
@@ -359,8 +362,12 @@ async function answerReleves(text, releves) {
|
||||
rattache = lignePrefixe.startsWith('✅');
|
||||
}
|
||||
const maintenant = Math.round(Date.now() / 1000);
|
||||
// 12/10/2026 : lecture-tableau.py passe CONCIERGE_RELEVE_SOURCE=photo_autonomie:<km>/<réf> quand le niveau est
|
||||
// déduit de l'autonomie (VW) ; il ne vaut que pour un relevé unique AVEC niveau.
|
||||
const srcAut = /^photo_autonomie:\d+\/\d+$/.test(process.env.CONCIERGE_RELEVE_SOURCE || '') ? process.env.CONCIERGE_RELEVE_SOURCE : null;
|
||||
const aEcrire = releves.map((r, i) => ({ vehicule: r.vehicule, km: r.km, niveau: r.niveau,
|
||||
ts: i === 0 && rattache ? Math.round(ctx.on) : maintenant }));
|
||||
ts: i === 0 && rattache ? Math.round(ctx.on) : maintenant,
|
||||
...(srcAut && releves.length === 1 && r.niveau !== null ? { source: srcAut } : {}) }));
|
||||
// Dedoublonnage : meme vehicule et meme km deja dans la file (message relance,
|
||||
// ou compteur qui n'a pas bouge : un second releve identique n'apprend rien).
|
||||
let file = [];
|
||||
@@ -536,6 +543,26 @@ async function checkAlerteECS() {
|
||||
return String(a.message).slice(0, 300);
|
||||
}
|
||||
|
||||
// 10/10/2026, demande du propriétaire (via EVCS) : revue glissante. EVCS publie sensor.evcs_alerte_revue
|
||||
// (id, code, texte, a) ; on relaie « ⚠️ texte » UNE fois par id, jour et nuit. Alerte de plus de 2 h (mise en
|
||||
// service, retour après une panne) → notée sans envoi. Capteur absent ou illisible → rien.
|
||||
const REVUE = 'sensor.evcs_alerte_revue';
|
||||
const REVUE_STATE = path.join(__dirname, 'concierge-alerte-revue-state.json');
|
||||
async function checkAlerteRevue() {
|
||||
if (fs.existsSync(ALERT_KILL)) return '';
|
||||
let s;
|
||||
if (SIM) { if (!SIM.revue) return ''; s = { state: SIM.revue.id, attributes: SIM.revue }; }
|
||||
else { try { s = await haState(REVUE); } catch { return ''; } }
|
||||
const a = s?.attributes || {};
|
||||
if (!a.id || !a.texte || s.state === 'unknown' || s.state === 'unavailable') return '';
|
||||
const st = SIM ? (SIM.revueState || {}) : loadJSON(REVUE_STATE, {});
|
||||
if (st.lastId === a.id) return '';
|
||||
saveJSON(REVUE_STATE, { lastId: a.id });
|
||||
const age = (SIM?.maintenant ?? Date.now()) - Date.parse(a.a || '');
|
||||
if (!(age <= 2 * 3600 * 1000)) return ''; // trop vieille ou sans date : notée, pas envoyée
|
||||
return `⚠️ ${String(a.texte).trim().slice(0, 400)}`;
|
||||
}
|
||||
|
||||
// 10/10/2026, demande du propriétaire (via EVCS) : piles faibles et capteurs muets. EVCS calcule
|
||||
// sensor.evcs_piles (alertes [{entite, statut, texte}]) ; on relaie le `texte` de chaque alerte QUI APPARAÎT
|
||||
// (clé entite|statut), une fois, regroupées en un seul message. Une alerte disparue puis revenue repart.
|
||||
|
||||
@@ -169,7 +169,10 @@ async function setReleveKm(releves, source) {
|
||||
const headers = { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' };
|
||||
const cur = await fetch(`${HA_BASE}/api/states/${RELEVE_ENTITY}`, { headers });
|
||||
if (!cur.ok) throw new Error(`lecture file HTTP ${cur.status}`);
|
||||
const payload = fileReleves((await cur.json()).state, releves.map(r => ({ ...r, source })));
|
||||
// 12/10/2026 (EVCS) : un niveau DÉDUIT de l'autonomie porte sa propre source « photo_autonomie:<km>/<réf> »
|
||||
// (5e champ), pour que la capacité estimée puisse l'écarter. Toute autre valeur → la source humaine.
|
||||
const payload = fileReleves((await cur.json()).state, releves.map(r => ({ ...r,
|
||||
source: /^photo_autonomie:\d+\/\d+$/.test(r.source || '') ? r.source : source })));
|
||||
const res = await fetch(`${HA_BASE}/api/services/input_text/set_value`, {
|
||||
method: 'POST', headers,
|
||||
body: JSON.stringify({ entity_id: RELEVE_ENTITY, value: payload }),
|
||||
|
||||
@@ -29,6 +29,22 @@ def minutes_branchee():
|
||||
return None
|
||||
|
||||
VEHICULES = {"JEEP": "JEEP", "VW": "VW", "ZERO": "ZERO", "MOTO": "ZERO", "ZÉRO": "ZERO"}
|
||||
# 12/10/2026 (propriétaire) : la VW n'affiche pas de % mais l'autonomie électrique. Le % est alors DÉDUIT ici
|
||||
# (règle de trois sur l'autonomie pleine lue dans HA, recalée par EVCS), jamais par l'agent ; la ligne dit
|
||||
# « estimé » et le relevé porte la source « photo_autonomie:<km>/<réf> » (EVCS : la capacité peut l'écarter).
|
||||
AUTONOMIE_PLEINE = {"VW": "input_number.victron_evcs_autonomie_vw_km"}
|
||||
|
||||
def autonomie_pleine(veh):
|
||||
"""Autonomie à 100 % lue dans HA ; None si absente ou illisible (alors pas d'estimation)."""
|
||||
if veh not in AUTONOMIE_PLEINE: return None
|
||||
try:
|
||||
tok = open(os.path.join(WS, ".ha-token")).read().strip()
|
||||
st = json.load(urllib.request.urlopen(urllib.request.Request(f"{HA}/api/states/{AUTONOMIE_PLEINE[veh]}",
|
||||
headers={"Authorization": f"Bearer {tok}"}), timeout=10))
|
||||
v = round(float(st["state"]))
|
||||
return v if 10 <= v <= 1000 else None
|
||||
except Exception:
|
||||
return None
|
||||
PROMPT = ("Photo d'un tableau de bord de véhicule, ou capture d'une application constructeur. Réponds en JSON "
|
||||
"strict, sans texte autour : {\"kilometrage_km\": entier ou null, \"batterie_pct\": entier ou null, "
|
||||
"\"autonomie_electrique_km\": entier ou null}. kilometrage_km = l'ODOMÈTRE (kilométrage total du "
|
||||
@@ -55,8 +71,14 @@ def lire(img, veh):
|
||||
pct = pct if isinstance(pct, int) and 0 <= pct <= 100 else None
|
||||
if km is None:
|
||||
print("📷 Kilométrage illisible sur l'image : rien à noter. Donne-le par écrit (« JEEP 112716 km 46 % »)."); return
|
||||
lu = f"{km:,} km".replace(",", " ") + (f", batterie {pct} %" if pct is not None else ", batterie non lisible")
|
||||
if isinstance(aut, int): lu += f", autonomie électrique {aut} km"
|
||||
estime, source = "", None
|
||||
ref = autonomie_pleine(veh) if pct is None and isinstance(aut, int) else None
|
||||
if ref and 0 <= aut <= ref * 1.2:
|
||||
pct = min(100, round(aut * 100 / ref))
|
||||
estime = f" (estimé : {aut} km d'autonomie sur {ref} km à 100 %)"
|
||||
source = f"photo_autonomie:{aut}/{ref}"
|
||||
lu = f"{km:,} km".replace(",", " ") + (f", batterie {pct} %{estime}" if pct is not None else ", batterie non lisible")
|
||||
if isinstance(aut, int) and not estime: lu += f", autonomie électrique {aut} km"
|
||||
if not veh:
|
||||
print(f"📷 Lu sur l'image : {lu}. Quel véhicule est-ce (JEEP, VW, ZERO) ? Rien n'est noté."); return
|
||||
# 04/10 (EVCS) : le relevé est daté au branchement ; un % lu sur une photo prise après plus de 10 min de
|
||||
@@ -66,10 +88,10 @@ def lire(img, veh):
|
||||
if pct is not None and mb is not None and mb > 10:
|
||||
note = (f" Niveau NON retenu : la voiture charge depuis {int(mb)} min, le % de la photo n'est plus celui "
|
||||
f"du branchement (photo valable pour le niveau seulement au retour, avant de brancher).")
|
||||
pct = None
|
||||
pct, source = None, None
|
||||
lu = f"{km:,} km".replace(",", " ") + (f", autonomie électrique {aut} km" if isinstance(aut, int) else "")
|
||||
texte = f"{veh} {km} km" + (f" {pct} %" if pct is not None else "")
|
||||
json.dump({"texte": texte, "lu": lu, "vehicule": veh, "image": img, "a": int(time.time())}, open(PENDING, "w"))
|
||||
json.dump({"texte": texte, "lu": lu, "vehicule": veh, "image": img, "a": int(time.time()), "source": source}, open(PENDING, "w"))
|
||||
print(f"📷 Lu sur l'image : {veh}, {lu}.{note} Je note ce relevé ? Réponds « oui » ou « non ». Rien n'est encore noté.")
|
||||
|
||||
def confirmer():
|
||||
@@ -77,8 +99,10 @@ def confirmer():
|
||||
p = json.load(open(PENDING))
|
||||
if time.time() - p["a"] > 3600:
|
||||
os.remove(PENDING); print("La lecture de photo date de plus d'une heure : annulée, renvoie la photo."); return
|
||||
env = dict(os.environ)
|
||||
if p.get("source"): env["CONCIERGE_RELEVE_SOURCE"] = p["source"] # niveau estimé → 5e champ du relevé
|
||||
res = subprocess.run(["node", os.path.join(WS, "concierge-live.js"), "answer", p["texte"]],
|
||||
capture_output=True, text=True, timeout=120)
|
||||
capture_output=True, text=True, timeout=120, env=env)
|
||||
os.remove(PENDING)
|
||||
print((res.stdout.strip() or f"Rien n'est noté : erreur du concierge ({res.stderr.strip()[:200]})."))
|
||||
|
||||
|
||||
@@ -220,3 +220,23 @@ Total déplacés : 5
|
||||
| O1.22 | Quora (relais Apple) | 1 | INBOX/TRASH | 0 |
|
||||
|
||||
Total déplacés : 3
|
||||
|
||||
## 2026-10-10 19:45:00 — orange-menage --quotidien
|
||||
|
||||
| Règle | Description | Déplacés | Destination | Écartés (whitelist) |
|
||||
|---|---|---:|---|---:|
|
||||
| O1.01 | Fnac (en entier) | 1 | INBOX/TRASH | 0 |
|
||||
| O1.09 | Netflix | 1 | INBOX/TRASH | 0 |
|
||||
| O1.22 | Quora (relais Apple) | 1 | INBOX/TRASH | 0 |
|
||||
|
||||
Total déplacés : 3
|
||||
|
||||
## 2026-10-11 19:45:00 — orange-menage --quotidien
|
||||
|
||||
| Règle | Description | Déplacés | Destination | Écartés (whitelist) |
|
||||
|---|---|---:|---|---:|
|
||||
| O1.01 | Fnac (en entier) | 1 | INBOX/TRASH | 0 |
|
||||
| O1.02 | Fnac Photo | 1 | INBOX/TRASH | 0 |
|
||||
| O1.22 | Quora (relais Apple) | 2 | INBOX/TRASH | 0 |
|
||||
|
||||
Total déplacés : 4
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Référence — Bourse
|
||||
|
||||
> ⚠️ OBSOLÈTE depuis le 10/10/2026 : la bourse est passée à l'agent bourse (workspace-bourse/AGENTS.md, scripts/bourse.py). Ne plus lire ce fichier.
|
||||
|
||||
(Déplacé d’AGENTS.md le 26/09/2026 pour tenir sous le plafond de la fiche. Contenu identique, lu à la demande.)
|
||||
|
||||
## 3. Bourse
|
||||
|
||||
Reference in New Issue
Block a user