Maintenance

Periodically check links, lint Markdown, and check grammar and spelling in the standard, profile and extension repositories.

Lint Markdown

  1. Install markdownlint-cli:

    npm install -g markdownlint-cli
    
  2. Create ~/.config/markdownlint/config.yaml:

    # https://github.com/DavidAnson/markdownlint#optionsconfig
    # https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
    default: true
    # Trailing spaces (causes merge conflicts in active repositories)
    # MD009: false
    # Line length (causes longer diffs and merge conflicts in active repositories)
    MD013: false
    # Multiple headers with the same content (allow same headings in changelogs)
    MD024:
      allow_different_nesting: true
    # Trailing punctuation in header (allow "?" and "!")
    MD026:
      punctuation: '.,;:'
    # Inline HTML (some files require HTML)
    MD033: false
    
  3. Run markdownlint-cli:

    markdownlint --config ~/.config/markdownlint/config.yaml --ignore build --ignore docs/_static/docson --fix .
    

Check grammar

Install gramma via NPM or as a binary package, and run:

find . -type f -path '*.md' -exec gramma -d typos '{}' \;

This command will check Markdown files and skip typographical errors (see below).

Check spelling

If you have aspell installed, run:

find . -type f -not -path '*/\.*' -not -path '*/include/*' -not -path '*/script/*' -not -path '*/vendor/*' -not -path '*/_static/*' -not -name 'currency.csv' -not -name 'Makefile' -not -name '*.bat' -not -name '*.css' -not -name '*.doctree' -not -name '*.html' -not -name '*.in' -not -name '*.inv' -not -name '*.js' -not -name '*.mk' -not -name '*.mo' -not -name '*.pdf' -not -name '*.png' -not -name '*.po' -not -name '*.py' -not -name '*.pyc' -not -name '*.scss' -not -name '*.sh' -not -name '*.sqlite' -not -name '*.svg' -not -name '*.txt' -not -name '*.xlsx' -exec aspell -x -H check '{}' \;

This command will skip dot files, Make files, script files, vendored files, Docson files, the currency.csv codelist, and bat, css, doctree, html, in, inv, js, mk, mo, pdf, png, po, py, pyc, scss, sh, sqlite, svg, txt and xlsx files.

Configuration

aspell will flag many field names and proper nouns as errors. aspell allows you to add words to its dictionary during operation. Instead of re-adding the following words, simply replace ~/.aspell.en.pws with the following.

czf is from the documentation’s OCID prefix. yyyy is from copyright notices. wy and Za are from regular expressions for language suffixes.

