backlog

package
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 4, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Package backlog decides what becomes of a role's acts on a project's issues (docs/spec/backlog-acts.md): each is checked against the code and the forge, then done, proposed to a person, or dropped. Closing is the first act built.

Index

Constants

View Source
const (
	Act     = "act"
	Propose = "propose"
	Off     = "off"
)

Modes of an act.

View Source
const (
	LabelToRefine = "workline:to-refine"
	LabelDraft    = "workline:draft"    // the role drafted its Need or Validation
	LabelAccepted = "workline:accepted" // a person accepted the drafts: only who may triage sets a label
	LabelReady    = "workline:ready"
)

The labels of an issue on its way to ready (docs/spec/routing.md).

View Source
const Levels = 4

Levels are the priorities an issue takes: 1, the most pressing, to 4 (docs/spec/backlog-acts.md, "Ordering").

View Source
const PriorityPrefix = "workline:priority/"

PriorityPrefix starts each priority label: workline:priority/1 to /4.

Variables

View Source
var DraftMarker = forge.Marker("draft")

DraftMarker marks a section the role drafted and no person made theirs.

View Source
var Kinds = []string{"open", "close", "sources", "milestone", "order", "refine", "ready", "ask"}

Kinds are the intentions that are acts on the backlog.

View Source
var Sections = []string{"Need", "Verification", "Validation", "Scope"}

Sections are an issue's, in the order they are written.

Functions

func Accepted added in v0.7.0

func Accepted(is forge.Issue) bool

Accepted says whether a person accepted an issue's drafts, by its label — read on the issue, never taken from a proposal.

func Ask added in v0.6.0

func Ask(author, questions string) string

Ask is the comment asking the reporter what is missing.

func AskMarker added in v0.6.0

func AskMarker(role string) string

AskMarker marks the comment asking an issue's reporter, once.

func Before added in v0.8.0

func Before(is forge.Issue) string

Before says an issue's place in the order, to put it back: its priority and its milestone.

func BodyDigest added in v0.6.0

func BodyDigest(body string) string

BodyDigest is what the state keeps of a body, to tell when a person changed it.

func CappedByRole added in v0.7.1

func CappedByRole(f forge.Backlog, role string, open []forge.Issue) []int

CappedByRole lists the issues an act was proposed on only because a run's cap was reached: they are read again, though nothing changed on them.

func ClosedByRole

func ClosedByRole(f forge.Backlog, role string, open []forge.Issue) []int

ClosedByRole lists the issues the role's record says it closed, read from its report issue's comments; nil when there is none or it does not read.

func Comment

func Comment(c Proposal, role string) string

Comment is what the closed issue is told.

func CompareMilestones added in v0.8.0

func CompareMilestones(a, b string) int

CompareMilestones orders two milestone titles as versions: their numbers compared as numbers (v1.9 before v1.10), the rest as text.

func DraftLine added in v0.6.0

func DraftLine(role string) string

DraftLine opens a drafted section; deleting it makes the section a person's.

func FormatRecord

func FormatRecord(r Record) string

FormatRecord is the body of the report's record comment.

func FormatState

func FormatState(s State) string

FormatState is the body of an issue's state comment, its marker left to the forge's Sticky.

func ImportKey

func ImportKey(q Quote) string

ImportKey is the marker key of an issue opened from a file's text: the file and a digest of the text, so the same text is never opened twice.

func Less added in v0.8.0

func Less(a, b forge.Issue) bool

Less is the backlog's order (docs/spec/backlog-acts.md, "Ordering"): the nearest milestone first, an issue in none after every one in one; then the priority, an issue with none after priority 4; then the lowest number.

func Locate

func Locate(repo, path, text string) (from, to int, original string, ok bool)

Locate finds a quote in a file, as written but for spaces: the lines it spans, from 1, and those lines as the file has them.

func MovedPercent added in v0.8.0

func MovedPercent(settings map[string]any) int

MovedPercent reads the role's `moved-percent-max` setting: the share of the open issues a run may move, in percent; a fifth when it is not set.

func NextMilestone added in v0.8.0

func NextMilestone(repo string, open []string) string

NextMilestone is the nearest open milestone not released, in version order; "" when there is none.

func NotReady added in v0.6.0

func NotReady(body string, accepted bool) []string

NotReady says what keeps an issue's body from ready: a section missing or empty, Need or Validation still a draft no person accepted.

func Order added in v0.8.0

func Order(issues []forge.Issue)

Order sorts issues in the backlog's order.

func PeopleComments

func PeopleComments(comments []string) int

PeopleComments counts an issue's comments that are not the engine's.

func Priority added in v0.8.0

func Priority(is forge.Issue) int

Priority is an issue's level, the most pressing of its labels; 0 when it has none.

func PriorityLabel added in v0.8.0

func PriorityLabel(n int) string

PriorityLabel is the label of a priority level.

func PriorityLabels added in v0.8.0

func PriorityLabels(is forge.Issue) []int

PriorityLabels lists the levels an issue's priority labels give, in the order of its labels; more than one is a person's doing.

func RecordMarker

func RecordMarker(role string) string

RecordMarker marks the report's comment holding what the role did.

func Refine added in v0.6.0

func Refine(body string, c Proposal, role string) (string, []string, []string)

Refine is an issue's body with the sections it lacks written: one there but empty (an issue form's "_No response_") filled in place, one missing added after the text, which stays as it is; added and kept name the sections written and those already there, left alone.

func Released added in v0.8.0

func Released(repo, milestone string) bool

Released says whether a tag named after the milestone exists: the release it was for is out.

func ReportTitle

func ReportTitle(role string) string

