diff --git a/ColorButtonUML.png b/ColorButtonUML.png new file mode 100644 index 0000000..5379d65 Binary files /dev/null and b/ColorButtonUML.png differ diff --git a/abstract.tex b/abstract.tex new file mode 100644 index 0000000..06de013 --- /dev/null +++ b/abstract.tex @@ -0,0 +1,5 @@ +This assignment guides students through a reproducible DevOps activity. It +defines the learning objectives, environment boundary, workflow, evidence, +reflection, and submission criteria. Replace bracketed text with assignment- +specific facts before release. Students should be able to recreate the work +from the submitted automation and runbook rather than from undocumented manual steps. diff --git a/cornell.cls b/cornell.cls new file mode 100644 index 0000000..79b37eb --- /dev/null +++ b/cornell.cls @@ -0,0 +1,367 @@ +%% +%% This is file `cornell.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% cornell.dtx (with options: `class') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from cornell.cls. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file cornell.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% Document class `cornell' to use with LaTeX 2e. +%% Based on `crnlphd' class. The following is from the file `crnlphd.dtx': +%% Based loosely on old cuphdthesis style file. +%% Found to give good results, according to the thesis secretary. +%% File: crnlphd.dtx Copyright (C) 1994 Sergio Gelato +%% Made available without any warranty, express or implied. +%% Modifications +%% 03/26/98 Mike Heisler +%% Conform to Eric's final version. Margins are subject to +%% The whim of the printer. +%% 10/10/97 Mike Heisler and Eric Dahl +%% Altered footnotesize and changed the Acknowledgement and +%% Biographical titles per thesis secretary guideline that +%% they must match the rest of the document, i.e. flush left +%% and capitalized rather than all caps +%% 05/21/97 Mike Heisler +%% Added a 'papers' option to handle bibliographis as sections +%% at the end of each chapter. Reduced top margin. +%% +%% $Id$ +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{cornell} +[1998/03/26 v2.0 + Cornell University thesis class] +\newif\ifphd +\DeclareOption{phd}{\phdtrue} +\DeclareOption{master}{\phdfalse} +\ExecuteOptions{phd} +\newif\ifpapers +\DeclareOption{papers}{\paperstrue} +\DeclareOption{10pt}{% + \OptionNotUsed% + \ClassWarningNoLine{cornell}{Font size 10pt not allowed; using 12pt}% +} +\DeclareOption{11pt}{% + \OptionNotUsed% + \ClassWarningNoLine{cornell}{Font size 11pt not allowed; using 12pt}% +} +\newcommand{\prelim@contents}[1]{} +\DeclareOption{tocprelim}{% + \renewcommand{\prelim@contents}[1]{\addcontentsline{toc}{section}{#1}} +} +\DeclareOption*{% + \PassOptionsToClass{\CurrentOption}{report}% +} +\ProcessOptions + +\LoadClass[12pt]{report}[1994/06/01] +\renewcommand{\defaultscriptratio}{.75} +\renewcommand{\defaultscriptscriptratio}{.6} +\setlength\headsep{25\p@} +\if@twocolumn +\else + \setlength\oddsidemargin{0in} + \setlength\evensidemargin{0in} + \setlength\textwidth{6.5in} + \setlength\topmargin{-0.5in} + \setlength\headheight{0.2in} + \setlength\headsep{0.35in} + \setlength\textheight{8.85in} + \setlength\footskip{0.5in} + \setlength\marginparwidth{0.85in} + \setlength\marginparsep{0.125in} +\fi +\if@compatibility + \setlength\topmargin{0\p@} +\else +\fi +\newcommand{\ps@cornell}{% +\def\@oddhead{{\slshape\rightmark}\hfil\thepage}% +\def\@oddfoot{}% +\def\@evenhead{\thepage\hfil{\slshape\leftmark}}% +\def\@evenfoot{}% +\def\chaptermark##1{}% +\def\sectionmark##1{}% +} +\newcommand{\ps@cornellc}{% +\def\@oddhead{\hfil\thepage\hfil}% +\def\@oddfoot{}% +\def\@evenhead{\@oddhead}% +\def\@evenfoot{}% +\def\chaptermark##1{}% +\def\sectionmark##1{}% +} +\raggedbottom +\newcommand{\@prolformat}[1]{{\begin{flushleft} \Huge #1 \end{flushleft}} } +\newcommand{\ackname}{\@prolformat{Acknowledgements}} +\newcommand{\bioname}{\@prolformat{Biographical Sketch}} +\renewcommand{\contentsname}{\@prolformat{Table of Contents}} +\renewcommand{\listtablename}{\@prolformat{List of Tables}} +\renewcommand{\listfigurename}{\@prolformat{List of Figures}} +\renewcommand{\l@figure}{\@dottedtocline{1}{1.5em}{2.6em}} +\let\l@table\l@figure + +\renewenvironment{thebibliography}[1] + {\ifpapers \clearpage \section*{\bibname% + \@mkboth{\uppercase{\bibname}}{\uppercase{\bibname}}}% + \else% + \chapter*{\bibname% + \@mkboth{\uppercase{\bibname}}{\uppercase{\bibname}}}% + \fi% + \list{\@biblabel{\arabic{enumiv}}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\arabic{enumiv}}}% + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.\@m\relax + \ifpapers% + \addcontentsline{toc}{section}{\bibname}% + \else% + \addcontentsline{toc}{chapter}{\bibname}% + \fi + \singlespacing} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \normalspacing + \endlist} + +\newcommand{\@titlesize}{\Large} +\newcommand{\@subtitlesize}{\large} +\newcommand{\@authorsize}{\normalsize} % No Pharaoh he. +\newcommand{\@conferralmonth}{January} +\newcommand{\@conferralyear}{} + +\newcommand{\titlesize}[1]{\renewcommand{\@titlesize}{#1}} +\newcommand{\subtitlesize}[1]{\renewcommand{\@subtitlesize}{#1}} +\newcommand{\authorsize}[1]{\renewcommand{\@authorsize}{#1}} +\newcommand{\conferraldate}[2]{% + \renewcommand{\@conferralmonth}{#1} + \renewcommand{\@conferralyear}{#2} +} +\newcommand{\@degreefield}{Master of Science} %CHANGED +\newcommand{\degreefield}[1]{\renewcommand{\@degreefield}{#1}} %CHANGED + +\renewcommand{\maketitle}{% + \begin{titlepage}% + \vspace*{-0.24in} + \begin{center}% + \@titlesize \@title + \end{center} + \vfill + %\begin{center} + %\@subtitlesize + %A \ifphd Dissertation \else Thesis \fi \\ %CHANGED + %Presented to the Faculty of the Graduate School \\ + %of Cornell University \\ + %in Partial Fulfillment of the Requirements for the Degree of \\ + %\ifphd Doctor of Philosophy \else \@degreefield \fi %CHANGED + %\end{center} + \vfill + \begin{center} + \@authorsize + by \\ + \@author \\ + \@conferralmonth\ \@conferralyear + \end{center} + \vspace*{0.26in} + \end{titlepage} +} + +\renewenvironment{titlepage}{% + \typeout{Title page} + \pagestyle{empty} + \doublespacing +}{% + \normalspacing\clearpage +} + + +\newenvironment{copyrightpage}{% + \typeout{Copyleft page} + \pagestyle{empty} + \null\vfil + \begin{center} +}{% + \end{center} + \vfil\null + \clearpage +} + +\newcommand{\makecopyright}{% + \begin{copyrightpage} + \copyright\ \@copyrightholder\ \@copyrightyear \\ + ALL RIGHTS RESERVED \\[.5in] + \end{copyrightpage} +} +\newcommand{\@copyrightholder}{\@author} +\newcommand{\@copyrightyear}{\@conferralyear} + +\newcommand{\copyrightholder}[1]{\renewcommand{\@copyrightholder}{#1}} +\newcommand{\copyrightyear}[1]{\renewcommand{\@copyrightyear}{#1}} + + +\newlength{\@abhdskip} +\renewenvironment{abstract}{% + \typeout{Abstract} + \singlespacing + \ifphd %CHANGED + \setlength{\@abhdskip}{.25in} + \addtolength{\@abhdskip}{-\topmargin} + \vspace*{\@abhdskip} + \begin{center} + \@abstracttitle \\ + \ \\ + \@author \\ + \@conferralyear + \end{center} + \vspace{.25in} + \else %CHANGED + \chapter*{% + \begin{center} + \normalsize + ABSTRACT + \end{center} + } + \par + \fi %CHANGED + \pagestyle{empty} + \thispagestyle{empty} +}{% + \clearpage +} + +\newcommand{\@abstracttitle}{\@title} +\newcommand{\abstracttitle}[1]{\renewcommand{\@abstracttitle}{#1}} + + +\newenvironment{biosketch}{% + \typeout{Vita} + \pagestyle{plain} + \pagenumbering{roman} + \setcounter{page}{3} + \prelim@contents{Biographical Sketch} + \chapter*{% +\bioname + } + \par +}{% + \clearpage +} + +\newenvironment{dedication}{% + \prelim@contents{Dedication} + \null\vfil + \begin{center} +}{ + \end{center} + \vfil\null + \clearpage +} + +\newenvironment{acknowledgements}{% + \prelim@contents{Acknowledgments} + \chapter*{% +\ackname + } + \par +}{% + \cleardoublepage +} + +\newcommand{\contentspage}{% + \singlespacing + \label{toc} + \prelim@contents{\contentsname} + \tableofcontents + \normalspacing + \clearpage +} + +\newcommand{\tablelistpage}{% + \singlespacing + \label{lot} + \prelim@contents{\listtablename} + \listoftables + \normalspacing + \clearpage +} + +\newcommand{\figurelistpage}{% + \singlespacing + \label{lof} + \prelim@contents{\listfigurename} + \listoffigures + \normalspacing + \clearpage +} +\newcommand{\abbrlist}{% + \singlespacing + \prelim@contents{List of Abbreviations} + \chapter*{List of Abbreviations} +} + +\newcommand{\symlist}{% + \singlespacing + \prelim@contents{List of Symbols} + \chapter*{List of Symbols} +} + +\newcommand{\preface}{% + \singlespacing + \prelim@contents{Preface} + \chapter*{Preface} +} + +\newcommand{\singlespacing}{% + \let\CS=\@currsize\renewcommand{\baselinestretch}{1.0}\tiny\CS} +\newcommand{\singlespacingplus}{% + \let\CS=\@currsize\renewcommand{\baselinestretch}{1.25}\tiny\CS} +\newcommand{\doublespacing}{% + \let\CS=\@currsize\renewcommand{\baselinestretch}{1.75}\tiny\CS} +\newcommand{\realdoublespacing}{% + \let\CS=\@currsize\renewcommand{\baselinestretch}{2}\tiny\CS} +\newcommand{\normalspacing}{\doublespacing} +\newcommand{\footnotespacing}{\singlespacing} +\newcommand{\changespacing}[2]{% + \renewcommand{#1}{% + \let\CS=\@currsize\renewcommand{\baselinestretch}{#2}\tiny\CS}% +} +\newcommand{\changenormalspacing}[1]{\renewcommand{\normalspacing}{#1}} +\normalspacing + +\endinput +%% +%% End of file `cornell.cls'. diff --git a/devopsAIAgentGuide.tex b/devopsAIAgentGuide.tex new file mode 100644 index 0000000..608fffe --- /dev/null +++ b/devopsAIAgentGuide.tex @@ -0,0 +1,107 @@ +\chapter{AI Agent Usage Guide} +\ChapterLabel{AIAgentGuide} +\index{AI agent} +\index{AI agent!DevOps workflow} +\index{Appendix!AI Agent Usage Guide} + +\section{How to Use This Appendix} +An AI agent that creates, reviews, or maintains an assignment shall read this +file first. It shall identify the task in the routing table, read the minimum +authoritative sources, and expand context only for a discovered dependency or +inconsistency. This guide is maintained in LaTeX so it is visible, versioned, +and reviewable with the assignment. + +\section{Governing Principles} +The authored LaTeX files, versioned automation, and approved assignment +materials are authoritative. The PDF is a review artifact and shall not be +edited directly. AI may draft, explain, analyze, check consistency, and assist +with builds. It shall not invent completion, evidence, access, costs, grades, +approvals, command output, security posture, or operational results. + +\section{Chapter File Convention} +\index{AI agent!chapter file convention} +Every assignment chapter shall be stored in exactly one file named with the +\texttt{devops} prefix, a PascalCase chapter name, and the \texttt{.tex} +suffix. For example, Chapter~2 is fully contained in +\path{devopsExampleAssignment.tex}. A chapter file shall begin with its +\texttt{\string\chapter\{...\}} command and contain all of that chapter's +sections and subsections. Do not split one chapter across files, create +section-only \texttt{.tex} files, or use \texttt{\string\input} or +\texttt{\string\include} to assemble a chapter from smaller fragments. + +Supporting non-chapter files may use a different name only when they are not +chapter content: \texttt{prologue.tex}, \texttt{abstract.tex}, +\texttt{devopsGlossary.tex}, and \texttt{devopsReferences.bib} are examples. +Appendix chapters follow the same chapter-file convention. + +\section{AI Quick Start} +\begin{enumerate} +\item Read this guide and identify the requested outcome. +\item Select the closest task below and load only its listed sources. +\item Inspect supplied facts and report consequential gaps or assumptions. +\item Make narrowly scoped changes; preserve stable IDs, glossary terms, and history. +\item Never request, print, store, or commit credentials, tokens, personal data, or production data. +\item Build the complete PDF, inspect the log, visually inspect affected pages, and record material AI use in \ChapterRef{AIPromptLog}. +\end{enumerate} + +\section{Task Routing} +\small +\begin{tabularx}{\linewidth}{L{4.0cm}Y} +\caption{AI Task-Routing Table\label{Table:AITaskRouting}}\\ +\toprule \textbf{Task} & \textbf{Minimum authoritative sources}\\ \midrule +Initialize an assignment & \texttt{devopsAssignment.tex}, \texttt{prologue.tex}, \texttt{devopsIntroduction.tex}, \texttt{devopsExampleAssignment.tex}, and the instructor's assignment facts.\\ +Develop a workflow & \texttt{devopsExampleAssignment.tex}, source repository materials, and authorized environment constraints.\\ +Define evidence & \texttt{devopsExampleAssignment.tex} and controlled execution outputs.\\ +Review a retrospective & \texttt{devopsExampleAssignment.tex} and the submitted workflow or runbook.\\ +Edit AI guidance & \texttt{devopsAIAgentGuide.tex}, \texttt{devopsAIPromptLog.tex}, \texttt{devopsDocumentGuide.tex}, and \texttt{devopsAssignment.tex}.\\ +Compile or troubleshoot & \texttt{devopsAssignment.tex}, \texttt{devopsDocumentGuide.tex}, the affected chapter, and the build log.\\ \bottomrule +\end{tabularx} +\normalsize + +\section{DevOps-Specific Rules} +\begin{enumerate} +\item Prefer versioned, repeatable automation over undocumented manual steps. +\item Treat deployment output, monitoring data, and screenshots as evidence only when they reflect an actual execution. +\item Design failure exercises to be isolated, reversible, and authorized. +\item Apply least privilege and never place secrets in LaTeX, source control, prompts, screenshots, or logs. +\item State expected cloud cost, cleanup action, and resource ownership for each remote-environment activity. +\item Identify whether a recommendation is a proposal, an instructor directive, or demonstrated evidence. +\end{enumerate} + +\section{Example AI Requests} +\subsection{Create an Assignment Brief} +\begin{verbatim} +Read devopsAIAgentGuide.tex and use the Initialize an Assignment context. +From the supplied SSW 590 objective and constraints, fill only supported +placeholders in the introduction and activity brief. Propose clear, observable +completion criteria, a safe cleanup action, and a rubric. Do not invent cloud +access, due dates, policy, costs, or approved tools. Update history, compile, +and report instructor decisions still needed. +\end{verbatim} + +\subsection{Review a Student Workflow} +\begin{verbatim} +Read devopsAIAgentGuide.tex and the workflow, evidence, and retrospective +chapters. Review the supplied repository and sanitized evidence for +reproducibility, least privilege, observability, rollback, and cleanup. +Separate verified facts from gaps and recommendations. Do not claim that an +unexecuted command passed, and do not request credentials or operate resources. +\end{verbatim} + +\section{Human Decisions and Information Boundaries} +The instructor retains authority over assignment scope, grading, due dates, +approved tooling, access, budgets, security posture, exceptions, and policy. +An AI agent shall surface alternatives and evidence, not represent a decision +as approved. Record material prompts, assumptions, corrections, and unresolved +issues in \ChapterRef{AIPromptLog}. + +\section{Completion Checklist} +\begin{itemize} +\item Scope, deliverables, environment, constraints, and cleanup are clear. +\item Activity identifiers and evidence references are valid and unique. +\item Examples contain no secrets, personal data, or unsafe production actions. +\item New controlled terms are added to the glossary and indexed. +\item The newest approved change is recorded in document history. +\item The complete build succeeds with no unresolved references or missing files. +\item A human reviews all decisions requiring instructional or operational authority. +\end{itemize} diff --git a/devopsAIPromptLog.tex b/devopsAIPromptLog.tex new file mode 100644 index 0000000..e1356de --- /dev/null +++ b/devopsAIPromptLog.tex @@ -0,0 +1,14 @@ +\chapter{AI Prompt Log} +\ChapterLabel{AIPromptLog} +\index{AI prompt log} +\section{How to Use This Appendix} +Use this log when AI assistance materially affects assignment wording, +automation, evidence interpretation, troubleshooting, or feedback. Record +enough context for an instructor or reviewer to understand the input, output, +assumptions, and human corrections. Do not record credentials or personal data. + +\section{Example Record} +Date: \textit{[timestamp]}; Tool and model: \textit{[name]}; Task: +\textit{[requested outcome]}; Inputs: \textit{[sanitized constraints and +evidence]}; Output used: \textit{[summary]}; Human review and corrections: +\textit{[summary]}; Unresolved assumptions: \textit{[list or none]}.