Skip to content

Synthing Phase 1 β€” MVP Core ScopeΒ #1

@mildronize

Description

@mildronize

🎯 Goal

Build the first working release of Synthing as a framework-agnostic, library-first orchestration core for secure secret management.

This phase focuses purely on single SecretManager usage, providing Connectors, Providers, Secret Injection, and secure secret application flows.

βœ… No multi-environment plans, no hydration flows, no snapshotting in Phase 1.

🎯 Success Criteria for Phase 1 Completion

βœ… Synthing is published as an independent library (npm)
βœ… Kubricate migrates to use Synthing internally for secret management
βœ… Kubricate fully removes its own internal /secrets/ module

When Kubricate runs secret workflows (useSecrets(), generate, secrets apply) through Synthing without owning any secret orchestration code itself, Phase 1 is complete.

βœ… Scope of Phase 1

Core Modules

  • SecretManager
  • SecretInjectionBuilder
  • SecretsInjectionContext
  • SecretsOrchestrator (support only intraProvider and crossProvider merges)
  • SecretRegistry (internal, hidden from user for now)

Connectors & Providers (Core Abstractions)

  • BaseConnector
  • InMemoryConnector (for testing)
  • BaseProvider
  • InMemoryProvider (for testing)

Config API

  • defineConfig() supporting:
    export default defineConfig({
      secrets: {
        manager: mySecretManager,
      },
    });
  • Internally auto-wrap into a hidden SecretRegistry keyed as 'default'.

Merge & Conflict Behavior

  • autoMerge support within the same provider (intraProvider)
  • error strategy for crossProvider conflicts
  • Proper overwrite logging for secret conflicts
  • Canonical identifier tracking (provider/manager:secretName)

Minimal CLI (Optional)

  • synthing secrets apply β€” apply to target provider
  • synthing generate β€” trigger generator output (if provided in config)

CLI is optional and exists only for small standalone usage.
Frameworks like Kubricate will wrap Synthing programmatically.

Testing

  • Unit tests for each module
  • Integration tests using InMemoryConnector + InMemoryProvider
  • Test secret merge scenarios (conflict, overwrite, success)

❌ Out of Scope (Phase 2+)

  • ❌ Hydration flows (Env β†’ Vault)
  • ❌ Plan synthesis, matrix generation
  • ❌ Snapshot history & drift detection
  • ❌ Multi-manager user-facing Registry

πŸ“¦ Target Directory Structure

/packages/core/
  /secrets/
    /manager/
      SecretManager.ts
    /injectors/
      SecretInjectionBuilder.ts
    /context/
      SecretsInjectionContext.ts
    /orchestrator/
      SecretsOrchestrator.ts
    /connectors/
      BaseConnector.ts
      InMemoryConnector.ts
    /providers/
      BaseProvider.ts
      InMemoryProvider.ts
    /registry/
      SecretRegistry.ts
    /types/
      secret-types.ts
  defineConfig.ts

πŸ”₯ Summary

Synthing Phase 1 is considered achieved when Synthing is published as a standalone library and Kubricate consumes it internally, fully removing its previous /secrets/ module.

✨ Next Step

  • Create milestone: Synthing v0.1.0 - Core Orchestration MVP
  • Break Phase 1 into PR-sized issues (e.g., Implement SecretManager, Implement Orchestrator)
  • Scaffold base repo structure for @synthing/core

βœ… Now your Phase 1 is not just about code completion, it’s about real platform adoption (Kubricate switching over).
t!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions