PluralBridge Tag Task History

This file records the major work represented by each repository tag. It is intended as a project-facing release/task history for the repository root.

Tags are listed in reverse chronological order so the latest project changes appear first.

---

Unreleased — Tasks.UseRoles member write role enforcement

Major tasks completed

* Added role-based member write authorization for member POST and PUT.

* Defined the temporary member write role gate as Owner only.

* Added reusable member-write authorization helper support in the AccessContext boundary.

* Enforced role-aware authorization in MembersController write endpoints while keeping read behavior unchanged.

* Added tests for:

* allowed write role success

* active membership with insufficient role forbidden behavior

* cross-system write forbidden behavior

v0.8.7 — Tasks.FrontEnd single-source frontend and build sync enforcement

Major tasks completed

* Made app/src/ the canonical frontend source tree.

* Removed legacy runtime mirror files under app/ to prevent source drift.

* Added automated frontend sync in API build/publish.

* Added sync drift validation that fails build on mismatch.

* Added allowlist validation that fails build when Program.cs allowlists drift from source modules.

* Added guardrail docs for generated/runtime paths.

Notes

* Build now enforces frontend consistency via sync + validation checks.

* Runtime frontend output remains served from api/PluralBridge.Api/PluralBridge.Api/wwwroot/app/.

* This release reduces manual asset-sync and stale-file regression risk.

v0.8.6 — Account code email delivery and audit diagnostics

Major tasks completed

* Added Azure Communication Services account-code email delivery for account workflows.

* Preserved the development account-code delivery outbox for local and integration-test workflows.

* Added provider selection for account-code delivery so local development can use the outbox while configured environments can use Azure email delivery.

* Added controlled delivery-failure handling so missing or failing email configuration returns a safe account-service failure instead of surfacing as an unhandled API exception.

* Confirmed missing Azure FromAddress configuration returns a controlled delivery_failed registration response.

* Confirmed real Azure registration-code email delivery from [email protected].

* Confirmed registration email verification succeeds after receiving the Azure-delivered code.

* Improved account-code audit diagnostics with safe JSON detail for:

* registration validation rejection

* registration creation

* code issuance

* registration verification validation rejection

* registration verification rejection when no matching code is selected

* expired selected registration-verification codes

* accepted registration-verification codes

* consumed registration-verification codes

* completed registration verification

* account-code delivery failure

* Kept public API failure messages generic while adding internal safe diagnostic detail to audit rows.

* Split the large AccountService implementation into smaller partial-class workflow files under Account/Service/.

* Added and updated account integration tests for account-code audit SafeDetailJson coverage.

* Updated account test hosting so integration tests use the development delivery outbox instead of local Azure user-secret configuration.

* Confirmed:

* AccountCodeAuditTests passes

* PluralBridge.Api.Tests.Account passes

* the full PluralBridge.Api.Tests suite passes

Notes

* This release completes Task.Account 2.a Azure account-code email delivery.

* Account-code values remain server-side; emails contain the user-facing code while audit details record safe operational context only.

* The API still intentionally returns generic validation and verification messages to avoid exposing account-discovery or validation-oracle details.

* Azure delivery is configuration-driven and can be disabled locally by selecting the development provider.

* The development outbox remains the integration-test proof path for deterministic code retrieval.

* Follow-up audit work should continue adding safe detail to other account rejection paths as those paths are touched.

v0.8.5 — Task.Account 2.11 security cleanup

Major tasks completed

* Replaced the hardcoded demo-account access path with authenticated account resolution.

* Added account lookup using the immutable AccountId carried by the authenticated NameIdentifier claim.

* Rejected access-context resolution when the authenticated account identifier is missing or malformed.

* Applied authorization enforcement across the protected API controllers.

* Passed the authenticated principal through each protected access-context path.

* Added direct API handling for:

* 401 Unauthorized

* 403 Forbidden

* Preserved browser redirect behavior outside the API.

* Attached the verified Needs of the Many account to the existing System through an active Owner membership.

* Added account-boundary tests confirming that:

* each authenticated account resolves its own account, membership, and System

* each account can read members from its own System

