Commits

f71bacca4bd096bccbcfc3c48ed4b42f9b964008
Switch branches/tags

Commits on May 10, 2026

  1. Matthew Forrester Wolffe committed
  2. mfwolffe committed
  3. espadonne committed
  4. mfwolffe committed
  5. Merge pull request #77 from tenseleyFlow/repo-source-remotes
    Add source remotes for submodule imports
    espadonne committed
  6. mfwolffe committed
  7. mfwolffe committed
  8. mfwolffe committed
  9. mfwolffe committed
  10. mfwolffe committed
  11. Matthew Forrester Wolffe committed
  12. Merge pull request #75 from tenseleyFlow/s41c/secrets-variables
    S41c-1: actions secrets and variables settings
    Matthew Forrester Wolffe committed
  13. mfwolffe committed
  14. mfwolffe committed
  15. mfwolffe committed
  16. actions/secrets: store test suite — 10 cases covering encryption + scope + citext (S41c)
    - TestSet_RoundTripsThroughSecretbox: set → get → plaintext matches.
      - TestSet_OverwriteOnSameName: UPSERT semantics.
      - TestSet_InvalidNameRejected: regex enforcement (5 bad names).
      - TestSet_EmptyValueRejected: nil/empty plaintext.
      - TestSet_InvalidScopeRejected: zero AND both-set scope.
      - TestList_NamesAndMetadataOnly: load-bearing — listing has no
        plaintext or ciphertext exposed; the public surface can't leak.
      - TestDelete_RemovesRow + TestDelete_MissingIsIdempotent.
      - TestGet_CitextNameIsCaseInsensitive: pins citext semantics.
      - TestCiphertext_IsActuallyEncryptedInDB: the spec called this out
        explicitly. Reads the bytea column directly via SQL and asserts
        the plaintext substring doesn't appear anywhere — would catch a
        silent regression to plaintext-storage.
    mfwolffe committed
  17. actions/secrets: store orchestrator with secretbox round-trip (S41c)
    Set/Get/List/Delete over workflow_secrets. Plaintext is sealed via
    internal/auth/secretbox (ChaCha20Poly1305 AEAD) before INSERT;
    ciphertext + nonce live in the bytea columns. Plaintext never lives
    in postgres.
    
    Scope is a small XOR struct (RepoID xor OrgID); the table CHECK
    mirrors it. Helpers RepoScope/OrgScope keep the XOR honest at call
    sites — no struct-literal traps.
    
    Public API:
      Deps.Set(ctx, scope, name, plaintext, createdBy) error
      Deps.Get(ctx, scope, name) ([]byte, error)
      Deps.List(ctx, scope) ([]Meta, error)         — names+metadata, no value
      Deps.Delete(ctx, scope, name) error            — idempotent
    
    Get() is for the runner-side claim resolver only (S41c-2). Web UI
    consumes List() — public listing surface deliberately can't reach
    plaintext or ciphertext.
    
    Errors mapped:
      ErrInvalidScope — programmer error (zero or both scope fields)
      ErrInvalidName  — name regex/length cap mismatch (mirrors DB CHECK)
      ErrEmptyValue   — empty plaintext (operators usually mean delete)
      ErrNotFound     — no row for (scope, name)
    mfwolffe committed
  18. Merge pull request #71 from tenseleyFlow/s41b/trigger-pipeline
    S41b: trigger pipeline → enqueue runs (stuck queued)
    Matthew Forrester Wolffe committed
  19. espadonne committed
  20. mfwolffe committed
  21. Matthew Forrester Wolffe committed
  22. mfwolffe committed
  23. mfwolffe committed
  24. mfwolffe committed