Azure DevOps as a documentation source: `living-doc-collector-ad`
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 12/100
Research direction
This is an epic: start with the spike child, which needs an operator run against a real internal project and produces only a shape inventory. The collector skeleton is under work_items/ in living-doc-collector-ad (pinned to living-doc-utilities==0.8.0), and the HTML conversion lives in authoring.html_to_markdown. Done means the spike report confirms or removes each prepared contract field, and no newcomer-level task exists until that is finished.
Written by the indexing model from the issue text.
Description
Background
Azure DevOps is planned. In v0.1.0 it is not a documentation source. living-doc-collector-ad on master
(7a671f3) pins living-doc-utilities==0.8.0 and holds only the collector skeleton under work_items/. The contracts
already carry the Azure DevOps fields: source_ref.area_path, source_ref.iteration_path,
metadata.source.extraction_mode and AzureDevOps in systems, unfilled. utilities ships the pieces a work item
needs: authoring.html_to_markdown, normalize and the issue-body parser collector-gh will use.
docs/tutorials/ado-workitems-to-markdown.md and docs/guides/azure-devops-collection.md are marked planned.
The design to start from:
- Two body-extraction modes; the first real project decides which is built first.
markdown:
System.DescriptionHTML →html_to_markdown→normalize→ the same issue-body parsercollector-ghuses, so an
author writes the same## Description/## Status/## Business Value/## Acceptance Criteriasections as in
a GitHub issue. What the converter drops givesHTML_CONTENT_DROPPED. With no## Acceptance Criteriaheading,
a non-emptyMicrosoft.VSTS.Common.AcceptanceCriteriafield is used; with both, the description wins with
DUPLICATE_AC_SOURCE.field-map: a committed default map plus an operator override binds each canonical section
to a field. It changes only where the text comes from, never how it is read. System.Statefills onlysource_ref.tracker_state. User Story and Functionality status is authored, a Feature's
state is derived, and the mode is recorded inmetadata.source.extraction_mode.- Proof is golden entities, not a round trip. Each mode reproduces
utilities' golden entities from synthetic
fixtures. A round trip that drops content on both sides passes trivially. - Synthetic fixtures only.
collector-adowns their generator (tools/make_ado_fixtures.py) and a guard that
fails on an internal-looking URL, GUID or custom field reference.living-docregenerates
docs/examples/ado-work-items/from the pinned ref and fails CI on a byte difference. Nothing from an internal project
(organisation, project, credential, work-item content, custom field names) is ever committed.
Goals
collector-ad work-itemswrites a validdoc-entities.jsonthroughwrite_artifact. It takes a required
project-idand writes to<output-path>/work-items/. It follows the partial-collection rules, and a
--local-inputrun needs no credential and no network.- The mode the first real project needs reproduces
utilities' golden entities; each prepared contract field is
confirmed or removed. living-doc-toolkitreadsdoc-entities.jsoninnormalize-docsandcoverage-matrix; mixing or doubling
documentation sources still fails.living-docsnapshots the ADO chain over its synthetic corpus, and a milestone runs it on a real target with a
redacted report.- The action has the fleet shape and the repository's documentation follows the fleet's page rules; the ADO tutorial
carries a workflow; a release listscollector-ad.
Subtasks
In landing order. Each child is drafted when the previous one has merged.
-
living-doc(Spike form): measure one real internal project in an operator run. The report holds a shape
inventory only; no payload leaves the machine. It answers: hosting and auth, volume, the fields in use, the HTML
constructs, the type and status mapping, the entity-id rule, which extraction mode first, and whether the second
is needed. It confirms or removes each prepared contract field and names any missing one, which becomes a
utilitiescontract change. -
living-doc-collector-ad: the composite action in the fleet shape (copygenerator-markdown's venv step;
runtimerequirements.txt, dev tools inrequirements-dev.txt). -
living-doc-collector-ad: REST / WIQL client with 200-id batches and paging. It retries 429 and 5xx with
backoff andRetry-After; giving up names the id range and raisesSOURCE_UNAVAILABLE, never a partial result.
It covers the auth and hosting variants the spike found. -
living-doc-collector-ad: work-item mapping ontodoc-entities(types per the spike's table,native_type,
area_path,iteration_path, theentity_idrule withMISSING_ENTITY_ID;System.Stateonly in
tracker_state). -
living-doc-collector-ad: body extraction in the mode the spike selects, proven by golden entities, with every
HTML shape from the inventory tested and the fixture generator and guard committed. A converter gap is a
utilitiespatch. -
living-doc-collector-ad: relations → entity graph (UNRESOLVED_RELATION, counted inunresolved_refs). -
living-doc-collector-ad: wiring. Thework-itemsmode inaction.yml, with--local-input, the output
layout, a requiredproject-id, the partial-collection rules, the producer andextraction_mode, and a derived
Feature state. The component checks run inmake qa. -
living-doc-collector-ad(only if the spike recommends it): the second extraction mode. -
living-doc-collector-ad:local-integration.sh, whichliving-doc's runner reaches without a runner code
change. -
living-doc-toolkit:doc-entitiesinput fornormalize-docsandcoverage-matrix, behind an adapter
registry. An unknown producer is named;MIXED_DOCUMENTATION_SOURCESandMULTIPLE_DOCUMENTATION_SOURCESare
kept. Shared with the GitHub Issues epic: whichever epic gets there first builds it. -
living-doc: the ADO corpus regenerated from the pinnedcollector-ad, the snapshot chain, and both negative
runs. -
living-doc-collector-ad: documentation by the fleet's page rules, plus the manual link-check fix. -
living-doc: the ADO tutorial and guide lose "planned" and get a workflow, then a milestone run on a real
target with a redacted report, then the release.
Related / References
living-doc-utilitiesdocs/authoring/urls-and-html.md(HTML conversion),docs/contracts/pipeline-rules.md
(output layout, one documentation source, partial collection),docs/contracts/errors.md.living-docdocs/guides/azure-devops-collection.md,docs/tutorials/ado-workitems-to-markdown.md,
docs/projects/collector-ad.md,docs/_integration/README.md(internal targets, redacted reports).- Related issues: the contract should name a scenario's repository (a second
ui-testsproducer); the agentic layer
writes no issue body or work item. - Not in this epic: the
boards,pipelines,test_plansandrelease_notesmodes. They wait until a real
project needs one.
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- Avg merge
- 6h 14m
- Merged PRs (30d)
- 27
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from AbsaOSS/living-doc
-
type:tech-debt
Difficulty 1/5 Under an hour Newbie friendliness 78/100
AbsaOSS/living-doc#133 ·
Maintainers usually reply within 1 day
-
type:tech-debt
Difficulty 1/5 1-3 hours Newbie friendliness 85/100
AbsaOSS/living-doc#130 ·
Maintainers usually reply within 1 day
-
type:tech-debt
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
AbsaOSS/living-doc#129 ·
Maintainers usually reply within 1 day
-
type:tech-debt
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
AbsaOSS/living-doc#119 ·
Maintainers usually reply within 1 day
-
type:tech-debt
Difficulty 5/5 Over a week Newbie friendliness 5/100
AbsaOSS/living-doc#136 ·
Maintainers usually reply within 1 day
All issues in AbsaOSS/living-doc
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
deepchem/deepchem#5289 · 1 comment ·
Maintainers usually reply within 2 days
-
Difficulty 1/5 Under an hour Newbie friendliness 75/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 60/100
UKGovernmentBEIS/inspect_evals#2892 · 1 comment ·
Maintainers usually reply within 1 day
-
Versioning docs: say that no output from the 0.46 warning check means nothing is affectedPossibly taken @grelinfo claimed this today. Opendocumentation priority:low size:S
Difficulty 1/5 Under an hour Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
alphacrack/readme2demo#293 ·