* cross-System member access returns 403 Forbidden

* missing and malformed NameIdentifier claims do not resolve an access context

* Extended runtime test setup and cleanup for Systems, memberships, roles, and members.

* Added SPDX license headers to the C# source files.

* Confirmed the complete API test suite passes.

Notes

* This release completes Task.Account section 2.11.

* Protected API access now derives the acting account from the authenticated session rather than a fixed proof account.

* Account access remains constrained by active System membership.

* Existing privacy-bucket boundaries and member-write audit seams remain in place.

* No database schema changes or new tables were required.

* Task.UIShell remains the next implementation task.

v0.8.4 — PB-NEXT Task.Account implementation complete

Major tasks completed

* Completed the PB-NEXT Task.Account implementation and verification path.

* Added account test infrastructure covering the complete Account workflow.

* Added account registration with:

* username

* email

* display name

* password credential creation

* pending email-verification state

* Added development verification-code delivery through the account code-delivery outbox.

* Added registration email verification and account activation.

* Added durable account login using the account’s immutable AccountId as the authenticated identity.

* Added account recovery flows:

* forgot username

* forgot password

* password reset

* Added authenticated password change.

* Added account profile maintenance for display-name updates.

* Added verified contact/email maintenance:

* authenticated contact-change requests

* preservation of the existing verified email until the replacement address is verified

* verification-code delivery to the proposed replacement email

* rejection of blank, unchanged, duplicate, and unavailable-account requests

* invalid and expired verification-code handling

* transactional replacement of the verified account email after successful verification

* verification-code consumption after successful contact verification

* Added account audit coverage for:

* registration

* verification codes

* login

* username recovery

* password reset

* password change

* profile maintenance

* contact maintenance

* Added cross-cutting authentication safety tests confirming that unauthenticated requests cannot:

* update an account profile

* initiate an account contact change

* verify an account contact change

* Standardized Account test/runtime database configuration on:

* PluralBridgeChap2SafeSpine

* Confirmed the complete PluralBridge.Api.Tests.Account test suite passes.

Notes

* This release completes Task.Account through sections 2.0–2.10.

* Account identity is now based on the immutable account identifier carried by the authenticated session rather than resolving the acting account from a mutable username.

* Changing an account email is intentionally a two-step verified operation; the existing email remains active until the replacement address successfully completes verification.

* Verification-code state remains server-side and auditable.

* Development code delivery continues to use the test/development outbox rather than production email delivery.

* This release does not complete the public application shell or Simply Plural import workflow.

* Task.UIShell is the next implementation task.

v0.8.3 — Post-shutdown website messaging update

Major tasks completed

* Updated the public website for the post-shutdown Simply Plural phase.

* Reframed public messaging away from pre-shutdown export urgency.

* Updated major public website pages:

* home page

* Start Here

* Shutdown Info

* Export Guidance

* Help Me Export

* Safety

* About

* Contact

* Help Build

* What PluralBridge Is Building

* Removed stale hosted-demo routing from the public user path.

* Changed the top navigation Demo entry into a disabled Preview gate.

* Gated public Preview until the first release spine is ready:

* account setup / sign-in

* system and membership resolution

* Simply Plural import preview before saving

* member profile read/add/update

* privacy boundary for private System data

* Removed Install and Run from promoted website navigation.

* Reframed Export Guidance and Help Me Export as post-shutdown reference and safety guidance instead of current export workflow pages.

* Strengthened privacy language around:

* Simply Plural exports

* old API tokens

* passwords

* screenshots

* support requests

* private notes

* member records

* avatars

* fronting history

* generated database files

* private System data

* Clarified that PluralBridge is:

* independent

* free

* open-source

* privacy-centered

* not affiliated with Simply Plural or Apparyllis

* Clarified that PluralBridge is not asking users for money.

* Pointed contributor messaging toward the current development priorities:

* Account

* Import

* member profiles

* privacy

* testing

* documentation

* accessibility

* security

* review

Notes

* This release is a website-only messaging and navigation update.

* No app, API, database, account, import, or member-editing runtime behavior is released by this tag.

* The old hosted read-only demo is no longer promoted as the public proof path.

