trd

package
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: Jan 30, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package trd provides data types for structured Technical Requirements Documents.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type APIEndpoint

type APIEndpoint struct {
	Method      string   `json:"method"`
	Path        string   `json:"path"`
	Description string   `json:"description,omitempty"`
	Request     string   `json:"request,omitempty"`  // Schema reference
	Response    string   `json:"response,omitempty"` // Schema reference
	Errors      []string `json:"errors,omitempty"`
}

APIEndpoint represents an API endpoint.

type APISpec

type APISpec struct {
	ID          string        `json:"id"`
	Name        string        `json:"name"`
	Type        string        `json:"type"` // REST, gRPC, GraphQL, WebSocket
	Version     string        `json:"version,omitempty"`
	Description string        `json:"description,omitempty"`
	BaseURL     string        `json:"base_url,omitempty"`
	Auth        string        `json:"auth,omitempty"` // OAuth2, API Key, mTLS, etc.
	Endpoints   []APIEndpoint `json:"endpoints,omitempty"`
	SpecURL     string        `json:"spec_url,omitempty"` // OpenAPI, Proto file, etc.
	RateLimit   string        `json:"rate_limit,omitempty"`
	Tags        []string      `json:"tags,omitempty"` // For filtering by topic/domain
}

APISpec represents an API specification.

type Approver

type Approver = common.Approver

Approver is an alias for common.Approver for backwards compatibility.

type ArchDecision

type ArchDecision struct {
	ID           string   `json:"id"`
	Title        string   `json:"title"`
	Status       string   `json:"status"` // Proposed, Accepted, Deprecated, Superseded
	Context      string   `json:"context"`
	Decision     string   `json:"decision"`
	Consequences []string `json:"consequences,omitempty"`
	Alternatives []string `json:"alternatives,omitempty"`
	Date         string   `json:"date,omitempty"`
	Tags         []string `json:"tags,omitempty"` // For filtering by topic/domain
}

ArchDecision represents an Architecture Decision Record (ADR).

type Architecture

type Architecture struct {
	Overview      string         `json:"overview"`
	Principles    []string       `json:"principles,omitempty"`
	Patterns      []string       `json:"patterns,omitempty"` // e.g., "Microservices", "Event-driven"
	Components    []Component    `json:"components"`
	Diagrams      []Diagram      `json:"diagrams,omitempty"`
	DataFlows     []DataFlow     `json:"data_flows,omitempty"`
	ArchDecisions []ArchDecision `json:"architecture_decisions,omitempty"`
}

Architecture contains system architecture details.

type Assumption

type Assumption struct {
	ID          string `json:"id"`
	Description string `json:"description"`
	Rationale   string `json:"rationale,omitempty"`
	Validated   bool   `json:"validated,omitempty"`
	Risk        string `json:"risk,omitempty"`
}

Assumption represents a technical assumption.

type Attribute

type Attribute struct {
	Name        string `json:"name"`
	Type        string `json:"type"`
	Required    bool   `json:"required,omitempty"`
	Description string `json:"description,omitempty"`
	Constraints string `json:"constraints,omitempty"`
}

Attribute represents an entity attribute.

type AuthN

type AuthN struct {
	Method      string `json:"method"` // OAuth2, SAML, mTLS, API Key
	Provider    string `json:"provider,omitempty"`
	MFA         bool   `json:"mfa,omitempty"`
	SessionMgmt string `json:"session_management,omitempty"`
	Details     string `json:"details,omitempty"`
}

AuthN represents authentication design.

type AuthZ

type AuthZ struct {
	Model    string   `json:"model"` // RBAC, ABAC, ReBAC
	Policies string   `json:"policies,omitempty"`
	Roles    []string `json:"roles,omitempty"`
	Details  string   `json:"details,omitempty"`
}

AuthZ represents authorization design.

type Benchmark

type Benchmark struct {
	Name     string `json:"name"`
	Scenario string `json:"scenario"`
	Result   string `json:"result,omitempty"`
	Date     string `json:"date,omitempty"`
}

Benchmark represents a performance benchmark.

type Component

type Component struct {
	ID               string   `json:"id"`
	Name             string   `json:"name"`
	Description      string   `json:"description"`
	Type             string   `json:"type,omitempty"` // Service, Library, Database, Queue, etc.
	Responsibilities []string `json:"responsibilities,omitempty"`
	Dependencies     []string `json:"dependencies,omitempty"` // IDs of dependent components
	Technology       string   `json:"technology,omitempty"`
	Owner            string   `json:"owner,omitempty"`
	Tags             []string `json:"tags,omitempty"` // For filtering by topic/domain
}

Component represents a system component.

type Constraint