ReportTitle is the title of the role's report issue.

func Settings

func Settings(settings map[string]any) map[string]Setting

Settings reads the role's `acts` setting.

func StateMarker

func StateMarker(role string) string

StateMarker marks the comment holding an issue's state.

func StripDrafts added in v0.7.0

func StripDrafts(body string) string

StripDrafts takes the draft lines out of a body: the drafts are a person's once accepted.

Types

type Closing

type Closing struct {
	Issue int    `yaml:"issue"`
	Act   string `yaml:"act"`
}

Closing is one issue the role closed.

type Decision

type Decision struct {
	Index  int      `yaml:"index"` // the intention's place in the run
	Mode   string   `yaml:"mode"`  // act, propose, or off (dropped)
	Act    Proposal `yaml:"act"`
	Capped bool     `yaml:"capped,omitempty"` // proposed only for the cap
}

Decision is what becomes of one act.

type Pending

type Pending struct {
	Issue int    `yaml:"issue"`
	Act   string `yaml:"act"`
	Line  string `yaml:"line"`
	Key   string `yaml:"key,omitempty"` // an issue to open: the text it would be opened from (ImportKey)
	// Capped: proposed only because the run's cap was reached, not left to
	// a person by its mode: its issue is read again at the next run.
	Capped bool `yaml:"capped,omitempty"`
}

Pending is an act proposed to a person, as the report says it.

type Plan

type Plan struct {
	Decisions []Decision        `yaml:"decisions"`
	Findings  []verdict.Finding `yaml:"findings"`
	Record    Record            `yaml:"record"`
	Report    int               `yaml:"report"`  // the report issue, 0 when none is open yet
	Changed   bool              `yaml:"changed"` // the record changed: wrong closings found, proposals settled
	// contains filtered or unexported fields
}

Plan is what a run does with its acts, decided once, so a resumed run does the same.

func Decide

func Decide(f forge.Backlog, repo, role string, settings map[string]Setting, closes map[int]Proposal, read []int, movedPercent int) (*Plan, error)

Decide plans the acts proposed, given at their place in the run. read lists the issues the run read: a proposal made only for a cap is dropped once its issue was read again, decided again or not. A run moves at most movedPercent of the open issues (milestone and order).

func (*Plan) Acts

func (p *Plan) Acts(i int) bool

Acts says whether the act at index i is done, not proposed nor dropped.

func (*Plan) Decision

func (p *Plan) Decision(i int) *Decision

Decision is what becomes of the act at index i, nil when it is none.

func (*Plan) ReportBody

func (p *Plan) ReportBody() string

ReportBody is the report issue's body: what the run did and proposes.

type Proposal

type Proposal struct {
	Do          string   `yaml:"do"` // close or sources: the intention's kind
	Issue       int      `yaml:"issue"`
	Reason      string   `yaml:"reason,omitempty"`
	DuplicateOf int      `yaml:"duplicate-of,omitempty"`
	Sources     []string `yaml:"sources,omitempty"`
	Milestone   string   `yaml:"milestone,omitempty"`
	Title       string   `yaml:"title,omitempty"` // an issue to open
	Quote       *Quote   `yaml:"quote"`
	Why         string   `yaml:"why"`
	// Refining: the sections written, Need and Validation as drafts; Added,
	// the engine's, says which the body did not have yet.
	Scope        string   `yaml:"scope,omitempty"`
	Verification string   `yaml:"verification,omitempty"`
	Need         string   `yaml:"need,omitempty"`
	Validation   string   `yaml:"validation,omitempty"`
	Added        []string `yaml:"added,omitempty"`
	Questions    string   `yaml:"questions,omitempty"` // asking the reporter
	// Ordering: the priority set (1 to 4); a milestone left because it is
	// released (From, the engine's); and, the engine's, the issue's
	// priority and milestone before the run, written in the report.
	Priority int    `yaml:"priority,omitempty"`
	From     string `yaml:"from,omitempty"`
	Before   string `yaml:"before,omitempty"`
}

Proposal is an act on an issue the agent proposed: a closing, or the code it is about named as its sources.

func (Proposal) Kind

func (c Proposal) Kind() string

Kind is the kind of act, as settings name it.

type Quote

type Quote struct {
	Path  string `yaml:"path"`
	Issue int    `yaml:"issue"`
	Text  string `yaml:"text"`
}

Quote is the evidence an act cites: a text in a file, or in an issue.

type Record

type Record struct {
	Closed   []Closing `yaml:"closed,omitempty"`
	Wrong    []Closing `yaml:"wrong,omitempty"`        // closings found wrong: their issue open again
	Propose  []string  `yaml:"propose,flow,omitempty"` // kinds of act back to propose, until the person says
	Proposed []Pending `yaml:"proposed,omitempty"`     // acts proposed, kept until their issue is closed or proposed again
}

Record is what the role did, kept on its report issue.

type Setting

type Setting struct {
	Mode string
	Max  int
}

Setting is a kind of act's mode and cap.

type State

type State struct {
	Sources   []string `yaml:"sources"`
	Confirmed string   `yaml:"confirmed"`
	Judged    string   `yaml:"judged,omitempty"`   // the commit the role last read it at
	Comments  int      `yaml:"comments,omitempty"` // people's comments when it was last read
	Body      string   `yaml:"body,omitempty"`     // a digest of its body, when the role last read or wrote it
	Priority  int      `yaml:"priority,omitempty"` // the priority the role last set: another on the issue is a person's
}

State is what the engine knows of an issue, kept in one comment on it.

func ReadState

func ReadState(comments []string, role string) (*State, bool, error)

ReadState reads an issue's state from its comments.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL