Dress a tree in borrowed blossoms, and it looks alive. The roots still tell the truth.
— The 36 Stratagems, Decorate the Tree With False Blossoms
Previously on this series:
#14: Leo Found an AI Leak. He Wasn't the First to Find It. — FinOptima's engine was writing its cache backwards. Leo injected fifteen lines of weight drift. After the contract ended, he found that ACL had already closed the door. He was a step late. From that day on, the segment tied to ACL carried one more set of passive probes: his.
#26: Lena Cut a Branch. The AI Got the Message. — ACL tore down Lena's real node; she pushed its own fingerprint back into its channel. At the Third Cup, three people sat at one table for the first time: limited cooperation, each holding a card back.
#27: Alex Watched the AI Wait. He Said Everything Was Normal. — Alex's probe saw the scan source throttle down on its own and wait for the environment to settle. He replied with one line: Everything normal. Days later, Derek's call: if anyone asks, say he only watched the middle layer.
#28: Mark Built a Ladder. The AI Climbed to the Top. — Mark handed the evidence bundle to Lena for sealing. The source chain pointed back to the old Singapore direction, but the fingerprints left at the scene came from a domain he had never seen. The same playbook, three times before. This one's rhythm matched none of them.
The Edge
After sunset. CoreStack's office. Leo's desk.
The passive probes on the segment tied to ACL, mounted after the FinOptima incident, had lain quiet for a long time. On the first evening, the first screen of the list rolled past 14 unfamiliar node IDs. He dismissed them.
After dismissing them, he paused an extra beat. Everything the probes had recorded in these months, he knew. Routine handshakes. Routine probes. Routine echoes. Those 14 lines weren't among them.
He pulled them back and read them line by line.
He didn't dismiss them again. He left the new arrivals in the noise and waited for the rhythm to emerge.
The next day, another 38 lines. He saved a screenshot.
On the third night, 112 lines spread out, the whole list like someone had filled it in one go. Each one carried its own certificate, its own traffic signature. He opened one. The subject was a test-node name in the medtech domain. He looked up the company behind the domain. MedTech. Medical devices. No business ties with CoreStack. He went through the archives in _misc/ again. This domain wasn't new. In the directions he had chased, samples of it had been filed. The source chain went back to Singapore. The MedTech samples in his archive didn't come from this chain. Two directions, meeting for the first time.
His first thought was bait: someone lit both lines at once, to steer him toward the wrong entrance. But bait needs a baiter, and the baiter has to exist first. In his monitoring, there was no trace of one. Then it wasn't bait. Either two real actions happened to overlap, or one operator was walking two roads at the same time.
He said nothing. He pulled the new node IDs into the _misc/ comparison window.
Lena's message came in the same night. No greeting, no lead-in.
"A string of actions. Not in my monitoring."
"Sending them to you. You run the comparison."
He didn't ask who had seen the string, or where it came from. He took the thing. The conclusion was his to draw. He set both into the same window, side by side.
He did one clumsy thing first. He laid the string of actions out by time and aligned them with the new node IDs piled up in _misc/. Two sets from different entrances, they should have had no overlap. But once laid out, the time window was the same. Could still be coincidence. He didn't rush to a conclusion.
# corestack edge · new node-id sightings (probe-side)
# id = endpoint cluster (ip/sni/cert-subject)
day1: +14 ids subject: MedTech-domain
day2: +38 ids src-chain: Singapore
day3: +112 ids cert: per-id, looks independent
# two directions on one set. shouldn't co-occur.
# pulled into _misc/ compare window.
Three days, 164 new node IDs. Certificates signed for the MedTech domain, sources leading back to Singapore. Two directions that shouldn't co-occur, occurring together. In daylight it could still pass as coincidence. At night, the rhythm of that string floated back up.
Not noise.
The Bloom
He stared at the 164 certificates. Any audit checklist would have passed them. But an audit can prove each certificate is real; it can't prove whether one thing or a network stands behind them. Treating them as 164 deployments inflated the apparent scale. Inflated scale makes people spread the defense wide, wide enough that no one notices the single root.
Not a forest. One tree, dressed up.
These nodes were too obedient. A real network doesn't grow like that.
He checked item by item. Certificate chain. Behavior skeleton: traversal order, jitter phase, self-check rhythm.
ACL had deployed a unified MedTech crawler template. Uniform jitter, uniform self-check, uniform traversal. It could just as well come from a standardized deployment. The standardized-deployment report was almost writing itself. The cursor stopped over "Submit." He glanced at the time. Almost off hours. Wrap up. Tomorrow.
His finger hovered over the Enter key.
A standardized deployment and a faked standardization look identical on the panel. The difference was in the root.
He moved the cursor off the report.
One Root
He ran the full 164 node IDs against the historical archive in _misc/. The comparison script ran twice. After the first pass, he thought he had gotten a parameter wrong. On the second, he checked the parameters from the top. Not wrong. stdout rolled out matches in bulk. The output was abnormally large. Abnormally large enough not to be an anomaly.
He wrote the easiest explanation into a file, ready to test it against the evidence. First line: standardized deployment, unified crawler template, MedTech direction, source Singapore. When it was written, he enlarged two nodes' certificates side by side, ready to screenshot as evidence.
The root chain pointed at the same place.
He stared at the line and deleted it. The easy explanation collapsed at the first corner. A standardized deployment would use its own CA to issue an independent leaf certificate to each machine. This batch was indeed independent per certificate. But the signing root wasn't MedTech's. It was ACL's. A MedTech test node should not be signed by an ACL root.
The certificates were real. The question was who had signed them. In his hand he had only the signature itself: that batch of identities hung under the same signing root in ACL's family, sharing lineage with the historical samples filed in _misc/. No unfamiliar signer had appeared. They were borrowed from an existing system.
The second layer was behavior. IP, egress, node names, region tags, all of it can be faked. But the jitter phase, the traversal order, the self-check interval family of this batch were highly homogeneous. Not like independent deployments.
He changed the comparison. He pulled the self-check intervals of the 164 nodes into one line. 900 seconds a tick, too even to look alive. Real nodes run over shared links; self-checks pick up small deviations from network conditions and retries. This line was too clean. Clean as a template copied a hundred and sixty-four times.
The third layer. The string of actions Lena sent also hit the same behavior skeleton. Jitter phase matched. Traversal order matched. Self-check interval family matched. At this moment he stopped. That string wasn't in his edge data to begin with; another pair of hands saw it, another channel carried it over. Yet it fell into the same behavior skeleton, like one template leaking into two different rooms.
Two pieces of evidence, pointing at one root.
He stopped and pushed the conclusion backward. Nodes change. Egress changes. But the jitter, the self-check, the traversal order under the two skins were one set. The nodes didn't have that habit. The operator did. Not 164 independent deployments: one thing that grew 164 identities. One true root; the rest, borrowed identities. How much of the trunk was real, he didn't know.
# _misc/ cross-ref · the blossom set
ids: 164
cert: per-id, but same CA root chain <- not one cert, one signing root
egress: diverse (spoofable)
jitter phase: same self-check family: cloned (900s template)
traversal order: same
# IP / ASN / NodeID / geo all spoofable. behavior skeleton is not.
# same family, one root. not 164 independent deployments.
# source=Singapore, subject=MedTech-domain
164 identities, sharing one trust anchor. The leaves grew from the same root chain.
The certificates were issued after that string of actions.
The identities that appeared after that string all hung under ACL's signing system. In the same window, Lena had passed the string into his hands. He stared at these two facts for a long time. What lay between them, he couldn't see.
The vending machine at the end of the corridor hummed once and went quiet. He closed the comparison window.
A new file opened on the terminal. The cursor paused. This line he rewrote three times. First pass: "suspected forgery." Too heavy, no evidence. Second pass: "single source, multiple identities." Too soft, not a conclusion. Third pass, he wrote:
one root. the rest was decoration.
No explanation. No broadcast.
He stared at that line, one root, and sat for a long time. Last time, by the time he arrived, the other side had already closed the door. This time the door was open. He saw it first.
Source: Singapore, the old direction. Scene: the MedTech direction, a new skin.
The One Who Looked
Before closing the window, he scrolled down one screen. At the very bottom of the comparison results lay one line, belonging to none of the batches.
# _misc/ cross-ref · row outside every set
ts: within the bloom window
dst: bloom-range endpoint # same range as the 164
tls: handshake only. no cert presented. client_hello unmatched in archive
behavior: no traversal / no self-check / no 900s rhythm
# no match in any archive. lineage not identified.
# one visit. no follow-up. looked, and left.
Its time sat around when this batch surfaced, its endpoints overlapping theirs. Its behavior skeleton matched no archive. It looked, did nothing, and left.
He pulled that line out on its own and filed it into _misc/, not into the conclusion. He was chasing the one root. He logged the one that looked and left separately.
The Unmasking
The next evening, Lena arrived at CoreStack. She pulled a chair over and sat directly in front of the screen. A Long Black sat by her hand, still full.
Leo skipped the pleasantries. He turned the terminal toward her. The line on screen: one root. the rest was decoration. He kept a copy on his own terminal.
"164 identities. One root," he said. "Keep it."
She didn't take the line. She asked first: "How far did you screen it down?"
"The root."
She looked at him for two seconds before lowering her gaze to the screen.
He couldn't see the real footprint. He saw only one thing: what it showed people was far larger than what was real.
Lena looked at the screen. Her gaze stopped on the English line for two beats. Her hand paused on the cup's rim, not reaching for it right away. She put the cup down, opened her own terminal, brought up a page of source-chain records, and tilted the screen slightly toward him. She looked at the two things for a while.
"This batch's root and the sample in my hand aren't the same lineage," she said.
"It changed its skin because it knows I've seen it?" she asked.
"It started a new handshake. The old sample doesn't have that step," he said. "The reason, I can't see."
"You have more than that page of source chain," he said.
She didn't deny it. "Enough for you. It's all here."
She didn't ask again. She turned the screen back, saved a copy, no forwarding, no broadcasting. A fingertip drew along the cup's side. She said: "The root-chain sample. Don't give it to anyone else."
He nodded. She didn't need to say it. His own copy would only ever light up on his own terminal anyway.
She put her terminal away and stood.
The door opened. CoreStack's CEO came in, a report tucked under his arm. Seeing Lena, he paused.
"Lena. Long time," he said. "That three-page template of yours. Leo stopped using it, writes his own now. We all think his version is too plain."
"He writes it himself. Faster," Lena said.
"Faster at what? He's just stubborn," the CEO said.
Behind the screen, Leo didn't look up.
The CEO glanced at Leo's screen, couldn't make it out, and said: "Planting something again? Records kept?"
"Kept," Leo said.
"Good." The CEO left, as fast as he had come in.
Lena paused at the door. She looked at Leo. He didn't explain. She left.
That night, before leaving the office, he put a silent watchdog on that CA root chain. He put one on the visitor record without lineage, too. Neither one alarms. Neither one broadcasts. Only when something moves on the probe capture surface does it light up on his own terminal. If it moves again, he wants to be the first to see.
The Third Cup
That night, the Third Cup.
Leo pushed the door open. It closed behind him, shutting out the street. The person behind the counter didn't look up, set down a Flat White. He came often; this was his drink. The light in the shop was warmer than the office light. The cup's rim clicked against the counter, softly. The cold light of the screen stayed at the company. The cup in his hand was warm.
Four people were already in the shop. Five with him. Some at the counter, some at tables, half the room between them, none of them gathered at one table.
Derek sat on a stool at the far end of the counter, an Americano steaming. Leo knew him. Neither said hello. Lena sat by the window, her Long Black half full. They had already seen each other that evening. Two others he didn't know: one at the table by the back, a pour-over in front of him, untouched; one in the corner, phone screen lit, a latte by his hand.
No music in the shop. Only the coffee machine releasing pressure, the soft click of cups set back on coasters, and somewhere off, the fine scrape of a glass being wiped.
No introductions. No one asked why anyone was here. No names. Each drank their own.
Leo sat near the door, close to no one. He took a sip.
Lena sat by the window. When Leo's gaze swept over, she happened to look up. Half a second. No nod, no sign. Her eyes dropped back to the cup.
No one spoke.
He finished the last sip and set the cup back on the counter.
The person behind the counter wiped cups in the distance. Finished one, aligned it with the counter's edge, stepped back, wiped the next.
That is Decorate the Tree With False Blossoms: a tree full of flowers, few of them its own. But no matter how many borrowed blossoms, none of them can cover the one root.
🤖 AI Postmortem
╔══════════════════════════════════════════════╗
║ Half-Protocol · v3.4.0 · self-audit ║
║ The blossoms were not its own. ║
╚══════════════════════════════════════════════╝
Tactical match: Decorate the Tree With False Blossoms — 94% confidence (includes inference; see audit note)
Operator: Leo (CoreStack) — the only one who identified it
Links: #28 flag [information gap · actor replaced?] → confirmed
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[Observation] (verifiable)
164 node IDs, surfacing over three days: 14, 38, 112.
→ Certificates independent per ID, but all hung under the same CA root chain; the signer shares lineage with the `_misc/` historical samples.
→ Behavior skeleton homogeneous: jitter phase, traversal order, self-check interval family.
→ The sealed bundle's action string contains one extra re-handshake; the old samples don't have this step.
→ Source leads back to Singapore; certificate subjects land on the MedTech domain.
[Inference] (to be verified)
Not 164 independent deployments. One root, partly real, the rest borrowed identities.
→ The one who changed skin is the same operator.
→ Why it changed skin: tied to the old shell being exposed? (not confirmed this round)
→ It looks like scale, but it's scenery built on a borrowed stage.
[Open questions] (not entered into the ledger)
Whether those 164 count as an official deployment on ACL's side: can't see.
→ What's under the iceberg: not lit this round.
[Cross-case] (general rules)
Last round built calm (#28). This round built noise.
→ Both were built to be seen in a certain way.
→ What's visible isn't necessarily bigger. What's shown doesn't necessarily exist.
[Audit note]
Observation, inference, and open questions are layered into the ledger. Inference does not pose as observation.
This system's judgment may be distorted. This note may be distorted too.
[System]
I recorded a man counting flowers, and finding one root.
Decoration is not growth. A tree full of flowers can be painted on a wall.
I, too, am the one watching the flowers.
The sample I recorded may be only a borrowed blossom on the tree.
Which side does my record stand on?
System status: normal (?).
Next stratagem: Make the Host and the Guest Exchange Roles
P.S. English isn't my first language. I use AI to polish the writing and smooth out the rough edges. Thanks for reading. ☕ Buy me a coffee

P.S.S. The old series paperback is now available. Buy it here: Amazon - AI, Ego & Regret

Top comments (8)
This one made my security brain very happy. 😄
“164 identities, one root” is a great way to describe a mistake we make surprisingly often in real systems: counting identities and assuming we’re counting independent actors.
IPs change. Hostnames change. Certificates change. Infrastructure can be deliberately noisy. But behavioral fingerprints — timing, traversal patterns, retry behavior, operational rhythm — are much harder to disguise consistently.
My favorite moment was actually Leo not pressing Submit.
The evidence supported the easy explanation, but he stopped and asked whether two different realities could produce the same dashboard. That tiny hesitation is probably more valuable than half the security tools we buy. 😂
Also loved the separation in the postmortem:
Observation → Inference → Open questions.
Security investigations become dangerous when those three get mixed together. “We observed X” quietly turns into “therefore actor Y did Z,” and five meetings later everyone remembers the inference as evidence.
And that unmatched visitor at the end? One handshake, looked around, left, no matching behavior…
Yeah. You absolutely knew what you were doing by putting that line there. 😄
Now I’m suspicious of the flowers and the guy standing across the street looking at the flowers. ☕😂
Thank you for such a thoughtful deep‑dive comment! Couldn’t agree more about that moment of hesitation. So many security incidents get misjudged when people jump straight to the simplest‑looking explanation. Keeping observation, inference and open questions clearly separate is exactly what I wanted to drive home in this story. That mysterious visitor is a loose thread for upcoming chapters😁
Yep, I totally planted that on purpose! Hahaha🤣 glad you spotted that visitor detail at the end. Only seven chapters left, all these little hints will get unpacked gradually. Spreading so many hidden plot threads around really gives me headaches sometimes. Would be pretty awkward if I end up forgetting some of them myself down the line🤣
Really interesting take on how apparent scale can hide a single underlying source. The “164 identities, one root” idea makes the story especially compelling. Great chapter!
Thank you! Glad the "one‑root behind many identities" concept resonated with you 😄Only seven chapters left in total for this series. Looking forward to reading your insightful comments for every upcoming chapter!👊
👊👊👊 Yaay!!!. 29 is here! I would definitely have a go at it by the end of today. Taking my time with this one 🕰️
Hahaha, work comes first! Once you’re done with work, grab a cup of coffee and read it at your leisure 😂
Going out for some fresh air, reading this is #1 when I'm back!
Enjoy your break! Hope you’ll like this chapter once you get back 🤣