Commits

0056ee6a76180aa62ebee2b0f5c7112410c9388f
Switch branches/tags

Commits on May 10, 2026

  1. mfwolffe 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
  25. espadonne committed
  26. mfwolffe committed
  27. actions/trigger + scripts: gofumpt + drop unused placeholder + lint-unused bash 3.2 shim (S41b)
    - gofumpt fixes across the trigger package + dispatch handler
      - drop the stale 'startedAtNow' placeholder var in enqueue.go that
        the lint-unused script flagged as a dead 'silence unused import'
        shim (it was originally a hint for S41c+, but never used)
      - scripts/lint-unused.sh: ${ALLOWED_FILES[@]:-} so an empty
        array doesn't trip set -u under macOS bash 3.2
    mfwolffe committed
  28. docs: trigger pipeline section in actions-schema.md (S41b)
    Documents the three-layer flow (caller → worker → enqueue), the
    trigger_event_id idempotency convention with the per-caller
    construction table, the per-event-kind match semantics + glob
    subset, the conservative collaborator gate decision, and the
    workflow_dispatch HTTP surface. Calls out the S41b/S41b-2 split
    and what's deliberately out of scope until S41c+.
    mfwolffe committed