type Constraint struct {
	ID          string   `json:"id"`
	Type        string   `json:"type"` // Technical, Resource, Time, Budget
	Description string   `json:"description"`
	Impact      string   `json:"impact,omitempty"`
	Rationale   string   `json:"rationale,omitempty"`
	Tags        []string `json:"tags,omitempty"` // For filtering by topic/domain
}

Constraint represents a technical constraint.

type CustomSection

type CustomSection struct {
	ID      string `json:"id"`
	Title   string `json:"title"`
	Content any    `json:"content"`
}

CustomSection allows document-specific sections.

type DataFlow

type DataFlow struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	Source      string `json:"source"`      // Component ID
	Destination string `json:"destination"` // Component ID
	DataType    string `json:"data_type,omitempty"`
	Protocol    string `json:"protocol,omitempty"` // HTTP, gRPC, AMQP, etc.
	Description string `json:"description,omitempty"`
}

DataFlow represents a data flow between components.

type DataModel

type DataModel struct {
	Overview   string      `json:"overview"`
	Entities   []Entity    `json:"entities,omitempty"`
	Diagrams   []Diagram   `json:"diagrams,omitempty"`
	DataStores []DataStore `json:"data_stores,omitempty"`
	Migrations string      `json:"migrations,omitempty"` // Migration strategy
}

DataModel contains data modeling information.

type DataStore

type DataStore struct {
	ID          string   `json:"id"`
	Name        string   `json:"name"`
	Type        string   `json:"type"` // PostgreSQL, MongoDB, Redis, S3, etc.
	Purpose     string   `json:"purpose"`
	Capacity    string   `json:"capacity,omitempty"`
	Replication string   `json:"replication,omitempty"`
	Backup      string   `json:"backup,omitempty"`
	Tags        []string `json:"tags,omitempty"` // For filtering by topic/domain
}

DataStore represents a data storage system.

type Deployment

type Deployment struct {
	Overview       string        `json:"overview"`
	Environments   []Environment `json:"environments"`
	Strategy       string        `json:"strategy,omitempty"`       // Blue-green, Canary, Rolling
	Infrastructure string        `json:"infrastructure,omitempty"` // Kubernetes, VMs, Serverless
	Regions        []string      `json:"regions,omitempty"`
	HA             string        `json:"high_availability,omitempty"`
	DR             string        `json:"disaster_recovery,omitempty"`
}

Deployment contains deployment architecture.

type Development

type Development struct {
	CodingStandards string   `json:"coding_standards,omitempty"`
	BranchStrategy  string   `json:"branch_strategy,omitempty"`
	CodeReview      string   `json:"code_review,omitempty"`
	Documentation   string   `json:"documentation,omitempty"`
	Tools           []string `json:"tools,omitempty"`
}

Development contains development standards.

type Diagram

type Diagram struct {
	ID          string `json:"id"`
	Title       string `json:"title"`
	Type        string `json:"type,omitempty"` // C4, Sequence, ER, Flowchart
	URL         string `json:"url,omitempty"`
	Description string `json:"description,omitempty"`
	Source      string `json:"source,omitempty"` // Mermaid, PlantUML, draw.io, etc.
}

Diagram represents an architecture diagram.

type Document

type Document struct {
	Metadata          Metadata         `json:"metadata"`
	ExecutiveSummary  ExecutiveSummary `json:"executive_summary"`
	Architecture      Architecture     `json:"architecture"`
	TechnologyStack   TechnologyStack  `json:"technology_stack"`
	APISpecifications []APISpec        `json:"api_specifications,omitempty"`
	DataModel         *DataModel       `json:"data_model,omitempty"`
	SecurityDesign    SecurityDesign   `json:"security_design"`
	Performance       Performance      `json:"performance"`
	Scalability       *Scalability     `json:"scalability,omitempty"`
	Deployment        Deployment       `json:"deployment"`
	Integration       []Integration    `json:"integrations,omitempty"`
	Development       *Development     `json:"development,omitempty"`
	Testing           *Testing         `json:"testing,omitempty"`

	// Optional sections
	Risks          []Risk          `json:"risks,omitempty"`
	Constraints    []Constraint    `json:"constraints,omitempty"`
	Assumptions    []Assumption    `json:"assumptions,omitempty"`
	Glossary       []GlossaryTerm  `json:"glossary,omitempty"`
	CustomSections []CustomSection `json:"custom_sections,omitempty"`
}

Document represents a complete Technical Requirements Document.

func (Document) FilterByTags added in v0.4.0

func (d Document) FilterByTags(tags ...string) Document

FilterByTags returns a new Document containing only entities that have at least one of the specified tags (OR logic). If no tags are provided, returns a copy of the original document. Metadata tags are always preserved.

func (*Document) ToMarkdown

func (d *Document) ToMarkdown(opts MarkdownOptions) string

ToMarkdown converts the TRD to markdown format.

type Encryption

