Class WorkspaceClaudeMdReconciler

java.lang.Object
network.ike.plugin.ws.reconcile.WorkspaceClaudeMdReconciler
All Implemented Interfaces:
Reconciler

public class WorkspaceClaudeMdReconciler extends Object implements Reconciler
Keeps the workspace-root CLAUDE.md in lockstep with its generator (IKE-Network/ike-issues#790).

The cheatsheets (GOALS.md, WS-REFERENCE.md) were promoted to continuous reconciliation by CheatsheetReconciler (#452), but the generated workspace-root CLAUDE.md was left behind: it is written only at the tail of SubprojectInitializer's initial ws:scaffold-init pass. A workspace that exists without a CLAUDE.md — created before the generator landed, or renamed — therefore never gets one, because nothing backfills it. This reconciler closes that gap so ws:scaffold-draft reports the drift and ws:scaffold-publish heals it, exactly like the cheatsheets.

Only the fully-generated CLAUDE.md is managed here. Hand-authored notes live in CLAUDE-<ws>.md, which SubprojectInitializer creates if absent and never overwrites — so they are intentionally outside this reconciler's scope.

Source-of-truth lives in SubprojectInitializer.generateWorkspaceClaudeMd(String, network.ike.workspace.WorkspaceGraph), already static so this reconciler can call it without additional plumbing.

Opt-out: -DupdateClaudeMd=false. Useful when the user has intentionally edited CLAUDE.md and does not want ws:scaffold-publish to overwrite it.

  • Constructor Details

    • WorkspaceClaudeMdReconciler

      public WorkspaceClaudeMdReconciler()
  • Method Details

    • dimension

      public String dimension()
      Description copied from interface: Reconciler
      Human-readable name of the dimension this reconciler owns. Used as the heading in scaffold-draft output.
      Specified by:
      dimension in interface Reconciler
      Returns:
      the dimension label, e.g. "Denormalized YAML fields"
    • optOutFlag

      public String optOutFlag()
      Description copied from interface: Reconciler
      The Maven property name (without the -D prefix) that opts out of this reconciler's apply pass. Setting the property to "false" skips this dimension on a given scaffold-publish invocation.
      Specified by:
      optOutFlag in interface Reconciler
      Returns:
      the opt-out flag name, e.g. "updateFields"
    • detect

      public DriftReport detect(WorkspaceContext ctx)
      Description copied from interface: Reconciler
      Inspect the workspace and report any drift this reconciler would correct. Read-only — must not mutate the workspace.
      Specified by:
      detect in interface Reconciler
      Parameters:
      ctx - the workspace context
      Returns:
      drift report; DriftReport.noDrift(String) if nothing to do
    • apply

      public void apply(WorkspaceContext ctx)
      Description copied from interface: Reconciler
      Apply reconciliation. Caller is responsible for checking ReconcilerOptions.isOptedOut(String) before invoking; implementations may also re-check defensively.
      Specified by:
      apply in interface Reconciler
      Parameters:
      ctx - the workspace context