Files
SecondBrain/10 Knowledge/Templates/Decision Template.md
T

3.6 KiB

date, status, owner, project
date status owner project
<% tp.date.now("YYYY-MM-DD") %> proposed Amadou

<%* const date = tp.date.now("YYYY-MM-DD"); const year = tp.date.now("YYYY"); const month = tp.date.now("MM");

// -------------------------------------------------- // 1. Ask for decision title // --------------------------------------------------

const title = await tp.system.prompt("Decision title");

if (!title) { new Notice("Decision cancelled: no title entered."); return; }

const safeTitle = title .replace(/[\/:*?"<>|]/g, "-") .trim();

// -------------------------------------------------- // 2. Find project folders for current year // --------------------------------------------------

const projectsFolder = 20 Work/Projects/${year}; const projectsRoot = app.vault.getAbstractFileByPath(projectsFolder);

let projectFolders = [];

if (projectsRoot && projectsRoot.children) { projectFolders = projectsRoot.children .filter(item => item.children) .sort((a, b) => a.name.localeCompare(b.name)); }

// -------------------------------------------------- // 3. Project dropdown // --------------------------------------------------

const projectLabels = [ "— No project —", ...projectFolders.map(folder => folder.name) ];

const projectValues = [ null, ...projectFolders ];

const selectedProject = await tp.system.suggester( projectLabels, projectValues, false, "Related project" );

if (selectedProject === undefined) { new Notice("Decision cancelled."); return; }

const projectName = selectedProject ? selectedProject.name : "";

const projectLink = selectedProject ? [[${projectName}]] : "";

// -------------------------------------------------- // 4. Create Decisions/YYYY/MM // --------------------------------------------------

const baseFolder = "20 Work/Decisions"; const yearFolder = ${baseFolder}/${year}; const monthFolder = ${yearFolder}/${month};

if (!app.vault.getAbstractFileByPath(yearFolder)) { await app.vault.createFolder(yearFolder); }

if (!app.vault.getAbstractFileByPath(monthFolder)) { await app.vault.createFolder(monthFolder); }

// -------------------------------------------------- // 5. Build filename // --------------------------------------------------

let filename = ${date} - ${safeTitle};

if (selectedProject) { const safeProject = projectName .replace(/[\/:*?"<>|]/g, "-") .trim();

filename = ${date} - ${safeProject} - ${safeTitle}; }

// -------------------------------------------------- // 6. Move + rename // --------------------------------------------------

await tp.file.move(${monthFolder}/${filename});

// -------------------------------------------------- // 7. Update Properties AFTER Templater finishes // --------------------------------------------------

tp.hooks.on_all_templates_executed(async () => {

const file = tp.file.find_tfile( ${monthFolder}/${filename} );

if (!file) return;

await tp.app.fileManager.processFrontMatter( file, (frontmatter) => { frontmatter.date = date; frontmatter.status = "proposed"; frontmatter.owner = "Amadou"; frontmatter.project = projectLink; } ); }); -%>

🟡 Proposed · 🟢 Decided · 🔴 Rejected · Superseded

Context

Why is a decision needed?

<% tp.file.cursor() %>

Decision

What was decided?

Why

Why was this option chosen?

Consequences

What are we accepting by making this decision?


Options Considered (optional)

Option 1

Description:

Pros:

Cons:

Option 2

Description:

Pros:

Cons: