@ghostpaw/questlog 0.5.1 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -1
- package/SKILL.md +293 -0
- package/dist/cli.js +7202 -0
- package/dist/database-DShQ4N46.d.cts +20 -0
- package/dist/database-DShQ4N46.d.ts +20 -0
- package/dist/index.cjs +35 -5
- package/dist/index.d.cts +5 -19
- package/dist/index.d.ts +5 -19
- package/dist/index.js +35 -5
- package/dist/mcp-server.js +5929 -0
- package/dist/mcp.cjs +4952 -0
- package/dist/mcp.d.cts +89 -0
- package/dist/mcp.d.ts +89 -0
- package/dist/mcp.js +4944 -0
- package/package.json +46 -9
- package/skills/questlog/SKILL.md +293 -0
- package/skills/questlog/references/archive-delete-and-prune.md +25 -0
- package/skills/questlog/references/choose-work-shape.md +25 -0
- package/skills/questlog/references/clarify-ambiguous-requests.md +24 -0
- package/skills/questlog/references/close-work-and-claim-outcomes.md +23 -0
- package/skills/questlog/references/create-concrete-quest.md +21 -0
- package/skills/questlog/references/detect-slips-and-staleness.md +22 -0
- package/skills/questlog/references/escalate-and-unblock.md +22 -0
- package/skills/questlog/references/frame-initiative-questline.md +23 -0
- package/skills/questlog/references/handle-exceptions-and-weird-cases.md +24 -0
- package/skills/questlog/references/intake-triage.md +25 -0
- package/skills/questlog/references/maintain-clear-ownership.md +22 -0
- package/skills/questlog/references/manage-approvals-and-promises.md +22 -0
- package/skills/questlog/references/plan-successor-work.md +22 -0
- package/skills/questlog/references/plan-time-correctly.md +22 -0
- package/skills/questlog/references/prioritize-across-streams.md +21 -0
- package/skills/questlog/references/protect-capacity-and-focus.md +20 -0
- package/skills/questlog/references/recover-from-modeling-mistakes.md +25 -0
- package/skills/questlog/references/report-status-and-manage-expectations.md +20 -0
- package/skills/questlog/references/revise-or-reshape-commitment.md +22 -0
- package/skills/questlog/references/run-operational-review.md +24 -0
- package/skills/questlog/references/run-recurring-rhythms.md +24 -0
- package/skills/questlog/references/search-and-retrieve-context.md +23 -0
- package/skills/questlog/references/sequence-with-unlocks.md +23 -0
- package/skills/questlog/references/settle-rumor-into-structure.md +25 -0
- package/skills/questlog/references/tag-and-filter-portfolios.md +21 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Maintain Clear Ownership
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `shape_work`
|
|
5
|
+
- `tag_work`
|
|
6
|
+
- `inspect_questlog_item`
|
|
7
|
+
- `review_questlog`
|
|
8
|
+
|
|
9
|
+
Steps:
|
|
10
|
+
1. Use `shape_work` to create or settle the real work item with ownership clarity embedded in the title, objective, or narrative details.
|
|
11
|
+
2. Use `tag_work` when a lightweight ownership or team classification tag helps portfolio review.
|
|
12
|
+
3. Use `inspect_questlog_item` to confirm the exact wording and current structure of the owned work.
|
|
13
|
+
4. Use `review_questlog` with tag filters when you need to inspect one ownership slice of the portfolio.
|
|
14
|
+
|
|
15
|
+
Outcome handling:
|
|
16
|
+
- Treat `success` as confirmation that the ownership signal is now present in real work structure or classification.
|
|
17
|
+
- Treat `no_op` as confirmation that the ownership tag or state was already present.
|
|
18
|
+
|
|
19
|
+
Failure handling:
|
|
20
|
+
- Do not invent an assignee field that the system does not have.
|
|
21
|
+
- Do not hide unclear ownership behind generic task wording.
|
|
22
|
+
- Do not treat tags as a substitute for writing a clear objective or context.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Manage Approvals And Promises
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `shape_work`
|
|
5
|
+
- `organize_work`
|
|
6
|
+
- `plan_quest`
|
|
7
|
+
- `review_questlog`
|
|
8
|
+
|
|
9
|
+
Steps:
|
|
10
|
+
1. Model the approval step as a concrete quest instead of a hidden note.
|
|
11
|
+
2. Model dependent execution work separately and connect it with `organize_work` unlocks when the approval is a hard prerequisite.
|
|
12
|
+
3. Use `plan_quest` to record the real timing pressure on the approval and the dependent work.
|
|
13
|
+
4. Use `review_questlog` to confirm which approval work is blocked, due soon, or overdue.
|
|
14
|
+
|
|
15
|
+
Outcome handling:
|
|
16
|
+
- Treat `success` as confirmation that the promise is now visible in real work structure.
|
|
17
|
+
- Treat blocked review results as a truth to manage, not as an inconvenience to hide.
|
|
18
|
+
|
|
19
|
+
Failure handling:
|
|
20
|
+
- Do not bury approvals inside another quest objective.
|
|
21
|
+
- Do not pretend a promise is safe if the approval quest is already overdue.
|
|
22
|
+
- Do not skip the unlock when the downstream work truly cannot start yet.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Plan Successor Work
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `run_quest`
|
|
5
|
+
- `shape_work`
|
|
6
|
+
- `capture_rumor`
|
|
7
|
+
- `inspect_questlog_item`
|
|
8
|
+
|
|
9
|
+
Steps:
|
|
10
|
+
1. If successor work is already clear at abandonment time, use `run_quest` with `action: "abandon_and_spawn_followups"`.
|
|
11
|
+
2. If the current quest should finish cleanly before successor work is created, use `run_quest` first and then use `shape_work` for the new quest or questline.
|
|
12
|
+
3. If the next step is still fuzzy, use `capture_rumor` instead of inventing a fake follow-up.
|
|
13
|
+
4. Use `inspect_questlog_item` on spawned or newly created work when you need to confirm the handoff.
|
|
14
|
+
|
|
15
|
+
Outcome handling:
|
|
16
|
+
- Treat `success` as a real successor planning step.
|
|
17
|
+
- Treat `error` from empty follow-up spawn requests as a signal to use plain abandon or another honest path instead.
|
|
18
|
+
|
|
19
|
+
Failure handling:
|
|
20
|
+
- Do not abandon-and-spawn with an empty follow-up list.
|
|
21
|
+
- Do not invent successor work when the real next step is still uncertain.
|
|
22
|
+
- Do not leave successor work implied but unmodeled when it is already clearly known.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Plan Time Correctly
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `plan_quest`
|
|
5
|
+
- `review_questlog`
|
|
6
|
+
- `inspect_questlog_item`
|
|
7
|
+
|
|
8
|
+
Steps:
|
|
9
|
+
1. Use `plan_quest` with `action: "set_time"` to change not-before, due, schedule, all-day, or estimate fields.
|
|
10
|
+
2. Use `inspect_questlog_item` when the current timing state needs exact diagnosis before changing it.
|
|
11
|
+
3. Use `review_questlog` to verify the downstream effect in deferred, due-soon, overdue, scheduled-now, or missed-scheduled views.
|
|
12
|
+
4. If the exact timing request is unchanged, accept the `no_op` result instead of forcing meaningless churn.
|
|
13
|
+
|
|
14
|
+
Outcome handling:
|
|
15
|
+
- Treat `success` as a real planning change.
|
|
16
|
+
- Treat `no_op` as confirmation that the planning state is already correct.
|
|
17
|
+
- Treat `error` as conflicting or invalid timing input that must be repaired before retrying.
|
|
18
|
+
|
|
19
|
+
Failure handling:
|
|
20
|
+
- Do not use one date field to mean every kind of timing intent.
|
|
21
|
+
- Do not assume a schedule miss is the same as being overdue.
|
|
22
|
+
- Do not re-plan blindly without first understanding the current quest timing state.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Prioritize Across Streams
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `review_questlog`
|
|
5
|
+
- `inspect_questlog_item`
|
|
6
|
+
- `plan_quest`
|
|
7
|
+
|
|
8
|
+
Steps:
|
|
9
|
+
1. Use `review_questlog` to assemble the real candidate pool: available, blocked, due-soon, overdue, or questline slices.
|
|
10
|
+
2. Use `inspect_questlog_item` on a candidate when the row is not enough to decide.
|
|
11
|
+
3. Prioritize from the available work, not from blocked wishful thinking.
|
|
12
|
+
4. Reflect the choice in `plan_quest` so the system shows what is actually next.
|
|
13
|
+
|
|
14
|
+
Outcome handling:
|
|
15
|
+
- Treat blocked candidates as real constraints, not as silent ties.
|
|
16
|
+
- Treat empty views as real signal about the current portfolio state.
|
|
17
|
+
|
|
18
|
+
Failure handling:
|
|
19
|
+
- Do not choose blocked work as if it were executable now.
|
|
20
|
+
- Do not pretend a priority decision exists if the candidate pool is still unclear.
|
|
21
|
+
- Do not leave the system unchanged after deciding what should move next.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Protect Capacity And Focus
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `review_questlog`
|
|
5
|
+
- `plan_quest`
|
|
6
|
+
- `run_quest`
|
|
7
|
+
|
|
8
|
+
Steps:
|
|
9
|
+
1. Use `review_questlog` to inspect active, in-progress, scheduled-now, or missed-scheduled load before committing more work.
|
|
10
|
+
2. If too much is scheduled or active at once, use `plan_quest` to rebalance timing instead of pretending everything can move now.
|
|
11
|
+
3. Use `run_quest` only for real execution progress once the load is honest.
|
|
12
|
+
|
|
13
|
+
Outcome handling:
|
|
14
|
+
- Treat dense scheduled-now or in-progress views as real capacity warnings.
|
|
15
|
+
- Treat empty views as signal too; do not manufacture urgency.
|
|
16
|
+
|
|
17
|
+
Failure handling:
|
|
18
|
+
- Do not stack new timing commitments on top of already impossible schedules.
|
|
19
|
+
- Do not use execution updates to hide planning overload.
|
|
20
|
+
- Do not confuse availability with realistic capacity.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Recover From Modeling Mistakes
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `inspect_questlog_item`
|
|
5
|
+
- `review_questlog`
|
|
6
|
+
- `shape_work`
|
|
7
|
+
- `organize_work`
|
|
8
|
+
- `plan_quest`
|
|
9
|
+
- `retire_work`
|
|
10
|
+
|
|
11
|
+
Steps:
|
|
12
|
+
1. Diagnose first with `inspect_questlog_item` or the appropriate `review_questlog` view.
|
|
13
|
+
2. Choose the smallest honest fix: re-plan timing, change structure, correct unlocks, archive or hide an item, or reshape successor work.
|
|
14
|
+
3. Prefer a corrective move that preserves truthful history over one that merely makes the surface look cleaner.
|
|
15
|
+
4. Re-run inspect or review after the correction to confirm the model now matches reality.
|
|
16
|
+
|
|
17
|
+
Outcome handling:
|
|
18
|
+
- Treat `success` as confirmation that the smallest honest correction landed.
|
|
19
|
+
- Treat `no_op` as a clue that the model may already match the intended correction.
|
|
20
|
+
- Treat `error` as a sign you still have not diagnosed the issue precisely enough.
|
|
21
|
+
|
|
22
|
+
Failure handling:
|
|
23
|
+
- Do not start with mutation before diagnosis.
|
|
24
|
+
- Do not erase real execution history just to hide a modeling error.
|
|
25
|
+
- Do not stack multiple speculative corrections when one targeted fix will do.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Report Status And Manage Expectations
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `review_questlog`
|
|
5
|
+
- `inspect_questlog_item`
|
|
6
|
+
|
|
7
|
+
Steps:
|
|
8
|
+
1. Use `review_questlog` to assemble the current slices that matter: available, blocked, in-progress, overdue, resolved, or questlines.
|
|
9
|
+
2. Use `inspect_questlog_item` when one item needs exact detail before you report its state or risk.
|
|
10
|
+
3. Report what the system actually shows instead of compressing everything into one vague summary.
|
|
11
|
+
4. If a stakeholder asks about something that is not in the system, say that explicitly and capture or shape it separately instead of bluffing.
|
|
12
|
+
|
|
13
|
+
Outcome handling:
|
|
14
|
+
- Treat empty review views as valid status facts.
|
|
15
|
+
- Treat `error` as a bad view or filter contract that must be fixed before reporting.
|
|
16
|
+
|
|
17
|
+
Failure handling:
|
|
18
|
+
- Do not rely on memory when the system can answer directly.
|
|
19
|
+
- Do not call blocked work available just because it is important.
|
|
20
|
+
- Do not merge resolved and reward-unclaimed states into one misleading status line.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Revise Or Reshape Commitment
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `inspect_questlog_item`
|
|
5
|
+
- `plan_quest`
|
|
6
|
+
- `run_quest`
|
|
7
|
+
|
|
8
|
+
Steps:
|
|
9
|
+
1. Use `inspect_questlog_item` to confirm whether the quest has already started or resolved.
|
|
10
|
+
2. If the quest has not started, use `plan_quest` with `action: "revise_objective"` to sharpen the commitment.
|
|
11
|
+
3. If execution has already started, do not rewrite history. Use `run_quest` to finish, abandon, or abandon-and-spawn follow-up work instead.
|
|
12
|
+
4. Accept `no_op` when the requested objective is already the current one.
|
|
13
|
+
|
|
14
|
+
Outcome handling:
|
|
15
|
+
- Treat `success` as a valid pre-start revision or honest lifecycle reshape.
|
|
16
|
+
- Treat `no_op` as confirmation that the objective already matches.
|
|
17
|
+
- Treat `error` from revise-after-start as a rule you should respect, not bypass.
|
|
18
|
+
|
|
19
|
+
Failure handling:
|
|
20
|
+
- Do not revise objective text after real execution has begun.
|
|
21
|
+
- Do not hide a broken commitment with wording changes when the truth is that the work must be abandoned or succeeded by follow-ups.
|
|
22
|
+
- Do not guess whether a quest has started; inspect it first.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Run Operational Review
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `review_questlog`
|
|
5
|
+
- `inspect_questlog_item`
|
|
6
|
+
- `plan_quest`
|
|
7
|
+
- `run_quest`
|
|
8
|
+
|
|
9
|
+
Steps:
|
|
10
|
+
1. Start with `review_questlog` and choose the right operational surface such as available, blocked, deferred, overdue, in-progress, or scheduled views.
|
|
11
|
+
2. Use `inspect_questlog_item` when one row needs a closer read before acting.
|
|
12
|
+
3. If the review reveals timing drift, use `plan_quest` to correct the planning state.
|
|
13
|
+
4. If the review reveals executable work that should actually move, use `run_quest` for lifecycle progress.
|
|
14
|
+
5. End the review with at least one honest system change when the review uncovered something actionable.
|
|
15
|
+
|
|
16
|
+
Outcome handling:
|
|
17
|
+
- Treat empty review views as valid `success`.
|
|
18
|
+
- Treat `needs_clarification` as expected when a view like `quests.scheduled_for_day` requires a day choice.
|
|
19
|
+
- Treat `error` as a sign that the chosen view or filter combination is invalid.
|
|
20
|
+
|
|
21
|
+
Failure handling:
|
|
22
|
+
- Do not substitute search for a structured review surface.
|
|
23
|
+
- Do not stop at observation when the review surfaced a real next action.
|
|
24
|
+
- Do not guess a day-specific schedule view without providing the day.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Run Recurring Rhythms
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `manage_repeatable`
|
|
5
|
+
- `review_questlog`
|
|
6
|
+
- `inspect_questlog_item`
|
|
7
|
+
- `run_quest`
|
|
8
|
+
|
|
9
|
+
Steps:
|
|
10
|
+
1. Use `manage_repeatable` with `action: "create"` to define the recurring pattern with RRULE and anchor timing.
|
|
11
|
+
2. Use `manage_repeatable` with `action: "preview_due"` or `review_questlog` with `view: "repeatables.due_anchors"` to inspect what is due.
|
|
12
|
+
3. Use `manage_repeatable` with `action: "spawn_due"` to materialize real concrete quests.
|
|
13
|
+
4. Use `inspect_questlog_item` or normal execution tools on the spawned quests.
|
|
14
|
+
5. Use `manage_repeatable` with `action: "update"` or `action: "archive"` to change future behavior honestly.
|
|
15
|
+
|
|
16
|
+
Outcome handling:
|
|
17
|
+
- Treat empty previews as valid `success`.
|
|
18
|
+
- Treat empty spawns as a real no-op instead of a failure.
|
|
19
|
+
- Treat `error` as a repeatable definition or RRULE problem that needs repair.
|
|
20
|
+
|
|
21
|
+
Failure handling:
|
|
22
|
+
- Do not model recurring work as one permanent open quest.
|
|
23
|
+
- Do not assume repeatables materialize automatically without `spawn_due`.
|
|
24
|
+
- Do not rewrite already spawned history when only the future cadence changed.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Search And Retrieve Context
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `search_questlog`
|
|
5
|
+
- `review_questlog`
|
|
6
|
+
- `inspect_questlog_item`
|
|
7
|
+
|
|
8
|
+
Steps:
|
|
9
|
+
1. Use `search_questlog` for free-text discovery across quests and rumors when you do not know the exact id yet.
|
|
10
|
+
2. Use `mode: "identify_one"` when you need one exact target and want the tool to stop at clarification instead of guessing.
|
|
11
|
+
3. Once you know the item id, switch to `inspect_questlog_item` for exact detail.
|
|
12
|
+
4. If the thing you need is better represented as a structured list or a non-FTS entity kind, use `review_questlog` instead of forcing search to do the wrong job.
|
|
13
|
+
5. Use `detailLevel: "compact"` by default and ask for `detailLevel: "full"` only when the richer payload is truly needed.
|
|
14
|
+
|
|
15
|
+
Outcome handling:
|
|
16
|
+
- Treat empty `search_questlog` results as valid `success`, not as proof that nothing relevant exists everywhere.
|
|
17
|
+
- Treat `needs_clarification` from identify-one search as a cue to choose a candidate.
|
|
18
|
+
- Treat `error` as a malformed query or invalid target problem.
|
|
19
|
+
|
|
20
|
+
Failure handling:
|
|
21
|
+
- Do not assume full-text search covers questlines, repeatable definitions, or every relational angle.
|
|
22
|
+
- Do not keep browsing when you already have an exact item id; inspect it.
|
|
23
|
+
- Do not read large full-detail payloads unless the next decision needs them.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Sequence With Unlocks
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `organize_work`
|
|
5
|
+
- `review_questlog`
|
|
6
|
+
- `inspect_questlog_item`
|
|
7
|
+
- `shape_work`
|
|
8
|
+
|
|
9
|
+
Steps:
|
|
10
|
+
1. Create the concrete quests first, then use `organize_work` with `add_unlock`, `remove_unlock`, or `replace_unlocks` to model hard gates.
|
|
11
|
+
2. Use `review_questlog` to confirm the effect in the blocked and available views.
|
|
12
|
+
3. Use `inspect_questlog_item` when the exact unlock graph on one quest needs diagnosis.
|
|
13
|
+
4. Treat unlocks as hard prerequisites, not as soft notes or labels.
|
|
14
|
+
|
|
15
|
+
Outcome handling:
|
|
16
|
+
- Treat `success` as a real unlock graph change.
|
|
17
|
+
- Treat `no_op` as confirmation that the blocker set already matched.
|
|
18
|
+
- Treat `error` as a real constraint problem such as self-unlock or cycle creation.
|
|
19
|
+
|
|
20
|
+
Failure handling:
|
|
21
|
+
- Do not use unlocks for work that is merely preferred or informative.
|
|
22
|
+
- Do not ignore blocked review results after adding an unlock.
|
|
23
|
+
- Do not force a dependency graph that violates the cycle rules.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Settle Rumor Into Structure
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `capture_rumor`
|
|
5
|
+
- `shape_work`
|
|
6
|
+
- `inspect_questlog_item`
|
|
7
|
+
- `review_questlog`
|
|
8
|
+
|
|
9
|
+
Steps:
|
|
10
|
+
1. Use `capture_rumor` first if the incoming work is not already tracked as intake.
|
|
11
|
+
2. When the rumor is ready to graduate, use `shape_work` with `action: "settle_rumor"`.
|
|
12
|
+
3. Include the real downstream structure: one or more quest inputs, a questline input, or both.
|
|
13
|
+
4. If `shape_work` returns `needs_clarification`, answer the missing structure question before retrying.
|
|
14
|
+
5. Use `inspect_questlog_item` on the rumor or created items when you need to confirm provenance and relationships.
|
|
15
|
+
6. Use `review_questlog` with `view: "quests.available"` when you want to verify that the new concrete work is now visible for execution.
|
|
16
|
+
|
|
17
|
+
Outcome handling:
|
|
18
|
+
- Treat `success` as a real commitment transition out of intake.
|
|
19
|
+
- Treat `needs_clarification` as a normal stop when the downstream structure is still underspecified.
|
|
20
|
+
- Treat `error` as a sign that the target or input contract needs repair before settlement can continue.
|
|
21
|
+
|
|
22
|
+
Failure handling:
|
|
23
|
+
- If the rumor is still too vague, do not settle it just to clean up intake.
|
|
24
|
+
- If only one concrete next step is known, create that exact structure instead of inventing a larger arc.
|
|
25
|
+
- Do not leave settled work unverifed; inspect or review the result.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Tag And Filter Portfolios
|
|
2
|
+
|
|
3
|
+
Primary tools:
|
|
4
|
+
- `tag_work`
|
|
5
|
+
- `review_questlog`
|
|
6
|
+
- `inspect_questlog_item`
|
|
7
|
+
|
|
8
|
+
Steps:
|
|
9
|
+
1. Use `tag_work` to add, remove, or replace classification tags on quests and repeatable definitions.
|
|
10
|
+
2. Use `review_questlog` with `filters.tagNames` to review one tagged slice of the portfolio.
|
|
11
|
+
3. Use `inspect_questlog_item` when you need the exact detail of a tagged item before changing its classification.
|
|
12
|
+
|
|
13
|
+
Outcome handling:
|
|
14
|
+
- Treat `success` as confirmation that the target now has the intended tag set.
|
|
15
|
+
- Treat `no_op` as confirmation that the requested tag state already existed.
|
|
16
|
+
- Treat `error` as an invalid target or unsupported action problem.
|
|
17
|
+
|
|
18
|
+
Failure handling:
|
|
19
|
+
- Do not use tags to fake lifecycle state or prerequisites.
|
|
20
|
+
- Do not ignore no-op tag responses; they often tell you the portfolio is already classified correctly.
|
|
21
|
+
- Do not filter by tags and assume that is the same as a schedule or dependency review.
|