type Encryption struct {
	AtRest    string `json:"at_rest,omitempty"`    // AES-256, etc.
	InTransit string `json:"in_transit,omitempty"` // TLS 1.3, mTLS
	KeyMgmt   string `json:"key_management,omitempty"`
	Details   string `json:"details,omitempty"`
}

Encryption represents encryption design.

type Entity

type Entity struct {
	ID            string      `json:"id"`
	Name          string      `json:"name"`
	Description   string      `json:"description,omitempty"`
	Attributes    []Attribute `json:"attributes,omitempty"`
	Relationships []string    `json:"relationships,omitempty"`
	Tags          []string    `json:"tags,omitempty"` // For filtering by topic/domain
}

Entity represents a data entity.

type Environment

type Environment struct {
	Name        string `json:"name"` // Development, Staging, Production
	Purpose     string `json:"purpose,omitempty"`
	URL         string `json:"url,omitempty"`
	Resources   string `json:"resources,omitempty"`
	AccessLevel string `json:"access_level,omitempty"`
}

Environment represents a deployment environment.

type ExecutiveSummary

type ExecutiveSummary struct {
	Purpose           string   `json:"purpose"`
	Scope             string   `json:"scope"`
	TechnicalApproach string   `json:"technical_approach"`
	KeyDecisions      []string `json:"key_decisions,omitempty"`
	OutOfScope        []string `json:"out_of_scope,omitempty"`
}

ExecutiveSummary provides high-level technical overview.

type GlossaryTerm

type GlossaryTerm struct {
	Term       string `json:"term"`
	Definition string `json:"definition"`
	Acronym    string `json:"acronym,omitempty"`
}

GlossaryTerm defines a glossary entry.

type Integration

type Integration struct {
	ID            string   `json:"id"`
	Name          string   `json:"name"`
	Type          string   `json:"type"`      // API, SDK, Webhook, File
	Direction     string   `json:"direction"` // Inbound, Outbound, Bidirectional
	Protocol      string   `json:"protocol,omitempty"`
	AuthMethod    string   `json:"auth_method,omitempty"`
	DataFormat    string   `json:"data_format,omitempty"`
	Frequency     string   `json:"frequency,omitempty"` // Real-time, Batch, On-demand
	Description   string   `json:"description,omitempty"`
	Documentation string   `json:"documentation,omitempty"`
	Tags          []string `json:"tags,omitempty"` // For filtering by topic/domain
}

Integration represents an external integration.

type Limit

type Limit struct {
	Name         string `json:"name"`
	Value        string `json:"value"`
	Rationale    string `json:"rationale,omitempty"`
	Configurable bool   `json:"configurable,omitempty"`
}

Limit represents a system limit.

type MarkdownOptions

type MarkdownOptions struct {
	IncludeFrontmatter bool
	Margin             string
	MainFont           string
	SansFont           string
	MonoFont           string
	FontFamily         string
}

MarkdownOptions configures markdown generation.

func DefaultMarkdownOptions

func DefaultMarkdownOptions() MarkdownOptions

DefaultMarkdownOptions returns default options.

type Metadata

type Metadata struct {
	ID               string       `json:"id"`
	Title            string       `json:"title"`
	Version          string       `json:"version"`
	Status           Status       `json:"status"`
	CreatedAt        time.Time    `json:"created_at"`
	UpdatedAt        time.Time    `json:"updated_at"`
	Authors          []Person     `json:"authors"`
	Reviewers        []Person     `json:"reviewers,omitempty"`
	Approvers        []Approver   `json:"approvers,omitempty"`
	Tags             []string     `json:"tags,omitempty"`
	RelatedDocuments []RelatedDoc `json:"related_documents,omitempty"`
}

Metadata contains document metadata.

type NetworkSecurity

type NetworkSecurity struct {
	Firewall      string `json:"firewall,omitempty"`
	WAF           string `json:"waf,omitempty"`
	DDoS          string `json:"ddos_protection,omitempty"`
	NetworkPolicy string `json:"network_policy,omitempty"`
	Segmentation  string `json:"segmentation,omitempty"`
	Details       string `json:"details,omitempty"`
}

NetworkSecurity represents network security design.

type PerfRequirement

type PerfRequirement struct {
	ID          string   `json:"id"`
	Name        string   `json:"name"`
	Metric      string   `json:"metric"` // Latency, Throughput, etc.
	Target      string   `json:"target"` // e.g., "< 100ms p99"
	Priority    string   `json:"priority,omitempty"`
	Measurement string   `json:"measurement,omitempty"`
	Tags        []string `json:"tags,omitempty"` // For filtering by topic/domain
}

PerfRequirement represents a performance requirement.

type Performance

type Performance struct {
	Overview      string            `json:"overview,omitempty"`
	Requirements  []PerfRequirement `json:"requirements"`
	Benchmarks    []Benchmark       `json:"benchmarks,omitempty"`
	Optimizations []string          `json:"optimizations,omitempty"`
}

