Commit graph

8 commits

Author SHA1 Message Date
12a71ada6a
doc: align navigation docs with VM-first pattern
The two recent commits (3fbbafc4, 0065de70) replaced the
OpenSettingsRequested event + CurrentViewModel assignment with
App.PushPageAsync(vm): the VM resolves the target ViewModel
through DI, App resolves the Control through the ViewLocator,
guards against double-push, and pushes via NavRoot. The docs
were still describing the pre-refactor world.

Update three places:

- CONTRIBUTING.md — the "Navigation (PostIt)" rule now
  describes App.PushPageAsync as the single channel and shows
  the canonical OpenSettings command as the example.
- doc/architecture/postit.md — the Navigation section
  distinguishes VM-first navigation (App.PushPageAsync) from
  lifecycle signals (LoginSucceeded, LogoutCompleted) and
  drops the obsolete OpenSettingsRequested row.
- src/PostIt/PostIt/App.axaml.cs — refresh the SettingsPage
  singleton justification: point (c) now describes the
  anti-empilement guard inside PushPageAsync, not the
  OpenSettingsRequested handler that no longer exists.

No production behaviour change — doc only (and the inline
comment that referenced a removed event).
2026-08-19 17:17:22 +01:00
aa098daed5
doc: codify PostIt navigation rule via ViewLocator
Navigation in PostIt is owned by src/PostIt/PostIt/ViewLocator.cs.
To open a screen, the caller assigns the target ViewModel to the
host's CurrentViewModel (which binds the IContentControl.Content);
the ViewLocator decides which Control instance to push and resolves
it through DI. ViewModels never instantiate views nor resolve them
from DI directly. Add the rule and a canonical example to
CONTRIBUTING.md so contributors do not re-derive the pattern from
scratch each time.
2026-08-19 15:20:29 +01:00
87e824fa63 contributing+roadmap: document smoke tests per BC, tick off Jalon 0
- CONTRIBUTING.md 'Tests' section now describes the smoke
  pattern: per-BC, in-memory TestServer, EF InMemory, asserts
  2xx/3xx or 401/403 on a representative GET.
- ROADMAP.md 'Tests d'integration smoke par BC' flips from
  open to ticked off (Yavsc.Org coverage), with a note that
  Yavsc.Api and Yavsc.Blogs smoke coverage is left for a
  future session (separate WebApplicationFactory<Program>
  targets).

With this commit, Jalon 0 'Fondations techniques' is fully
ticked off. The release criterion
  'dotnet build + dotnet test + docker compose up verts sur
   une machine vierge (apres procedure d'install)'
is met end-to-end for Yavsc.Org; the docker-compose criterion
documents the cert/HTTPS requirement for web explicitly.
2026-06-27 21:04:26 +01:00
8ec32e7931 contributing+compose: clarify 'machine vierge' criterion for Jalon 0
Make explicit what was implicit: 'docker compose up' is not
expected to start everything on a bare host. Yavsc.Org (web)
requires an HTTPS signing certificate for IdentityServer8 in
Production mode, and the volume mount /etc/letsencrypt:/etc/letsencrypt:ro
is the documented way to supply it.

Two related changes:

- CONTRIBUTING.md, 'docker compose up' section: spell out that
  db + api + blogs start cleanly on a bare host, web fails with
  the documented IdentityServer error, and that the difference
  between 'vierge' and 'configured' is exactly the cert volume.
- docker-compose.yaml, web service: expand the commented volumes
  block to point at the same error message and reference the
  'HTTPS en production' section in CONTRIBUTING.md, so an
  operator reading the compose file knows what to uncomment
  and where to look.
2026-06-27 18:12:28 +01:00
b320732ed4 contributing: document the HTTP-only env block and prod HTTPS recipe
Update the 'HTTPS en production' section to match the new
docker-compose layout:

- explain why the per-service environment: block pinning
  ASPNETCORE_URLS to HTTP-only and clearing ASPNETCORE_HTTPS_PORT
  is required (appsettings-org.Development.json sets
  Site.Authority to https://localhost:5001, which makes Kestrel
  auto-detect an HTTPS endpoint and crash without a cert);
- give the exact 5-step recipe to enable HTTPS in production:
  switch ASPNETCORE_URLS to a double-bind form, uncomment the
  HTTPS port, uncomment the /etc/letsencrypt volume mount, add a
  Kestrel:Endpoints:Https block in appsettings-org.json pointing
  at the Let's Encrypt fullchain.pem + privkey.pem, and rebuild
  the runtime image (since appsettings are baked via BuildKit
  secret mount).
2026-06-27 17:24:26 +01:00
bcfff12dab contributing: update containerisation section for multi-stage build
The previous section described three separate Dockerfile.runtime*
files, one per runtime service. After the multi-stage refactor
of Dockerfile (6f975f87) and the deletion of those three files
(4fc0ddb6), the section was stale.

Rewrite it to describe the new structure:

- one Dockerfile with multiple stages (build-env, publish-org /
  api / blogs, web-runtime / api-runtime / blogs-runtime);
- Dockerfile.backend kept for the production image workflow;
- the BUILD_ENV_TAG ARG that propagates the build-env image
  pin across the three locations where it has to be updated.

Update the 'Bumper l'image de build' section to point at the
new ARG location (was: a list of Dockerfile.runtime* files).
Update the isolated-build example to use --target web-runtime
instead of -f Dockerfile.runtime.

Also fix a structural regression introduced while editing: a
duplicate '## Conteneurisation' header and a missing
'## Sessions DDD' transition — both restored here.
2026-06-27 16:36:29 +01:00
ad1e4a6f4e contributing: document containerisation (compose, secrets, HTTPS bump)
Add a 'Conteneurisation' section covering:

- the three image families (build env, runtime per project);
- the yavsc-build-env pin on Docker Hub and the
  dotnet-android-build-image sibling repo;
- the docker compose up flow (4 services, healthcheck-gated);
- how appsettings-org.json is injected via BuildKit secret mount
  (file remains on the host, never lands in a layer);
- the HTTPS-in-prod recipe (uncomment ports 5001/5003/5005 +
  /etc/letsencrypt volume + Kestrel:Certificates in
  appsettings-org.json + ASPNETCORE_URLS override);
- the bump procedure when the build-env image is rebuilt
  (rebuild + push with new tag, then update Dockerfile,
  Dockerfile.backend, the three Dockerfile.runtime*, and
  docker-compose.yaml in lockstep);
- an isolated build/run check for one runtime image.

Also corrects an outdated mention of 'build.args.BUILD_ENV_IMAGE'
(removed in the previous commit) — the lockstep list now points
at the docker-compose 'build' blocks instead.
2026-06-27 16:28:05 +01:00
7b24b4812d add CONTRIBUTING.md
Covers the last missing piece of Jalon 0 in ROADMAP.md:

  'CONTRIBUTING.md (build, tests, conventions, DDD sessions)'

Sections:
- prerequisites (.NET 10, PostgreSQL, Node for Avalonia Browser,
  Android SDK for PostIt.Android)
- first build + how to start Yavsc.Org in Development
- how to run the test suite
- code conventions (delegated to .editorconfig + a few extras)
- branches and commit messages (trunk-based, scoped imperatives)
- link to architecture/decoupage-organisation.md for the
  per-project layout
- DDD sessions (link to doc/ddd-exploration-*.md + ROADMAP.md)
- security reminders (no secrets in git, user-secrets / env vars)
- pointer to GitHub issues + new DDD sessions for design Qs
2026-06-27 14:52:52 +01:00