Skip to content
View disafronov's full-sized avatar

Block or report disafronov

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
disafronov/README.md

Hi there 👋

My name is Dmitrii Safronov.

I build systems that survive their creators.

Repositories are artifacts. The interesting part is the topology between them.

Engineering principles

Constraints

  • Contracts must be explicit and enforceable
  • Configuration is part of the system contract
  • Operational behavior must be observable

System properties

  • Portability is a system property
  • Observability is architecture, not tooling
  • Schemas are operational artifacts
  • Configuration is validated before execution

Operational assumptions

  • Applications should not depend on reading their own runtime state
  • Integration boundaries must be explicit
  • State minimization is preferred over state synchronization
  • Invalid configuration must fail fast

Systems and tooling by theme

Template propagation

To avoid maintaining shared workflows and configurations separately across repositories, changes are propagated through a hierarchy of versioned templates.

Dedicated synchronizers handle propagation, shown as edge labels in the diagram below.

flowchart TB
    BT["basic-template"]
    SBT["semantic-basic-template"]

    SST["semantic-shell-template"]
    SDT["semantic-docker-template"]
    ART["ansible_role-template"]
    APT["ansible_project-template"]
    ULT["update_lists-template"]
    TST["template_sync-template"]

    BT -->|"template_sync-basic"| SBT

    SBT -->|"template_sync-semantic-basic"| SST
    SBT -->|"template_sync-semantic-basic"| SDT
    SBT -->|"template_sync-semantic-basic"| ART
    SBT -->|"template_sync-semantic-basic"| APT
    SBT -->|"template_sync-semantic-basic"| ULT
    SBT -->|"template_sync-semantic-basic"| TST

    SBT -->|"template_sync-semantic-basic"| OM["opencode-memoir"]
    SBT -->|"template_sync-semantic-basic"| DJ["django-telegram-q2"]
    SBT -->|"template_sync-semantic-basic"| OH["omniroute-hybrid-setup"]
    SBT -->|"template_sync-semantic-basic"| BM["… other repositories"]

    SST -->|"template_sync-semantic-shell"| SIMPLE["simple-sandbox"]
    SST -->|"template_sync-semantic-shell"| SHELL["shell-tools"]
    SST -->|"template_sync-semantic-shell"| SM["… other repositories"]

    SDT -->|"template_sync-semantic-docker"| SK["skilled"]
    SDT -->|"template_sync-semantic-docker"| DM["… other repositories"]

    ART -->|"template_sync-ansible_role"| ROLES["Ansible roles · …"]
    APT -->|"template_sync-ansible_project"| PROJECTS["Ansible projects · …"]

    ULT -->|"update_list-sync"| LISTS["List consumers · …"]

    TST -->|"template_sync"| TS["template_sync-*"]
    TST -->|"template_sync-template_sync"| TSM["Other synchronizers · …"]

    classDef template fill:#dbeafe,stroke:#2563eb,color:#1e3a8a,stroke-width:2px
    classDef receiver fill:#f3f4f6,stroke:#9ca3af,color:#111827

    class BT,SBT,SST,SDT,ART,APT,ULT,TST template
    class OM,DJ,OH,BM,SIMPLE,SHELL,SM,SK,DM,ROLES,PROJECTS,LISTS,TS,TSM receiver
Loading

Latest blog posts

Pinned Loading

  1. python-logging-objects-with-schema python-logging-objects-with-schema Public

    Schema-aware Python logging with strict extra validation and schema-driven field projection.

    Python

  2. sloths-inventory sloths-inventory Public

    Equipment inventory with an append-only operation journal, controlled transfers, and scoped history access.

    Python

  3. opencode-memoir opencode-memoir Public

    OpenCode integration for Memoir with project-scoped MCP and automatic conversation capture.

    TypeScript 2 1

  4. etl-prometheus2clickhouse etl-prometheus2clickhouse Public

    Resumable Prometheus → ClickHouse ETL with persistent progress and storage-layer deduplication.

    Python

  5. template_sync-template template_sync-template Public template

    Template for GitHub Actions synchronizers that propagate selected paths and deletions across repositories.

  6. simple-sandbox simple-sandbox Public

    Lightweight, unprivileged Linux sandboxing with bubblewrap, filesystem isolation, and configurable path policies.

    Shell