Skip to content

feat(studio): server-side ownership enforcement + org rename (CS-76 phase C) - #38

Merged
RudneyForti merged 1 commit into
mainfrom
feature/76-roadmap-enforcement
Aug 3, 2026
Merged

feat(studio): server-side ownership enforcement + org rename (CS-76 phase C)#38
RudneyForti merged 1 commit into
mainfrom
feature/76-roadmap-enforcement

Conversation

@RudneyForti

Copy link
Copy Markdown
Collaborator

Summary

Final phase of CS-76. The lock on git-owned cards becomes real: the server re-reads the authoritative git state on every save and refuses any local-column write on a CS that GitHub owns. Also renames the repo slug after the transfer to the limiarcore org, and rewrites the roadmap contract in AGENTS.md.

Changes

  • Server-side enforcementsaveKanbanBoard computes the git-owned set (merged cards + open-PR cards) from GitHub, never from the submitted payload, and rejects violations. Closes the corruption path where a stale tab could overwrite a merged card's annotation satellite with pre-promotion data.
  • Case normalization — CS keys compared case-insensitively; board files write CS-37b while PR titles may say CS-37B, and an exact match would have let a write slip past.
  • UI honesty — the refusal surfaces as an error banner with a reload action, rather than leaving optimistic state that was never persisted.
  • Org renameGITHUB_REPO_SLUG is now the single source for the repo (limiarcore/Lyfx), consumed by both the API client and the card PR links. Repo transfer was a one-line change.
  • AGENTS.md — roadmap discipline rewritten for the dual-source board: the two sources and their write rules, the automated Revisão (PR opened) and Concluídas (PR merged) transitions, promotion + annotation satellites, and a new mandatory rule forbidding hand-edits to docs/cs-board.json.

Verification

Browser round-trip on 3000, then state restored to exactly as found:

  • Legitimate local write still persists (no false rejection from the gate) — card created, survived reload, then removed
  • Git-owned card: draggable=false, modal fieldset disabled
  • Add-card buttons present on exactly the 3 local columns, none on Revisão/Concluídas
  • PR links now resolve to limiarcore/Lyfx

Checklist

  • Link to feature/issue: CS-76
  • Description of changes included above
  • List of additions documented
  • All existing tests are passing (113)
  • New tests were added for this change (6 enforcement cases incl. case-mismatch and the fallback path; PR-link source)
  • Agent Smith validated behavior
  • No regressions observed

References

CS-76 (phase C of 3 — completes the dual-source roadmap; unblocks the v1.16.0 release)

…hase C)

- saveKanbanBoard refuses any local-column write on a CS that GitHub owns,
  re-reading the authoritative git state (cached) instead of trusting the
  payload — a stale tab can no longer overwrite an annotation satellite
- findOwnershipViolations/gitOwnedCsNumbers: pure, tested; CS keys normalized
  case-insensitively so a 'CS-37B' vs 'CS-37b' mismatch can't slip past
- surface the refusal in the UI: error banner with a reload action, instead
  of leaving optimistic state that was never persisted
- GITHUB_REPO_SLUG as the single source for the repo (limiarcore/Lyfx),
  used by both the API client and the PR links — repo moved to the org
- AGENTS.md: rewrite the roadmap discipline for the dual-source board
  (local Postgres vs GitHub-owned), document the automated Revisão/Concluídas
  transitions, and forbid hand-editing docs/cs-board.json
@RudneyForti
RudneyForti merged commit 3631d5f into main Aug 3, 2026
3 checks passed
@RudneyForti
RudneyForti deleted the feature/76-roadmap-enforcement branch August 3, 2026 00:09
@RudneyForti RudneyForti mentioned this pull request Aug 3, 2026
16 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant