docs: consolidate repository guides and preserve audit history
This commit is contained in:
@@ -14,7 +14,7 @@ namespace JobTrackerApi.Services;
|
||||
//
|
||||
// The flow is strictly one-directional — CareerProfile -> CvVariant -> application output. Nothing
|
||||
// here writes upward: no method touches CareerProfile or its children.
|
||||
// docs/architecture/application-workspace.md.
|
||||
// docs/architecture/overview.md.
|
||||
public sealed record ApplicationCvDto(
|
||||
int? AttachedVariantId,
|
||||
string? AttachedVariantName,
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace JobTrackerApi.Services;
|
||||
// /readiness endpoint computes, and are re-synced on every read, so "readiness says X is missing" and
|
||||
// "the checklist says X is pending" cannot drift apart. Readiness keeps its API contract and becomes
|
||||
// the calculation; the checklist is what the user actually works from and edits.
|
||||
// docs/architecture/application-workspace.md.
|
||||
// docs/architecture/overview.md.
|
||||
public sealed record ChecklistItemDto(
|
||||
int Id,
|
||||
string? SystemKey,
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace JobTrackerApi.Services;
|
||||
// The AI narrative is deliberately NOT here: it stays in AiWorkspaceService's "job-analysis" and
|
||||
// "career-match" modules, which are suggestion-only, append-only (AiInteraction is the version
|
||||
// history), and require the user to act on them. Nothing in this file writes to the CareerProfile,
|
||||
// a CvVariant, or the JobApplication. docs/architecture/application-workspace.md.
|
||||
// a CvVariant, or the JobApplication. docs/architecture/overview.md.
|
||||
public sealed record JobAnalysisDto(
|
||||
string? Role,
|
||||
string? Company,
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace JobTrackerApi.Services;
|
||||
// writes nothing, stores nothing, and adds no table. It turns rows like
|
||||
// ("StatusChanged", "Applied", "Interview") into a sentence, tags each event with a category and
|
||||
// whether it is a milestone, and groups the result by day so the workspace can render a real
|
||||
// timeline instead of a flat list. docs/architecture/application-workspace.md.
|
||||
// timeline instead of a flat list. docs/architecture/overview.md.
|
||||
public sealed record TimelineEventDto(
|
||||
int Id,
|
||||
string Type,
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace JobTrackerApi.Services;
|
||||
// This is an AGGREGATE READ ONLY. It owns no data and duplicates none: the CV comes from the Phase 4
|
||||
// CvVariant lens, documents from Attachments, activity from JobEvent, AI history from AiInteraction,
|
||||
// stage semantics from JobPipeline. Nothing here writes, and no career data is copied.
|
||||
// docs/architecture/application-workspace.md.
|
||||
// docs/architecture/overview.md.
|
||||
public sealed record WorkspaceCvDto(int? VariantId, string? VariantName, string? ThemeId, bool HasTailoredCvText, DateTimeOffset? UpdatedAtUtc);
|
||||
public sealed record WorkspaceActivityDto(string Type, string? Detail, DateTime At);
|
||||
public sealed record WorkspaceNextStepDto(string Key, string Label, string Reason, string? Section);
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace JobTrackerApi.Services;
|
||||
// the anonymous /health endpoint. /health used to read the APP_VERSION *environment
|
||||
// variable* directly, which compose never sets under that name — it passes App__Version,
|
||||
// binding to the App:Version configuration key. So /health always reported "unknown".
|
||||
// See docs/release-candidate-review.md (N2).
|
||||
// See docs/infrastructure/deployment.md for the health/version verification contract.
|
||||
public static class BuildMetadata
|
||||
{
|
||||
// Ignore unresolved shell/compose placeholders that would otherwise leak into the
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace JobTrackerApi.Services;
|
||||
|
||||
// Phase 3: two-way projection between the relational CareerProfile children and the
|
||||
// StructuredCvProfile shape (the derived blob + the frontend/AI edit unit).
|
||||
// See docs/architecture/career-profile-model.md.
|
||||
// See docs/architecture/overview.md.
|
||||
//
|
||||
// Relational holds: Experience, Education, Skill, Project, Certification, Language.
|
||||
// LongTailJson holds the rest of StructuredCvProfile: Contact, Summary, Interests, OtherSections,
|
||||
|
||||
@@ -5,7 +5,7 @@ using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace JobTrackerApi.Services;
|
||||
|
||||
// Career Workspace foundation (see docs/career-workspace-implementation-roadmap.md, Phase F1).
|
||||
// Career Workspace foundation (see docs/roadmap/todo.md).
|
||||
// Bounded to the profile/CV domain -- job tracking is untouched. Every existing read path still
|
||||
// goes through ApplicationUser.ProfileCvStructureJson (dual-write window); this service is the
|
||||
// single place stable item IDs and normalized dates get assigned, and where profile history is
|
||||
|
||||
@@ -3,7 +3,7 @@ namespace JobTrackerApi.Services.EmailProviders
|
||||
/// <summary>
|
||||
/// Provider-neutral email operations so job correspondence can be sourced from Gmail,
|
||||
/// Microsoft Graph, generic IMAP, or manual/free-text entry behind a single seam.
|
||||
/// See docs/remaster/PRODUCT_DIRECTION.md (multi-provider email). Gmail is the first
|
||||
/// See docs/architecture/integrations.md (multi-provider email). Gmail is the first
|
||||
/// implementation (<see cref="GmailProvider"/>); the controller migration and additional
|
||||
/// providers land in follow-up slices.
|
||||
/// </summary>
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace JobTrackerApi.Services;
|
||||
//
|
||||
// Follow-ups reuse what already exists: JobApplication.FollowUpAt for the date (RulesEngine and the
|
||||
// reminder hosted service already act on it) and ApplicationChecklistItem for the task. No second
|
||||
// reminder system. docs/architecture/application-workspace.md.
|
||||
// reminder system. docs/architecture/overview.md.
|
||||
public sealed record InterviewPrepItemDto(
|
||||
int Id,
|
||||
string Category,
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace JobTrackerApi.Services;
|
||||
//
|
||||
// Events are derived from the TRANSITION, not from the resulting state, so one user action produces
|
||||
// at most one lifecycle event and re-saving an unchanged status produces none.
|
||||
// docs/architecture/application-workspace.md.
|
||||
// docs/architecture/overview.md.
|
||||
public static class JobLifecycleEvents
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -121,7 +121,7 @@ public static class StartupInitializationExtensions
|
||||
// migration-owned tables do not exist yet. Repairing an absent table is not this pass's job --
|
||||
// it is skipped, Migrate() creates it, and the post-Migrate pass then finds it and reconciles.
|
||||
// Without this guard a clean MariaDB install died on "Table 'CareerProfiles' doesn't exist".
|
||||
// See docs/infrastructure/database-ownership.md.
|
||||
// See docs/database/migrations.md.
|
||||
private static void EnsureMySqlIndex(DbConnection c, string table, string indexName, string columnsSql, bool unique = false)
|
||||
{
|
||||
if (!HasMySqlTable(c, table)) return;
|
||||
@@ -276,7 +276,7 @@ public static class StartupInitializationExtensions
|
||||
// the migration-created tables and finishes compatibility repair.
|
||||
//
|
||||
// Every statement in here is existence-guarded, so running it twice is a no-op scan on an
|
||||
// already-correct database. docs/infrastructure/database-ownership.md.
|
||||
// already-correct database. docs/database/migrations.md.
|
||||
void ReconcileSchema()
|
||||
{
|
||||
if (useSqliteBootstrap)
|
||||
|
||||
@@ -15,7 +15,7 @@ public interface IThemedCvRenderer
|
||||
|
||||
// ONE render path for every theme. The theme (data) drives layout, palette, typography and spacing;
|
||||
// the variant settings apply a few runtime overrides (accent, fonts, density, page size, photo,
|
||||
// icons, page numbers). Adding a theme never touches this file. docs/architecture/cv-theme-engine.md.
|
||||
// icons, page numbers). Adding a theme never touches this file. docs/architecture/frontend.md.
|
||||
public sealed class ThemedCvRenderer : IThemedCvRenderer
|
||||
{
|
||||
public ThemedCvRenderResult Render(CvRenderModel model, CvTheme theme, CvVariantSettings settings)
|
||||
|
||||
Reference in New Issue
Block a user