* Public Preview remains intentionally disabled until account setup, import review, and editable member profiles are coherent enough to show safely.

* The current development priority remains completing Account and Import so the first release spine is complete.

v0.8.2 — PB-NEXT Chapter 3 access enforcement retrofit

Work in progress, not yet ready to be promoted to master

v0.8.2 — PB-NEXT Chapter 3 access enforcement retrofit

Major tasks completed

* Completed the PB-NEXT Chapter 3 Task 3A access-context enforcement retrofit for existing API endpoints.

* Preserved the protected read-only proof surface while moving existing endpoint metadata to Phase 3.

* Centralized repeated API contract strings through Globals.cs, including:

* project API name

* project phase

* connection string name

* common connection-string error text

* route roots

* endpoint roots

* endpoint segments

* route templates

* Retrofitted current access-context enforcement into existing protected read endpoints:

* custom fields

* front history

* import batches

* import metadata

* members

* privacy buckets

* source ID mappings

* source records

* source systems

* systems

* Enforced the current-system boundary on system-routed endpoints:

* route systemId must match the resolved current system

* mismatched route system identifiers do not return protected endpoint data

* Added current access enforcement to global protected endpoints without route systemId values:

* /api/source-systems

* /api/systems

* Scoped /api/systems to the resolved current system so it returns only the current authorized system row.

* Added focused xUnit coverage for the current-system authorization rule in AccessContextHelper.

* Confirmed browser verification for protected existing endpoints:

* logged-in current-system routes return protected JSON

* wrong-system routes do not expose protected endpoint data

* global protected endpoints return Phase 3 metadata and current-system context

* logged-out access remains protected by authentication handling

Notes

* This release is a Chapter 3 Pre-Bravo enforcement retrofit.

* Runtime remains protected and read-only.

* Member editing is not implemented in this release.

* Browser member management is not implemented in this release.

* Existing imported data remains unchanged.

* Task 4 begins the editable member API path.

v0.8.1 — PB-NEXT Chapter 2 implementation complete

Major tasks completed

* Completed the PB-NEXT Chapter 2 safe-spine implementation path.

* Preserved the existing protected read-only browser and API proof behavior.

* Confirmed the Chapter 2 proof database:

* PluralBridgeChap2SafeSpine

* Added the account/security-principal foundation:

* account resolution

* account status lookup

* fixed proof account path

* Added the system access foundation:

* system membership resolution

* active membership selection

* membership status lookup

* membership role lookup

* current system resolution

* Confirmed the core Chapter 2 identity model:

* Account = login/security principal

* System = protected data namespace and data container

* Membership = account-to-system access grant

* Role = permission shape attached through membership

* Added the authorization boundary used by the current read path.

* Refactored /api/me to use the access-context helper instead of inline access SQL.

* Added tests for the access-context and authorization boundary.

* Added baseline diagnostic trace support.

* Added local rolling trace file support.

* Defined expanded diagnostic trace mode as future flag-controlled design.

* Completed final Chapter 2 verification of:

* API solution build

* request trace tests

* access-context authorization tests

* protected browser sign-in

* logged-out /api/me protection

* logged-in /api/me owner path

* local rolling trace output

* Added group support schema:

* pb_groups

* pb_group_members

* Modeled group membership as many-to-many.

* Preserved groups as system-scoped data/import organization.

* Kept groups separate from accounts, systems, memberships, roles, and security boundaries.

* Added child system relationship schema:

* pb_system_relationships

* Seeded the root system relationship row for the existing proof system.

* Preserved /api/me owner-path behavior after group and child-system schema additions.

Notes

* This release completes PB-NEXT Chapter 2 implementation.

* Runtime remains a protected read-only proof path.

* Group support is schema-only in this release.

* Child system relationships are schema-only in this release.

* Audit remains a future evidence seam.

* PB-native visibility scope remains future work.

* Simply Plural-shaped privacy bucket data remains preserved source/import data.

* Existing proof counts remain unchanged:

* members: 49

* privacy buckets: 2

* custom fields: 7

* front history rows: 886