personal_ws-1.1 en 868 
APIs
APMG
Acuna
Addler
AddressUnversioned
Aldate's
Alonso
AmendmentUnversioned
AnyCorp
AnyCounty
AnyTown
Anytown
AwardCriterion
AwardCriterionNumber
AwardUnversioned
BCP
BSI
Barnet
Begtin
Berners
Bibhusan
BidsStatistic
Bista
Bohórquez
Brandusescu
BudgetBreakdownUnversioned
BudgetUnversioned
CAPTCHA
CCCEV
CCSA
CEFACT
CELEX
CKAN
COFOG
COH
CPC
CPV
CPVS
CUCOP
Carlier
ClassificationUnversioned
CoST
ContactPointUnversioned
ContractNature
ContractUnversioned
ContractingProcess
ContractingProcessSummary
Corrigendum
CriterionUnversioned
Crédito
DGRMSG
Dar
Dewhurst
DocumentUnversioned
Domínguez
Drawdowns
Dudis
Durations
EPSG
EU's
Edafe
Enaholo
Eurostat
ExchangeRate
Extractives
FCNY
FDP
FDP's
Fazekas
FinancialProgressBreakdown
GBP
GGP
GSIN
GeoJSON
GeoNames
Greentree
Gruden
Habibullah
Halton
Hamel
Hercher
Heydon
IANA
IATI
IRR
IdentifierUnversioned
ImplementationUnversioned
Inkscape
Irum
ItemUnversioned
Jachym
Jiri
JuryMember
KPI
KPIs
Kami
Kaplan
Krzysiek
LIBOR
Leduc
Lenczner
Licensor
LineString
LinkedRelease
Lorien
LotGroup
MERCHANTABILITY
Madejski
Makgill
Mandelbaum
Maqsood
Marcela
Marchessault
Martínez
Mathieu
Maudry
Meike
Mihai
Mihály
MilestoneReference
MilestoneReferenceUnversioned
MilestoneUnversioned
Mireille
Montiel
MultiLineString
MultiPoint
MultiPolygon
Munilla
Muqbel
Myroslav
NGOs
NONINFRINGEMENT
Neontribe
Noé
Nyager
OC
OCHA
OCIDs
OCP
OECD
OKDP
OKPD
OLAP
OSMN
OSMR
OSMW
Oakleigh
Omidyar
Onerhime
Ontologies
OpenActive
OpenStreetMap
Opyr
OrganizationReference
OrganizationReference's
OrganizationReferenceUnversioned
OrganizationUnversioned
Oxfordshire
PFI
PPIAF
PPPIRC
PPPs
Paetzold
PerformanceFailure
PeriodUnversioned
PlanningUnversioned
Popolo
Postelnicu
ProjectType
PyCon
Público
QUDT
RDF
REITs
RESTful
RFP
RFQ
Raad
Raznick
ReadTheDocs
Redactions
Redpath
RelatedProcessUnversioned
RelatedProject
RequirementGroup
RequirementGroupUnversioned
RequirementReference
RequirementResponse
RequirementUnversioned
RiskUnversioned
Roadmap
Robichaud
Rozo
SDGs
SMEs
SMS
SPV
Schouten
Secretaría
Seember
SelectionCriterion
Serghi
ShareholderUnversioned
SimpleHTTPServer
Sisti
Skuhrovec
SquareMile
StringNullDateTimeVersioned
StringNullUriVersioned
StringNullVersioned
Subsector
Szoke
Taggart
TenderUnversioned
TransactionUnversioned
Transifex
UNCEFACT
UNSPSC
URIs
USD
UTC
UTF
Unlabeled
UnstructuredChange
UnstructuredChangeValue
Validators
ValueUnversioned
Vozárová
WGS
Whitehouse
XLSX
XPath
Za
abatements
acceleratedRationale
accessDetails
accessLevel
accessURL
actualValue
additionalClassifications
additionalContactPoints
additionalIdentifiers
additionalItems
additionalProcurementCategories
additionalProperties
additionality
administrativeEntity
advisors
aggregators
agreedMetrics
allOf
amendsReleaseID
annualDemand
anonymize
anyOf
approvalDate
approvalLetter
arrayMergeById
assetAndLiabilityAssessment
assetLifetime
assetProvider
assetTransfer
atypicalToolUrl
availabilityAndQuality
availableLanguage
avgToll
awardCancellation
awardCriteria
awardCriteriaDetails
awardCriterionFixed
awardCriterionType
awardID
awardNotice
awardPeriod
awardStatus
awardTwo
awardUpdate
backend
bankability
behavior
beneficialOwners
beneficialOwnership
bestProposal
bestValueToGovernment
bidOpening
bidStatistics
bidStatus
bidValidityPeriod
biddingDocuments
billOfQuantity
bindingJuryDecision
boolean
budgetApproval
budgetBreakdown
buyerCategories
buyerProfile
camelCase
cancellationDetails
cd
centralPurchasingBody
centric
certificationLevel
changeInLaw
changelog
chargePaidBy
charset
codebase
codelist
codelist's
codelists
commercialClose
competitiveMaximumPercentage
competitiveMinimumPercentage
compiledRecord
compiledRelease
completionCertificate
config
conflictOfInterest
consortiaMember
constructionComplete
constructionStarted
consultancyServices
consultingServices
contactPoint
contractAmendment
contractAnnexe
contractArrangements
contractClose
contractDraft
contractGuarantees
contractNature
contractNotice
contractPeriod
contractSchedule
contractSigned
contractStatus
contractSummary
contractTermination
contractTerms
contractUpdate
contractValue
contractingProcessStatus
contractingProcesses
costEstimate
costOnly
counterparty
countryCode
countryName
coveredBy
creditCard
criteria's
criterionThreshold
criterionWeight
crossBorderLaw
csv
cultureSportsAndRecreation
czf
dataType
dataset
datasets
dateAnswered
dateMet
dateModified
datePublished
dateSigned
debarments
debtEquityRatio
debtEquityRatioDetails
decimalExact
decimalRangeMiddle
defaultEvents
deliverables
deliveryAddress
deliveryAddresses
deliveryLocation
deprecatedVersion
dereferenceable
designAndConstruction
designContest
dev
developmentComplete
developmentStarted
dir
directDebit
disaggregated
discountRate
discountRateDetails
disqualifiedBidder
disqualifiedBidders
documentType
documentationUrl
draftFinalTender
dueDate
durationInDays
dynamicPurchasingSystem
dynamicPurchasingSystemStatus
dynamicPurchasingSystemType
eForms
earlyTermination
electronicAuction
electronicBids
electronicCataloguePolicy
electronicInvoicingPolicy
electronicSubmission
electronicSubmissionPolicy
eligibilityCriteria
endDate
endDateDetails
enquiries
enquiry
enquiryPeriod
enquiryPeriodEnd
enquiryPeriodStart
enquiryResponses
enum
environmentalImpact
equityInvestor
equityTransferCaps
essentialAssets
estimatedDemand
estimatedValue
eval
evaluationCommittee
evaluationCriteria
evaluationIndicators
evaluationReports
exchangeRateGuarantee
exchangeRateSource
exchangeRates
exclusiveMaximum
exclusiveMinimum
exclusiveRights
expectedValue
extendedProcurementCategory
extendsContractID
extensionexplorerlinklist
extensionlist
extensionselectortable
extensiontable
externalReference
faxNumber
feasibilityStudy
featureOf
finalAudit
finalScope
finalScopeDetails
finalValue
finalValueDetails
financeAdditionality
financeArrangements
financeAvailability
financeCategory
financeSummary
financeType
financialClose
financialIndicator
financialProgress
financialProgressReport
financialStatement
financialTerms
financingParty
fiscalBreakdownFieldMapping
fiscalImpact
followUpContracts
forceMajeure
foreignBids
foreignBidsFromEU
foreignBidsFromNonEU
foundational
frameworkAgreement
frameworkAgreementMethod
funder
funders
futureNoticeDate
genindex
geocoding
geolocated
geometryType
grantor
guaranteeReports
hasDynamicPurchasingSystem
hasElectronicAuction
hasElectronicOrdering
hasElectronicPayment
hasEnquiries
hasEssentialAssets
hasExclusiveRights
hasFrameworkAgreement
hasOptions
hasPrizes
hasRecurrence
hasRenewal
hasSubcontracting
hearingNotice
helpdesk
highestValidBidValue
html
idRef
implementationUpdate
implementers
inPerson
incrementing
inflationAndFx
initiationType
interestRate
interestedParty
interoperability
interoperable
invitationDate
isAccelerated
itemClassificationScheme
json
jsoninclude
jsonpointer
jsonschema
juryMembers
landAndSettlementImpact
landAvailability
landTransfer
leadBank
legalBasis
legalName
letterOfCredit
licensable
linkable
locationGazetteers
lotDetails
lotGroups
lotValues
lowestCost
lowestValidBidValue
mainProcurementCategory
mainProcurementCategoryDetails
majeure
marketStudies
maxExtentDate
maxItems
maxLength
maxProperties
maxValue
maxdepth
maximumBids
maximumCandidates
maximumLotsAwardedPerSupplier
maximumLotsBidPerSupplier
maximumParticipants
maximumPercentage
maximumValue
md
mediationBody
memberOf
mergeOptions
mergeStrategy
metadata
methodModality
methodOfPayment
metricID
mezzanineDebt
milestoneCode
milestoneStatus
milestoneType
minItems
minLength
minProperties
minValue
minimumCandidates
minimumPercentage
minimumScore
modality
modificationType
modindex
msgid
msgstr
multipleOf
namespace
namespaces
needsAssessment
negotiationParameters
neighboring
netPresentValue
netPresentValueDetails
netPresentValueRateDetails
newContractPeriod
newContractValue
newValue
noNegotiationNecessary
nocrossref
nonfinancial
notAllowed
notMet
nplurals
nullable
numberOfTenderers
ocds
ocdsVersion
ocdsmerge
ocid
oldContractPeriod
oldContractValue
oldValue
omitWhenMerged
oneOf
openCodelist
operationPerformance
operatorRevenueShare
optionToCombine
orderRationale
organizationIdentifierRegistrationAgency
organizationRole
otherGovernmentSupport
otherRequirements
otherRevenue
otherTerms
otherWitness
packageMetadata
pageEnd
pageStart
paidBy
partiallyMet
participationFee
participationFeeType
participationFees
partyDetail
partyRole
partyScale
patternProperties
paymentMethod
pdf
penaltyContracted
penaltyImposed
penaltyPaid
percentageExact
percentageRangeMiddle
performanceFailures
performanceReport
performanceTerms
periodRationale
physicalProcessReport
physicalProgressReport
plannedProcurementNotice
planningUpdate
png
pointsExact
pointsRangeMiddle
positiveInteger
positiveIntegerDefault
postalCode
ppp
pppModeRationale
pre
preProcurement
preQualification
preQualificationStatus
preferredBidder
preferredBidders
prepend
prepended
priceOnly
privateParty
processContactPoint
procurementCategory
procurementMethod
procurementMethodDetails
procurementMethodModalities
procurementMethodRationale
procurementMethodRationaleClassifications
procurementPlan
procurements
procuringEntity
programme
programmes
projectAdditionality
projectApproval
projectDetail
projectEvaluation
projectID
projectIRR
projectIRRDetails
projectPlan
projectScope
projectSector
projectStatus
projectType
providerOrganization
publicAuthority
publicBondIssue
publicPassengerTransportServicesKilometers
publicServiceMissionOrganization
publicationPolicy
publishedDate
py
qualificationAmendment
qualificationCancellation
qualificationPeriod
qualificationSystemConditions
qualificationSystemMethods
qualificationUpdate
qualifiedBidder
qualifiedBidders
qualityOnly
ratedCriteria
readme
receiverOrganization
reductionCriteria
relatedBid
relatedImplementationMilestone
relatedItem
relatedLot
relatedLots
relatedMilestone
relatedProcess
relatedProcessScheme
relatedProcesses
relatedProject
relatedProjectScheme
relatedProjects
relatedRequirementID
relatedTenderer
relatedTransactions
relatesTo
releaseDate
releaseID
releaseTag
renegotiations
renewalProcess
repaymentFrequency
replacementProcess
requestDate
requestForQualification
requirementGroups
requirementResponses
requiresGuarantees
requiresStaffNamesAndQualifications
reservedExecution
reservedParticipation
responseSource
revenueShare
reviewBody
reviewContactPoint
reviewDetails
rewardsAndPenalties
rewardsDetails
riskAllocation
riskCategory
riskComparison
riskImpact
riskLikelihood
riskPremium
riskPremiumDetails
riskProvisions
rst
schemaArray
schemas
searchable
secondStage
sectoral
securityClearanceDeadline
selectedParticipant
selectedParticipants
selectionCriteria
selectionCriterionType
selfEmployed
seniorDebt
serviceDescription
servicePayments
shareCapital
shareCapitalDetails
shelteredWorkshop
shortlistUpdate
shortlistedFirms
simpleTypes
singleBidOnly
sme
smeBids
socialHousing
socialStandards
socialWitness
sourceEntity
sourceParty
startDate
statusDetails
stepInRights
streetAddress
stringArray
subContract
sublicense
sublicensees
submissionDocuments
submissionMethod
submissionMethodDetails
submissionTerms
subsector
subsidyRatio
subsidyRatioDetails
subtype
successiveReduction
supplierCredit
svg
tariffIllustration
tariffMethod
tariffReview
technicalSpecifications
templating
tenderAmendment
tenderCancellation
tenderNotice
tenderPeriod
tenderStatus
tenderUpdate
tendererLegalForm
tenderers
tendersAbnormallyLow
terminologist
testDependencies
threadID
timeOfDay
timeline
timelines
timezones
toctree
totalSpend
totalValue
transactional
txconfig
txt
uid
underspend
unflatten
unflattener
unflattening
unflattens
uniqueItems
unitClassificationScheme
unitOfMeasure
unlabeled
unstructuredChanges
unsuccessfulProcess
uri
url
vCard
validBids
validator
valueCalculationMethod
valueForMoneyAnalysis
variantPolicy
ve
vehicleType
versionId
versioned
versionedRecord
versionedRelease
versioning
virtualenv
votingRights
votingRightsDetails
waterAndWaste
weightage
weightingDescription
wholeListMerge
winningBid
wireTransfer
withAndWithoutReopeningCompetition
withReopeningCompetition
withoutReopeningCompetition
wy
xargs
yyyy