Class NarrativeTraceDoctorTask

java.lang.Object
org.gradle.api.internal.AbstractTask
org.gradle.api.DefaultTask
ai.narrativetrace.gradle.NarrativeTraceDoctorTask
All Implemented Interfaces:
Comparable<org.gradle.api.Task>, org.gradle.api.internal.DynamicObjectAware, org.gradle.api.internal.TaskInternal, org.gradle.api.Named, org.gradle.api.plugins.ExtensionAware, org.gradle.api.Task, org.gradle.util.Configurable<org.gradle.api.Task>

public abstract class NarrativeTraceDoctorTask extends org.gradle.api.DefaultTask
narrativetraceDoctor: runs the free narrativetrace-tooling doctor's twelve checks against this project and writes its JSON report. Calls SnapshotBuilder, DoctorChecks and DoctorRender in-process — narrativetrace-tooling is a project dependency baked into this plugin's own jar (see build.gradle.kts), not an external artifact resolved when the task runs, so this needs no network access beyond applying the plugin itself. The narrativetrace-cli launcher embeds the same library; neither entry point depends on the other. DoctorSnapshot's own doc comment names this task as one of SnapshotBuilder's two callers, alongside the narrativetrace-cli bin/narrativetrace launcher.

Read-only and always safe to run: like the CLI's own doctor verb, a finding is a normal, expected outcome, never a build failure — this task never throws on the report's own exit code, only on a real I/O failure writing the file.

@llmNote One of the twelve checks needs the agent-skills carrier this project resolves, so this task reads the same narrativeTraceSkills configuration narrativetraceInit does — through the same LENIENT artifact view, and with the opposite policy on failure: init fails the build with the coordinate named, because a person asked it to install something; the doctor carries on and lets the skills check report that it cannot tell. A read-only diagnosis that cannot run offline would be no diagnosis at all.

  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.gradle.api.Task

    org.gradle.api.Task.Namer
  • Field Summary

    Fields inherited from interface org.gradle.api.Task

    TASK_ACTION, TASK_CONSTRUCTOR_ARGS, TASK_DEPENDS_ON, TASK_DESCRIPTION, TASK_GROUP, TASK_NAME, TASK_OVERWRITE, TASK_TYPE
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract org.gradle.api.file.ConfigurableFileCollection
    The resolved agent-skills carrier.
    abstract org.gradle.api.provider.Property<String>
    The coordinate the carrier was asked for — what "could not resolve it" has to be able to say.
    abstract org.gradle.api.file.RegularFileProperty
    Where the JSON report lands — build/narrativetrace/doctor-report.json by default.
    abstract org.gradle.api.file.DirectoryProperty
    The project to diagnose — this project's own directory in real use.
    void
     

    Methods inherited from class org.gradle.api.DefaultTask

    compareTo, configure, dependsOn, doFirst, doFirst, doFirst, doLast, doLast, doLast, finalizedBy, getActions, getAnt, getDependsOn, getDescription, getDestroyables, getDidWork, getEnabled, getExtensions, getFinalizedBy, getGroup, getInputs, getLocalState, getLogger, getLogging, getMustRunAfter, getName, getOutputs, getPath, getProject, getShouldRunAfter, getState, getTaskDependencies, getTemporaryDir, getTimeout, hasProperty, mustRunAfter, onlyIf, onlyIf, onlyIf, property, setActions, setDependsOn, setDescription, setDidWork, setEnabled, setFinalizedBy, setGroup, setMustRunAfter, setOnlyIf, setOnlyIf, setOnlyIf, setProperty, setShouldRunAfter, shouldRunAfter, usesService

    Methods inherited from class org.gradle.api.internal.AbstractTask

    acceptServiceReferences, appendParallelSafeAction, doNotTrackState, getAsDynamicObject, getConvention, getIdentityPath, getImpliesSubProjects, getLifecycleDependencies, getOnlyIf, getReasonNotToTrackState, getReasonTaskIsIncompatibleWithConfigurationCache, getRequiredServices, getServices, getSharedResources, getStandardOutputCapture, getTaskActions, getTaskIdentity, getTemporaryDirFactory, hasTaskActions, injectIntoNewInstance, isCompatibleWithConfigurationCache, isEnabled, isHasCustomActions, notCompatibleWithConfigurationCache, prependParallelSafeAction, setImpliesSubProjects

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.gradle.api.Task

    doNotTrackState, getConvention, notCompatibleWithConfigurationCache
  • Constructor Details

    • NarrativeTraceDoctorTask

      public NarrativeTraceDoctorTask()
  • Method Details

    • getTargetDir

      @Internal public abstract org.gradle.api.file.DirectoryProperty getTargetDir()
      The project to diagnose — this project's own directory in real use.
    • getReportFile

      @OutputFile public abstract org.gradle.api.file.RegularFileProperty getReportFile()
      Where the JSON report lands — build/narrativetrace/doctor-report.json by default.
    • getCarrier

      @Internal public abstract org.gradle.api.file.ConfigurableFileCollection getCarrier()
      The resolved agent-skills carrier. @Internal: the report is this task's output and the carrier is read only to compare a coordinate, so declaring it as an input would buy nothing but a path-sensitivity decision nobody reads.
    • getCarrierCoordinate

      @Input public abstract org.gradle.api.provider.Property<String> getCarrierCoordinate()
      The coordinate the carrier was asked for — what "could not resolve it" has to be able to say.
    • runDoctor

      public void runDoctor()