v0.8.0 — PB-NEXT Chapter 2 safe-spine SQL foundation

Major tasks completed

* Added Chapter 2 safe-spine SQL scripts under scripts/sqlserver/chap2_safe_spine/scripts/.

* Confirmed frozen demo behavior before safe-spine work:

* demo login still works

* /api/me still works

* existing read-only demo counts remain unchanged

* Confirmed current runtime schema contract around:

* pb_systems

* pb_members

* pb_front_history

* pb_privacy_buckets

* pb_custom_fields

* Added account lifecycle foundation:

* pb_account_statuses

* pb_accounts

* demo account seed scripts

* Added constrained role and membership lifecycle lookups:

* pb_roles

* pb_system_membership_statuses

* Added system membership foundation:

* pb_system_memberships

* pb_system_membership_roles

* Corrected membership-role design to support multiple roles per system membership by moving role assignment into pb_system_membership_roles.

* Added foreign key coverage for:

* account status

* account membership

* system membership

* membership status

* membership role assignment

* Added composite primary key on pb_system_membership_roles to prevent duplicate role assignments for the same membership.

* Seeded the demo account.

* Seeded the demo account’s active Owner membership on the existing demo system.

Notes

* This tag is SQL/script foundation work only.

* Runtime authorization behavior is not changed yet.

* Existing demo read-only behavior remains the baseline.

* The Simply Plural-shaped privacy bucket data remains untouched.

* PB-native visibility scope, account resolver, membership resolver, authorization boundary, and diagnostic tracing remain future Chapter 2 tasks.

v0.7.6 — Contact page

Static public website release adding a dedicated Contact page for project-level communication.

v0.7.5 — Conference website demo navigation polish

v0.7.4 — Conference booth website update

v0.7.3 — Demo UI polish

v0.7.2 — Conference-safe hosted demo database

Major tasks completed

Notes

This release marks the protected Azure-hosted browser/API proof as conference-demo ready. The deployed demo reads from the anonymized PluralBridgeDemoAnonXlat database, while private/source proof databases remain outside public demo configuration.

Historical Azure proof and targeting artifacts remain project history. Runtime public surfaces for the app, API, website, and GitHub deployment path do not point at the private/source proof database.

---

v0.7.1 — Protected browser button app proof

Major tasks completed

Notes

This release proves that the Azure-hosted PluralBridge API can serve a protected browser app and protected REST surface from the same App Service. It keeps the demo credential values outside repository history by using User Secrets locally and Azure App Service app settings in the deployed proof.

The protected browser app remains a proof path for the Plural conference/demo objective. Later work can replace the fixed demo login with durable user/session/System mapping and decide how https://thepluralbridge.org/app routes to the application surface.

v0.7.0 — Read-only C# API and database-backed browser proof

Major tasks completed

Notes

This release marks the first PluralBridge browser proof backed by a durable C# REST API and real Azure SQL data. It corrects the Phase 2 read-only surface so the app now proves live database retrieval across the complete 1-6 proof slice instead of static browser-side contract JSON.

The API still uses a fixed Phase 2B proof context. Phase 3 remains responsible for replacing that fixed context with real login, session, and user-to-System mapping behavior.

---

v0.6.0 — Azure SQL cloud-readiness proof

Major tasks completed

Notes

This release marks the first completed Azure SQL database-backed proof for the minimal PluralBridge 1-6 vertical slice. Private JSON export files and generated private SQL load files remain ignored and are not part of the public repository history.

The next project phase can build on this proof toward the read-only REST/browser demo path for token-scoped member and front-history data.

---

v0.5.2 — Website menu restructure

Major tasks completed

Notes

This release improves the public website navigation before the later Contact/Support page work. The Contact Us item is intentionally present as a disabled placeholder; the actual Contact/Support page is deferred to a separate feature branch.

---

v0.5.1 — Social preview image update

Major tasks completed

Notes

This is a small production patch release for the public website metadata. It gets the current approved PluralBridge logo into production for link previews on Mastodon and other social platforms. Some services may cache previews, so the corrected image may appear only after cache refresh or a new share.

---

v0.5.0 — Mobile navigation and privacy reminder usability

