Configure Wayfinder agent workflows
This commit is contained in:
1 parent
b24e505544
commit
646ccf9d99
4 files changed
+374
No files matched your search
@@ -0,0 +1,32 @@
|
|||||||
|
# Aleksandr-test
|
||||||
|
|
||||||
|
Aleksandr-test is an independent test project for learning Wayfinder
|
||||||
|
and AI-agent workflows. Do not import domain assumptions, terminology,
|
||||||
|
or architectural decisions from other projects.
|
||||||
|
|
||||||
|
## Agent skills
|
||||||
|
|
||||||
|
Use the original installed Matt Pocock skills without modifying their
|
||||||
|
SKILL.md files, frontmatter, or supporting resources.
|
||||||
|
|
||||||
|
When a requested skill is missing from the session's available-skills
|
||||||
|
list, read its installed SKILL.md directly and follow its instructions.
|
||||||
|
When instructions refer to a Skill tool that is unavailable, read and
|
||||||
|
apply the named skill's SKILL.md instead.
|
||||||
|
|
||||||
|
### Issue tracker
|
||||||
|
|
||||||
|
Issues and specs live in Gitea Issues for tararar/Aleksandr-test.
|
||||||
|
Use the existing tea CLI with login agavagroup.
|
||||||
|
See `docs/agents/issue-tracker.md`.
|
||||||
|
|
||||||
|
### Triage labels
|
||||||
|
|
||||||
|
Use the five standard state labels and the bug/enhancement categories.
|
||||||
|
See `docs/agents/triage-labels.md`.
|
||||||
|
|
||||||
|
### Domain docs
|
||||||
|
|
||||||
|
Use single-context documentation: root GLOSSARY.md and docs/adr/.
|
||||||
|
Create domain documents lazily.
|
||||||
|
See `docs/agents/domain.md`.
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# Domain Docs
|
||||||
|
|
||||||
|
Aleksandr-test uses a single-context documentation layout.
|
||||||
|
|
||||||
|
It is an independent test project for learning Wayfinder and AI-agent
|
||||||
|
workflows. Do not import the Amazon domain context or decisions from
|
||||||
|
Andrey's project or any other project.
|
||||||
|
|
||||||
|
## Before exploring, read these
|
||||||
|
|
||||||
|
- GLOSSARY.md at the repository root, if it exists.
|
||||||
|
- ADRs in docs/adr/ that concern the area being explored.
|
||||||
|
|
||||||
|
If these files do not exist, proceed silently. Do not flag their absence
|
||||||
|
or propose creating empty files upfront.
|
||||||
|
|
||||||
|
The domain-modeling skill creates documents lazily when terms or
|
||||||
|
decisions are actually resolved.
|
||||||
|
|
||||||
|
## File structure
|
||||||
|
|
||||||
|
```text
|
||||||
|
/
|
||||||
|
├── GLOSSARY.md
|
||||||
|
├── docs/
|
||||||
|
│ └── adr/
|
||||||
|
│ ├── 0001-slug.md
|
||||||
|
│ └── 0002-slug.md
|
||||||
|
└── ...
|
||||||
|
```
|
||||||
|
|
||||||
|
Create GLOSSARY.md only when the first project-specific term is resolved.
|
||||||
|
Create docs/adr/ only when the first qualifying ADR is needed.
|
||||||
|
|
||||||
|
Do not create GLOSSARY-MAP.md or per-context documentation as part of
|
||||||
|
this single-context setup.
|
||||||
|
|
||||||
|
## Use the glossary's vocabulary
|
||||||
|
|
||||||
|
When output names a domain concept in an issue, proposal, hypothesis,
|
||||||
|
or test, use the term defined in GLOSSARY.md.
|
||||||
|
|
||||||
|
Avoid synonyms that the glossary explicitly rejects.
|
||||||
|
|
||||||
|
If a needed concept is missing, reconsider whether it belongs to this
|
||||||
|
project or is a real gap to resolve with domain-modeling.
|
||||||
|
|
||||||
|
Keep the glossary limited to project-specific terms. It is not a spec,
|
||||||
|
an implementation guide, or a scratch pad.
|
||||||
|
|
||||||
|
Use the installed domain-modeling/GLOSSARY-FORMAT.md when writing entries.
|
||||||
|
|
||||||
|
## Architectural decisions
|
||||||
|
|
||||||
|
Read relevant ADRs before proposing changes.
|
||||||
|
|
||||||
|
If a proposal contradicts an existing ADR, surface the conflict
|
||||||
|
explicitly and explain why reopening the decision may be appropriate.
|
||||||
|
|
||||||
|
Offer an ADR only when all three conditions hold:
|
||||||
|
|
||||||
|
1. The decision is meaningfully costly to reverse.
|
||||||
|
2. A future reader would find it surprising without context.
|
||||||
|
3. It results from a real trade-off between alternatives.
|
||||||
|
|
||||||
|
Use the installed domain-modeling/ADR-FORMAT.md.
|
||||||
|
|
||||||
|
Number ADR files sequentially, starting at 0001 and incrementing the
|
||||||
|
highest existing number.
|
||||||
@@ -0,0 +1,226 @@
|
|||||||
|
# Issue tracker: Gitea
|
||||||
|
|
||||||
|
Issues and specs for this repository live in Gitea Issues.
|
||||||
|
|
||||||
|
- Server: https://gitea.agavagroup.com
|
||||||
|
- Repository: tararar/Aleksandr-test
|
||||||
|
- Git remote: origin
|
||||||
|
- CLI: existing tea 0.15.1
|
||||||
|
- Login: agavagroup
|
||||||
|
|
||||||
|
Use tea for issue operations. Do not substitute GitHub gh commands
|
||||||
|
or GitLab glab commands.
|
||||||
|
|
||||||
|
## PowerShell session
|
||||||
|
|
||||||
|
If tea is unavailable in PATH, use the verified executable directly.
|
||||||
|
The existing login configuration is located under the following
|
||||||
|
XDG_CONFIG_HOME:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$env:XDG_CONFIG_HOME = 'C:\Users\tarar\AppData\Local'
|
||||||
|
$tea = 'C:\Users\tarar\AppData\Local\Programs\tea\tea.exe'
|
||||||
|
```
|
||||||
|
|
||||||
|
These are process-local settings. Do not change persistent environment
|
||||||
|
variables or login configuration as part of issue operations.
|
||||||
|
|
||||||
|
Use the existing login. Never print, copy into project files, or pass
|
||||||
|
the API token as a command-line argument. Do not enable debug logging.
|
||||||
|
|
||||||
|
## Conventions
|
||||||
|
|
||||||
|
The commands below use the PowerShell variable $tea defined above.
|
||||||
|
Replace placeholders with actual values.
|
||||||
|
|
||||||
|
### Read an issue
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea issues --login agavagroup --repo tararar/Aleksandr-test --comments <number>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Read comments
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea comments list --login agavagroup --repo tararar/Aleksandr-test --output json --limit 100 --page 1 <number>
|
||||||
|
```
|
||||||
|
|
||||||
|
### List issues
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea issues list --login agavagroup --repo tararar/Aleksandr-test --state open --kind issues --output json --fields index,state,author,url,title,body,created,updated,assignees,labels --limit 100 --page 1
|
||||||
|
```
|
||||||
|
|
||||||
|
Use --labels "needs-triage" to filter by a label.
|
||||||
|
|
||||||
|
List commands are paginated. Read subsequent pages until an empty page
|
||||||
|
is returned when complete results are required.
|
||||||
|
|
||||||
|
### Create an issue
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea issues create --login agavagroup --repo tararar/Aleksandr-test --title "<title>" --description "<body>"
|
||||||
|
```
|
||||||
|
|
||||||
|
Add --labels "<label1>,<label2>" when labels are required.
|
||||||
|
|
||||||
|
### Edit an issue body
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea issues edit --login agavagroup --repo tararar/Aleksandr-test --description "<complete updated body>" <number>
|
||||||
|
```
|
||||||
|
|
||||||
|
Read the current body first. Preserve unrelated content and discussion.
|
||||||
|
The description argument replaces the body.
|
||||||
|
|
||||||
|
### Add a comment
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea comments add --login agavagroup --repo tararar/Aleksandr-test --description "<body>" <number>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Apply or remove labels
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea issues edit --login agavagroup --repo tararar/Aleksandr-test --add-labels "<label>" <number>
|
||||||
|
& $tea issues edit --login agavagroup --repo tararar/Aleksandr-test --remove-labels "<label>" <number>
|
||||||
|
```
|
||||||
|
|
||||||
|
Use separate operations for addition and removal: tea gives
|
||||||
|
--add-labels precedence over --remove-labels.
|
||||||
|
|
||||||
|
During triage, preserve unrelated labels and ensure the final result has
|
||||||
|
exactly one category label and one state label. If existing state labels
|
||||||
|
conflict, ask the maintainer before changing them.
|
||||||
|
|
||||||
|
### Assign an issue
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea issues edit --login agavagroup --repo tararar/Aleksandr-test --add-assignees "<username>" <number>
|
||||||
|
```
|
||||||
|
|
||||||
|
Use a verified Gitea username. Do not assume that the login alias
|
||||||
|
agavagroup is a username or that @me is supported.
|
||||||
|
|
||||||
|
### Close or reopen an issue
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea issues close --login agavagroup --repo tararar/Aleksandr-test <number>
|
||||||
|
& $tea issues reopen --login agavagroup --repo tararar/Aleksandr-test <number>
|
||||||
|
```
|
||||||
|
|
||||||
|
When closing with an explanation, post the comment first and close
|
||||||
|
the issue only after the comment succeeds.
|
||||||
|
|
||||||
|
### List or create labels
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& $tea labels list --login agavagroup --repo tararar/Aleksandr-test --output json --limit 100 --page 1
|
||||||
|
& $tea labels create --login agavagroup --repo tararar/Aleksandr-test --name "<name>" --color "<hex color>" --description "<description>"
|
||||||
|
```
|
||||||
|
|
||||||
|
Check existing labels before creating any. Use agreed colors and
|
||||||
|
descriptions; do not create duplicates.
|
||||||
|
|
||||||
|
### Multiline text
|
||||||
|
|
||||||
|
Use a PowerShell single-quoted here-string or read an approved UTF-8
|
||||||
|
body file into a variable, then pass that variable to --description.
|
||||||
|
|
||||||
|
Do not use Bash heredoc syntax in PowerShell. Do not evaluate issue text
|
||||||
|
as shell code.
|
||||||
|
|
||||||
|
## Pull requests as a triage surface
|
||||||
|
|
||||||
|
PRs as a request surface: no.
|
||||||
|
|
||||||
|
Do not include pull requests in automatic triage discovery.
|
||||||
|
If the maintainer explicitly requests work on a pull request, inspect
|
||||||
|
the installed tea help and establish the necessary workflow first.
|
||||||
|
|
||||||
|
## When a skill says "publish to the issue tracker"
|
||||||
|
|
||||||
|
Create a Gitea issue using the conventions above.
|
||||||
|
|
||||||
|
## When a skill says "fetch the relevant ticket"
|
||||||
|
|
||||||
|
Read the Gitea issue and its comments.
|
||||||
|
|
||||||
|
## Wayfinding operations
|
||||||
|
|
||||||
|
Use issue bodies and links to represent the map and its relationships.
|
||||||
|
This workflow does not rely on unverified native sub-issue or dependency
|
||||||
|
features of the server.
|
||||||
|
|
||||||
|
### Map
|
||||||
|
|
||||||
|
The map is one issue carrying the wayfinder:map label and the sections
|
||||||
|
required by the installed wayfinder skill: Notes, Decisions-so-far, Fog,
|
||||||
|
and its ordered ticket list.
|
||||||
|
|
||||||
|
### Child ticket
|
||||||
|
|
||||||
|
Create one issue per decision ticket.
|
||||||
|
|
||||||
|
Put `Part of #<map-number>` near the top of the body.
|
||||||
|
Add a link to the child issue in the map's ordered task list.
|
||||||
|
|
||||||
|
Use one of the type labels:
|
||||||
|
|
||||||
|
- wayfinder:research
|
||||||
|
- wayfinder:prototype
|
||||||
|
- wayfinder:grilling
|
||||||
|
- wayfinder:task
|
||||||
|
|
||||||
|
Check for these labels and create missing ones only when authorized
|
||||||
|
Wayfinder work requires them.
|
||||||
|
|
||||||
|
### Blocking
|
||||||
|
|
||||||
|
Put `Blocked by: #<number>, #<number>` near the top of the child body.
|
||||||
|
Omit this line when there are no blockers.
|
||||||
|
|
||||||
|
A ticket is unblocked only when all listed blocker issues are closed.
|
||||||
|
Read blocker state from Gitea; do not infer it from stale map text.
|
||||||
|
|
||||||
|
### Frontier
|
||||||
|
|
||||||
|
Read the map's ordered ticket list and inspect its children.
|
||||||
|
|
||||||
|
A frontier candidate must be:
|
||||||
|
|
||||||
|
- open;
|
||||||
|
- unblocked;
|
||||||
|
- unassigned.
|
||||||
|
|
||||||
|
Choose the first eligible ticket in map order.
|
||||||
|
|
||||||
|
### Claim
|
||||||
|
|
||||||
|
Assign the ticket to the verified driving developer's username before
|
||||||
|
starting work. This is the first write of a ticket-working session.
|
||||||
|
|
||||||
|
Re-read the ticket immediately before claiming it. This workflow does
|
||||||
|
not provide an atomic claim; if a competing assignment is observed,
|
||||||
|
stop and resolve ownership with the maintainer.
|
||||||
|
|
||||||
|
### Resolve
|
||||||
|
|
||||||
|
1. Post the answer as a comment.
|
||||||
|
2. Close the child issue after the comment succeeds.
|
||||||
|
3. Update its task-list entry in the map.
|
||||||
|
4. Append a concise decision and a link to the answer in Decisions-so-far.
|
||||||
|
|
||||||
|
Preserve the rest of the map body.
|
||||||
|
|
||||||
|
In human-facing output, refer to maps and tickets by their titles,
|
||||||
|
with links, rather than bare issue numbers.
|
||||||
|
|
||||||
|
## API capability boundary
|
||||||
|
|
||||||
|
tea 0.15.1 provides an authenticated api command. Prefer the verified
|
||||||
|
issue commands above.
|
||||||
|
|
||||||
|
Before using an additional API endpoint, verify its method, path,
|
||||||
|
request shape, and availability against the target server's API
|
||||||
|
documentation. Do not assume GitHub API endpoints work on Gitea.
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# Triage Labels
|
||||||
|
|
||||||
|
The skills use canonical roles. This file maps those roles to the
|
||||||
|
actual Gitea label strings for tararar/Aleksandr-test.
|
||||||
|
|
||||||
|
## State roles
|
||||||
|
|
||||||
|
| Label in mattpocock/skills | Label in our tracker | Meaning |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| needs-triage | needs-triage | Maintainer needs to evaluate the issue |
|
||||||
|
| needs-info | needs-info | Waiting on the reporter for more information |
|
||||||
|
| ready-for-agent | ready-for-agent | Fully specified and ready for an AFK agent |
|
||||||
|
| ready-for-human | ready-for-human | Requires human implementation |
|
||||||
|
| wontfix | wontfix | Will not be actioned |
|
||||||
|
|
||||||
|
## Category roles
|
||||||
|
|
||||||
|
| Canonical role | Label in our tracker | Meaning |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| bug | bug | Something is broken |
|
||||||
|
| enhancement | enhancement | New feature or improvement |
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
Every triaged issue must carry exactly one category label and exactly
|
||||||
|
one state label. Preserve unrelated labels.
|
||||||
|
|
||||||
|
If multiple state labels conflict, flag the conflict and ask the
|
||||||
|
maintainer before changing anything.
|
||||||
|
|
||||||
|
Use these mapped strings whenever a skill refers to a canonical role.
|
||||||
|
|
||||||
|
The normal state path starts at needs-triage and proceeds to needs-info,
|
||||||
|
ready-for-agent, ready-for-human, or wontfix. Once the reporter supplies
|
||||||
|
the requested information, needs-info returns to needs-triage for
|
||||||
|
re-evaluation.
|
||||||
|
|
||||||
|
Follow the installed triage skill for verification, recommendations,
|
||||||
|
agent briefs, closure, and recording rejected enhancements.
|
||||||
|
|
||||||
|
Every issue or comment posted during triage must begin with:
|
||||||
|
|
||||||
|
> *This was generated by AI during triage.*
|
||||||
|
|
||||||
|
Check Gitea for existing labels before creating missing ones.
|
||||||
|
This configuration file defines the vocabulary; writing it does not
|
||||||
|
itself create labels on the server.
|
||||||
Reference in new issue
Block a user