getMessage()); okr_redirect('okr_detail.php?id=' . $targetId); } } $entry = okr_fetch_entry($id); if (!$entry) { okr_flash('danger', 'Objective not found.'); okr_redirect('index.php'); } $flash = okr_flash(); $projectName = project_name(); $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? project_description(); $projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? ''; $cssVersion = is_file(__DIR__ . '/assets/css/custom.css') ? (string) filemtime(__DIR__ . '/assets/css/custom.css') : (string) time(); $jsVersion = is_file(__DIR__ . '/assets/js/main.js') ? (string) filemtime(__DIR__ . '/assets/js/main.js') : (string) time(); $canEditOwner = okr_can_edit_owner($entry, $profile) || okr_is_admin($profile); $canReview = okr_can_review($entry, $profile); $notifications = okr_collect_notifications(okr_fetch_entries(), 8); ?> <?= e($projectName) ?> · <?= e($entry['objective_title']) ?>
← Back to workspace

· Owner:
Objective summary

Owner
Approver
level
Submitted
Approved
Objective score % / key results above 70%
Scoring matrix

Key results and scores

$keyResult): ?>
Key result Due date Owner score Manager score Effective
% %
Owner action

Update self-scores

$keyResult): ?>
Owner score before manager approval.
You can refine progress at any time; the objective score recalculates automatically.
Approver action

Approve or return with feedback

$keyResult): ?>
Owner score: %
Discussion

Comments

No comments yet. Comments are shared and visible alongside the approval trail.
Permissions

Current access

Recent activity

Objective timeline

Global notifications

What everyone can see

No notifications yet. Workspace activity will show up here automatically.
Cleanup

Delete draft

Delete is limited to draft objectives in this first iteration to keep the workflow safe.