Performance contains performance requirements and design.

type Person

type Person = common.Person

Person is an alias for common.Person for backwards compatibility.

type RelatedDoc

type RelatedDoc struct {
	Title        string `json:"title"`
	URL          string `json:"url,omitempty"`
	Relationship string `json:"relationship,omitempty"` // implements, extends, references
	Description  string `json:"description,omitempty"`
}

RelatedDoc represents a related document reference.

type Risk

type Risk struct {
	ID          string   `json:"id"`
	Description string   `json:"description"`
	Probability string   `json:"probability"`
	Impact      string   `json:"impact"`
	Mitigation  string   `json:"mitigation"`
	Owner       string   `json:"owner,omitempty"`
	Status      string   `json:"status,omitempty"`
	Tags        []string `json:"tags,omitempty"` // For filtering by topic/domain
}

Risk represents a technical risk.

type Scalability

type Scalability struct {
	Overview        string  `json:"overview"`
	HorizontalScale string  `json:"horizontal_scaling,omitempty"`
	VerticalScale   string  `json:"vertical_scaling,omitempty"`
	LoadBalancing   string  `json:"load_balancing,omitempty"`
	AutoScaling     string  `json:"auto_scaling,omitempty"`
	Limits          []Limit `json:"limits,omitempty"`
}

Scalability contains scalability design.

type SecurityControl

type SecurityControl struct {
	ID             string   `json:"id"`
	Name           string   `json:"name"`
	Category       string   `json:"category,omitempty"`
	Description    string   `json:"description"`
	Implementation string   `json:"implementation,omitempty"`
	Tags           []string `json:"tags,omitempty"` // For filtering by topic/domain
}

SecurityControl represents a security control.

type SecurityDesign

type SecurityDesign struct {
	Overview         string            `json:"overview"`
	AuthN            *AuthN            `json:"authentication,omitempty"`
	AuthZ            *AuthZ            `json:"authorization,omitempty"`
	Encryption       *Encryption       `json:"encryption,omitempty"`
	NetworkSecurity  *NetworkSecurity  `json:"network_security,omitempty"`
	Compliance       []string          `json:"compliance,omitempty"` // SOC2, HIPAA, PCI-DSS, etc.
	ThreatModel      []Threat          `json:"threat_model,omitempty"`
	SecurityControls []SecurityControl `json:"security_controls,omitempty"`
}

SecurityDesign contains security architecture.

type Status

type Status string

Status represents the document lifecycle status.

const (
	StatusDraft      Status = "draft"
	StatusInReview   Status = "in_review"
	StatusApproved   Status = "approved"
	StatusDeprecated Status = "deprecated"
)

type Technology

type Technology struct {
	Name         string   `json:"name"`
	Version      string   `json:"version,omitempty"`
	Purpose      string   `json:"purpose"`
	Rationale    string   `json:"rationale,omitempty"`
	Alternatives []string `json:"alternatives,omitempty"`
	Constraints  []string `json:"constraints,omitempty"`
}

Technology represents a technology choice.

type TechnologyStack

type TechnologyStack struct {
	Languages      []Technology `json:"languages,omitempty"`
	Frameworks     []Technology `json:"frameworks,omitempty"`
	Databases      []Technology `json:"databases,omitempty"`
	MessageQueues  []Technology `json:"message_queues,omitempty"`
	Caching        []Technology `json:"caching,omitempty"`
	Infrastructure []Technology `json:"infrastructure,omitempty"`
	Monitoring     []Technology `json:"monitoring,omitempty"`
	CICD           []Technology `json:"cicd,omitempty"`
	Other          []Technology `json:"other,omitempty"`
}

TechnologyStack defines technology choices.

type Testing

type Testing struct {
	Strategy     string   `json:"strategy"`
	UnitTests    string   `json:"unit_tests,omitempty"`
	Integration  string   `json:"integration_tests,omitempty"`
	E2E          string   `json:"e2e_tests,omitempty"`
	Performance  string   `json:"performance_tests,omitempty"`
	Security     string   `json:"security_tests,omitempty"`
	Coverage     string   `json:"coverage_requirements,omitempty"`
	Environments []string `json:"test_environments,omitempty"`
}

Testing contains testing strategy.

type Threat

type Threat struct {
	ID          string   `json:"id"`
	Name        string   `json:"name"`
	Category    string   `json:"category,omitempty"` // STRIDE categories
	Description string   `json:"description"`
	Likelihood  string   `json:"likelihood,omitempty"`
	Impact      string   `json:"impact,omitempty"`
	Mitigation  string   `json:"mitigation"`
	Tags        []string `json:"tags,omitempty"` // For filtering by topic/domain
}

Threat represents a security threat.

Jump to

Keyboard shortcuts

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