mohd-faraz

_blogs

// blogs / 20260722.md

Dev Log: July 22 Wrap-up

2026-07-22
#python#workflow-engine#json-parsing#backend

Overview

Today was mostly about tightening up how data moves through our workflow engine. I spent a good chunk of time dealing with variable interpolation, cleaning up what we actually store in our logs, and fixing some session identification logic that was getting a bit tangled.

What I Worked On

Making data mapping smarter

I spent a lot of time on the email node today. We needed a way to let users reach deep into their data payloads using a {{payload.key}} syntax. It sounds simple on paper, but when you're dealing with nested dictionaries and stringified JSON that needs to be parsed on the fly, it gets recursive pretty quickly.

I implemented a "smart unwrap" logic that detects if a value is a JSON string and automatically parses it so the user can keep traversing the path. It’s a nice quality-of-life win—it saves the user from having to manually add a parsing node before every single email action.

Keeping the logs lean

Our logs were getting way too noisy. I realized we were trying to serialize objects that really have no business being in a JSON log—specifically heavy session resources and internal tool objects that were bloating the storage. I updated our serialization utility to explicitly skip these keys.

def sanitize_for_logging(obj):
    # We don't need to log raw session resources or internal pointers
    if isinstance(obj, dict):
        return {k: sanitize_for_logging(v) for k, v in obj.items() 
                if k not in ('internal_session_ref', 'tool_buffer')}
    elif isinstance(obj, list):
        return [sanitize_for_logging(item) for item in obj]
    return obj

AI Agent Memory & Session Headers

I decided to disable a generic fallback mechanism in our AI agent nodes. Previously, if the system couldn't find a specific user identifier, it would default to a guest session. That was causing some weird cross-talk in the memory banks during testing. Now, it’s much stricter—if the session header isn't clean, it errors out early rather than guessing. It’s a bit more rigid, but it beats having the AI hallucinate context from a different user's history.

Wrapping Up

It feels good to have the data flow feeling a bit more robust. Tomorrow I’m planning to dive back into the UI side to make sure these new nested payload options actually look decent in the front-end editor. Catch you then.