Major tasks completed

Notes

This release is a visible website usability release. It improves the mobile path before adding the later Contact/Support page, so users can navigate the site more clearly on phones while still seeing the privacy reminder and having access to the full warning text.

The developer-outreach foundation now includes scoped starter Issues and a GitHub Discussion landing point, with the same safety boundary: contributors should use synthetic examples, redacted descriptions, and public-safe fixtures only.

---

Major tasks completed

Notes

This release prepares PluralBridge for developer and community participation by making GitHub Discussions visible from the repository and website, while keeping privacy boundaries and public-project workflow expectations clear.

---

v0.4.1 — Release-history bookkeeping

Major tasks completed

Notes

This release is a release-history correction. It documents the v0.4.0 contributor-governance release in TAG_TASKS.md without changing the already-published v0.4.0 tag.

---

v0.4.0 — Contributor governance and developer workflow

Major tasks completed

Pull requests and major commits included

Notes

This release prepared PluralBridge for careful developer and open-source contributor participation by documenting where discussions happen, how branches are handled, what privacy boundaries apply, and how contributors can help without handling private user data.

---

v0.3.4 — Website logo and release-history access

Major tasks completed

Notes

This release added the first public PluralBridge logo treatment to the website, improved project identity presentation, and made the repository tag/task history easier for visitors to find.

---

v0.3.3 — Official export probes and privacy banner

Major tasks completed

Pull requests and major commits included

Notes

This release started the investigation path for official Simply Plural export files while preserving the project safety boundary around private export data.

---

v0.3.2 — Guided export launcher

Major tasks completed

Pull requests and major commits included

Notes

This release moved PluralBridge toward a more approachable export workflow while still keeping the current implementation script-based and local-first.

---

v0.3.1 — Root tag task history

Major tasks completed

Pull requests and major commits included

Notes

This release added the repository-level task history that is now being linked from the public website.

---

v0.3.0 — Public website, documentation rendering, and non-technical user path

Major tasks completed

Pull requests and major commits included

Notes

This release materially changed the public shape of PluralBridge. It made the project more legible to regular users, especially users arriving from GitHub who may not know the difference between a source repository, a ZIP download, scripts, and a finished app installer.

The release keeps PluralBridge focused on preservation first: helping users understand how to export and protect their Simply Plural data while the original service remains available.

---

docs-rendering-live — Verified documentation rendering workflow

Major tasks completed

Notes

This was a workflow verification tag rather than a versioned release. It marks a known-good point for documentation rendering.

---

image-fix — Token guide screenshot repair point

Major tasks completed

Notes

This was a focused repair tag rather than a versioned release. It marks a known-good point for the corrected token-guide screenshot.

---

v0.2.0 — Public site and repository maturity baseline

Major tasks completed

Notes

This tag represents a stronger public baseline before the larger v0.3.0 website/documentation/user-path release.

---

v0.1.0 — Initial public preservation baseline

Major tasks completed

Notes

This tag represents the initial public foundation: export-first preservation, local files, private user control, and a repo structure large enough to grow into documentation, database work, viewers, and future services.

---

Current post-v0.5.2 follow-up queue

Public site and user-path verification

Developer-community publicizing

Documentation and contributor workflow

Regular-user tooling

Official Simply Plural export guidance

Private candidate review

Pluralpedia

---

Current contributor-ready outreach state

The first starter Issues and developer landing Discussion have been created for developer-community outreach. Further Issues should still be created only when each item has a clear scope, privacy-safe boundaries, and a synthetic-data path.

Current starter Issues

Privacy and data-safety boundary

All contributor-ready Issues should assume synthetic examples, redacted descriptions, and public-safe fixtures only. Contributors should not request, post, attach, or inspect private Simply Plural exports, real System data, API tokens, authorization headers, avatar images, notes, messages, friend data, fronting history, logs, screenshots containing private data, or database files created from real exports.

Outreach sequencing

Developer-community outreach should come before the Contact/Support page. Mobile navigation repair has now been addressed in the v0.5.0 work. The Contact/Support page remains the next focused website task after developer outreach stabilizes.