Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AI-Native_Codebases_-_GIDS.pdf

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Ragunath Jawahar Ragunath Jawahar
April 21, 2026
1

 AI-Native_Codebases_-_GIDS.pdf

Avatar for Ragunath Jawahar

Ragunath Jawahar

April 21, 2026

More Decks by Ragunath Jawahar

Transcript

  1. 01 Mechanized Comprehension Understand software systems through tooling that extracts

    structure, history, meaning, and intent from code at scale. 02 Mechanized Veri fi cation Verify software changes deterministically as they happen. 03 Mechanized Remediation Identify and resolve structural decay and technical debt through tool-assisted intervention over expensive rewrites. 04 Directed Evolution Deliberately evolve software toward new behavior through continuous, traceable, and guided transformation.
  2. 01 Mechanized Comprehension Understand software systems through tooling that extracts

    structure, history, meaning, and intent from code at scale. 02 Mechanized Veri fi cation Verify software changes deterministically as they happen. 03 Mechanized Remediation Identify and resolve structural decay and technical debt through tool-assisted intervention over expensive rewrites. 04 Directed Evolution Deliberately evolve software toward new behavior through continuous, traceable, and guided transformation.
  3. 01 Mechanized Comprehension Understand software systems through tooling that extracts

    structure, history, meaning, and intent from code at scale. 02 Mechanized Veri fi cation Verify software changes deterministically as they happen. 03 Mechanized Remediation Identify and resolve structural decay and technical debt through tool-assisted intervention over expensive rewrites. 04 Directed Evolution Deliberately evolve software toward new behavior through continuous, traceable, and guided transformation.
  4. 01 Mechanized Comprehension Understand software systems through tooling that extracts

    structure, history, meaning, and intent from code at scale. 02 Mechanized Veri fi cation Verify software changes deterministically as they happen. 03 Mechanized Remediation Identify and resolve structural decay and technical debt through tool-assisted intervention over expensive rewrites. 04 Directed Evolution Deliberately evolve software toward new behavior through continuous, traceable, and guided transformation.
  5. 01 Mechanized Comprehension Understand software systems through tooling that extracts

    structure, history, meaning, and intent from code at scale. 02 Mechanized Veri fi cation Verify software changes deterministically as they happen. 03 Mechanized Remediation Identify and resolve structural decay and technical debt through tool-assisted intervention over expensive rewrites. 04 Directed Evolution Deliberately evolve software toward new behavior through continuous, traceable, and guided transformation.
  6. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  7. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  8. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  9. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  10. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  11. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  12. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  13. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  14. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  15. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  16. ⚠ These are not levels. They are modes of operation.

    Where you operate depends on your goals, your organization's goals and available resources.
  17. Steve Yegge’s Evolution of the Programmer in 2024–2026 Source: h

    tt ps://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04
  18. Single Agent x Single Codebase • Default operation mode for

    most teams • Costs are predictable • Bo tt lenecks • Structure • Comprehension • Guardrails: linters, forma tt ers, tests, git hooks, etc., • Fast feedback loops
  19. Multiple Agents x Single Codebase (1/2) • Everything from “Single

    Agent x Single Codebase” are table stakes • Parallelization • Task decomposition and sequencing • Clear boundaries so agents don't step on each other • Codebase must support multiple agents • Safety • Con fl icting changes across agents • Merge coordination
  20. Multiple Agents x Single Codebase (2/2) • Veri fi cation

    • Multiple streams of changes need checking • Becomes a bo tt leneck, not just a step • Context switching • Tracking long-running work across agents • Resumability on failure — can another agent pick up where one left o ff ? • Costs compound • Coordination overhead • Failed runs and duplicated work
  21. Orchestrated Hierarchy x Single Codebase (1/2) • Everything from “Multiple

    Agents x Single Codebase” are table stakes • Backlog becomes a constraint • Who de fi nes the work? • Can work be decomposed fast enough to keep agents fed? • Veri fi cation at scale • Verifying combined output of many agents on interconnected tasks • Not just "does it work" but "is this what we wanted” • Work fl ows with specialized (sub)agents
  22. Orchestrated Hierarchy x Single Codebase (2/2) • Organization becomes the

    bo tt leneck • Decision-making speed • Ownership and accountability • Organizational readiness, not just technical readiness • Costs compound • Orchestrator consumes tokens to understand, decompose, and dispatch • Every subagent consumes tokens • Long-running tasks accumulate spend over hours or days • Failed orchestration runs are expensive
  23. Orchestrated Hierarchy x Single Codebase (2/2) • Organization becomes the

    bo tt leneck • Decision-making speed • Ownership and accountability • Organizational readiness, not just technical readiness • Costs compound • Orchestrator consumes tokens to understand, decompose, and dispatch • Every subagent consumes tokens • Long-running tasks accumulate spend over hours or days • Failed orchestration runs are expensive
  24. Single Agent x Multiple Codebases (1/2) • Everything from “Single

    Agent x Single Codebase” are table stakes • Coherence and topology ma tt er a lot • Agent needs to switch between repos • Costs are predictable but needs careful management • Context loading per repo • Agent spends tokens orienting itself in each codebase
  25. Single Agent x Multiple Codebases (2/2) • Repo topologies ma

    tt er • Monorepo — shared tooling and conventions, but scale challenges • Composable (local) monorepo using git submodules — modular but complex • The topology choice a ff ects what agents can see and do
  26. Multiple Agents x Multiple Codebases (1/2) • Agent-per-repo or agents-across-repos

    • Shared guardrails across codebases • Cross-repo feedback loops • Symlinks for agent-agnostic instructions and skills • One source of truth for agent con fi guration • Di ff erent agents expect di ff erent fi le locations • Symlinks solve this without duplication
  27. Multiple Agents x Multiple Codebases (2/2) • Costs multiply across

    repos • Coordination overhead now spans codebases • A failure in one repo can block work in another
  28. Orchestrated Hierarchy x Multiple Codebases • Orchestrator must comprehend the

    system of systems • Dispatching work across repos, not just across tasks • Every repo must be AI-native independently • Shared protocols for intent, structure, and veri fi cation • Costs compound at the system level • Orchestrator overhead across repos • Veri fi cation across repo boundaries • Failed runs can cascade across codebases
  29. The Full Picture • Moving across operational modes is not

    just a technical shift • It's both a skill and an organizational issue • Shifts in how software is built, maintained, and deployed • Training and evangelism • AI costs (tokens, tooling, platforms) • Organizations must invest in infrastructure • These problems are real and vary organizations
  30. What We Can Talk About: The Foundation 1. Structure 2.

    Behavior 3. Veri fi cation 4. Topology
  31. Why Structure? • Structure and behavior are both inherent to

    software • We've always con fl ated the two • Structure is invisible by default • Behavior can always change — if structure allows it • AI-native codebases aggravate the issue
  32. Structure & Boundaries • You can't pay a tt ention

    to everything • External boundaries • Internal boundaries • Layer boundaries • Feature boundaries • Extension boundaries • Understanding the boundaries is understanding the system
  33. types.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, }
  34. types.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, }
  35. types.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, }
  36. types.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, }
  37. types.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, }
  38. types.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, }
  39. library_repository.rs pub trait LibraryRepository { fn find_by_isbn(&self, isbn: &str) ->

    Result<Book, RepositoryError>; fn find_by_author(&self, author: &Author) -> Result<Vec<Book>, RepositoryError>; fn save(&self, book: &Book) - > Result<(), RepositoryError>; } #[derive(Debug)] pub enum RepositoryError { . .. } pub struct PostgresLibraryRepository { ... } impl PostgresLibraryRepository { ... }
  40. library_repository.rs pub trait LibraryRepository { fn find_by_isbn(&self, isbn: &str) ->

    Result<Book, RepositoryError>; fn find_by_author(&self, author: &Author) -> Result<Vec<Book>, RepositoryError>; fn save(&self, book: &Book) - > Result<(), RepositoryError>; } #[derive(Debug)] pub enum RepositoryError { . .. } pub struct PostgresLibraryRepository { ... } impl PostgresLibraryRepository { ... }
  41. library_repository.rs pub trait LibraryRepository { fn find_by_isbn(&self, isbn: &str) ->

    Result<Book, RepositoryError>; fn find_by_author(&self, author: &Author) -> Result<Vec<Book>, RepositoryError>; fn save(&self, book: &Book) - > Result<(), RepositoryError>; } #[derive(Debug)] pub enum RepositoryError { . .. } pub struct PostgresLibraryRepository { ... } impl PostgresLibraryRepository { ... }
  42. library_repository.rs pub trait LibraryRepository { fn find_by_isbn(&self, isbn: &str) ->

    Result<Book, RepositoryError>; fn find_by_author(&self, author: &Author) -> Result<Vec<Book>, RepositoryError>; fn save(&self, book: &Book) - > Result<(), RepositoryError>; } #[derive(Debug)] pub enum RepositoryError { . .. } pub struct PostgresLibraryRepository { ... } impl PostgresLibraryRepository { ... }
  43. library_repository.rs pub trait LibraryRepository { fn find_by_isbn(&self, isbn: &str) ->

    Result<Book, RepositoryError>; fn find_by_author(&self, author: &Author) -> Result<Vec<Book>, RepositoryError>; fn save(&self, book: &Book) - > Result<(), RepositoryError>; } #[derive(Debug)] pub enum RepositoryError { . .. } pub struct PostgresLibraryRepository { ... } impl PostgresLibraryRepository { ... }
  44. library_repository.rs pub trait LibraryRepository { fn find_by_isbn(&self, isbn: &str) ->

    Result<Book, RepositoryError>; fn find_by_author(&self, author: &Author) -> Result<Vec<Book>, RepositoryError>; fn save(&self, book: &Book) - > Result<(), RepositoryError>; } #[derive(Debug)] pub enum RepositoryError { . .. } pub struct PostgresLibraryRepository { ... } impl PostgresLibraryRepository { ... }
  45. library_repository.rs pub trait LibraryRepository { fn find_by_isbn(&self, isbn: &str) ->

    Result<Book, RepositoryError>; fn find_by_author(&self, author: &Author) -> Result<Vec<Book>, RepositoryError>; fn save(&self, book: &Book) - > Result<(), RepositoryError>; } #[derive(Debug)] pub enum RepositoryError { . .. } pub struct PostgresLibraryRepository { ... } impl PostgresLibraryRepository { ... }
  46. library_repository.rs pub trait LibraryRepository { fn find_by_isbn(&self, isbn: &str) ->

    Result<Book, RepositoryError>; fn find_by_author(&self, author: &Author) -> Result<Vec<Book>, RepositoryError>; fn save(&self, book: &Book) - > Result<(), RepositoryError>; } #[derive(Debug)] pub enum RepositoryError { . .. } pub struct PostgresLibraryRepository { ... } impl PostgresLibraryRepository { ... }
  47. types.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, }
  48. library_repository.rs pub trait LibraryRepository { fn find_by_isbn(&self, isbn: &str) ->

    Result<Book, RepositoryError>; fn find_by_author(&self, author: &Author) -> Result<Vec<Book>, RepositoryError>; fn save(&self, book: &Book) - > Result<(), RepositoryError>; } #[derive(Debug)] pub enum RepositoryError { . .. } pub struct PostgresLibraryRepository { ... } impl PostgresLibraryRepository { ... }
  49. types.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, }
  50. author.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, } book.rs
  51. author.rs #[derive(Debug, Clone, PartialEq, Eq)] pub struct Author { pub

    id: String, pub name: String, } #[derive(Debug, Clone)] pub struct Book { pub id: String, pub title: String, pub author: Author, pub isbn: String, } book.rs
  52. Choosing The Right Resolution Type-level vs. File-level Dependency Graphs •

    Complementary choices, not replacements • Same system, di ff erent questions and answers • File names are the native unit • Fidelity depends on fi le cohesion • Design becomes a veri fi able property • Resolution is a modeling choice, not a reduction
  53. What We Can Talk About: The Foundation 1. Structure 2.

    Behavior 3. Veri fi cation 4. Topology
  54. What is Clarity? • Clarity is a software design tool

    for AI-native developers and coding agents • Generates fi le-level dependency graph • Allows various levels of scoping (working directory, commits, directories, fi les, etc.,) • Supports 15 programming languages • Use Cases • View structural changes in real-time • Comprehend code • Refactor safely • Allow agents to verify their own structural changes
  55. Structure & Boundaries • You can't pay a tt ention

    to everything • External boundaries • Internal boundaries • Layer boundaries • Feature boundaries • Extension boundaries • Understanding the boundaries is understanding the system
  56. How to verify Rust support? • Run tool against a

    real-world codebase • Choose a repository • Select commits for veri fi cation • Run the clarity command to generate dependency graph • Visually inspect the graph for anomalies • Fix discovered bugs • Rebuild and rerun the tool to verify the fi x
  57. How to verify Rust support? • ⚙ Run tool against

    a real-world codebase • ⚙ Choose a repository • ⚙ Select commits for veri fi cation • ⚙ Run the clarity command to generate dependency graph • 👩 Visually inspect the graph for anomalies • ⚙ Fix discovered bugs • ⚙ Rebuild and rerun the tool to verify the fi x
  58. SKILL.md (truncated) - - - name: verify-language-support description: End-to-end workflow

    for validating language support changes in the clarity dependency graph analyzer - - - Use this workflow to validate language support end-to-end in `clarity`. ## Prepare 1. Identify the target language module under `depgraph/<language>/`. 2. Identify affected command output in `cmd/languages/` when maturity level changes. 3. Confirm current local changes with `git status - - short`. ## Validate on a Real Repository (Always Interactive) 1. Pick a representative repo for the language. 2. Clone into `/tmp`. 3. Build a review queue before rendering graphs: - Use non-merge commits only. - Use commits with `5-30` changed files. - Prioritize commits that are mostly about the target language (based on file extensions/paths). - Each selected commit should include at least a few files in the target language (minimum 3 unless unavailable). - Default queue size is 10 commits unless the user requests a different count. 4. Show the queue to the user before starting graph renders.
  59. Why? • Agent-agnostic con fi guration • One source of

    truth • Discoverability across agents
  60. Directory Structure . ├── .gitmodules ├── AGENTS.md # root-level agent

    instructions ├── CLAUDE.md -> AGENTS.md # symlink ├── monorepo.project # signpost │ └── arena/ ├── AGENTS.md ├── CLAUDE.md - > AGENTS.md # symlink ├── arena.project # signpost │ ├── arena-cli/ # git submodule │ ├── AGENTS.md │ ├── CLAUDE.md - > AGENTS.md # symlink │ ├── arena-cli.project # signpost │ ├── Cargo.toml │ └── src/ │ └── arena-core/ # git submodule ├── AGENTS.md ├── CLAUDE.md - > AGENTS.md # symlink ├── arena-core.project # signpost ├── Cargo.toml └── src/
  61. Directory Structure (Symlinks) . ├── .gitmodules ├── AGENTS.md # root-level

    agent instructions ├── CLAUDE.md -> AGENTS.md # symlink ├── monorepo.project # signpost │ └── arena/ ├── AGENTS.md ├── CLAUDE.md - > AGENTS.md # symlink ├── arena.project # signpost │ ├── arena-cli/ # git submodule │ ├── AGENTS.md │ ├── CLAUDE.md - > AGENTS.md # symlink │ ├── arena-cli.project # signpost │ ├── Cargo.toml │ └── src/ │ └── arena-core/ # git submodule ├── AGENTS.md ├── CLAUDE.md - > AGENTS.md # symlink ├── arena-core.project # signpost ├── Cargo.toml └── src/
  62. Directory Structure (Signposts) . ├── .gitmodules ├── AGENTS.md # root-level

    agent instructions ├── CLAUDE.md -> AGENTS.md # symlink ├── monorepo.project # signpost │ └── arena/ ├── AGENTS.md ├── CLAUDE.md - > AGENTS.md # symlink ├── arena.project # signpost │ ├── arena-cli/ # git submodule │ ├── AGENTS.md │ ├── CLAUDE.md - > AGENTS.md # symlink │ ├── arena-cli.project # signpost │ ├── Cargo.toml │ └── src/ │ └── arena-core/ # git submodule ├── AGENTS.md ├── CLAUDE.md - > AGENTS.md # symlink ├── arena-core.project # signpost ├── Cargo.toml └── src/
  63. What We Can Talk About: The Foundation 1. Structure 2.

    Behavior 3. Veri fi cation 4. Topology
  64. Wrapping up • Modes, not levels • The Pillars of

    AI-Native Codebases • Structure • Behavior • Veri fi cation • Topology
  65. An AI-native codebase isn't a codebase with AI bolted on.

    It's a codebase where structure, behavior, veri fi cation, and topology are designed so agents can contribute as fi rst- class collaborators.